[{"data":1,"prerenderedAt":173691},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-tong-ji-han-shu":3,"wiki-doc-nav":830},{"id":4,"title":5,"body":6,"description":823,"extension":824,"meta":825,"navigation":193,"path":826,"seo":827,"stem":828,"__hash__":829},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":8,"toc":810},"minimark",[9,13,17,20,25,85,89,135,206,210,213,252,255,303,307,345,349,423,427,492,496,499,502,505,508,544,548,588,592,669,672,676,739,743,806],[10,11,5],"h1",{"id":12},"_11统计函数",[14,15,16],"p",{},"sum max min mean",[14,18,19],{},"这些有axis参数，可以指定方向",[21,22,24],"h2",{"id":23},"_111-sum求和函数","11.1 sum()求和函数",[26,27,32],"pre",{"className":28,"code":29,"language":30,"meta":31,"style":31},"language-python shiki shiki-themes github-light github-dark","#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n","python","",[33,34,35,44,76],"code",{"__ignoreMap":31},[36,37,40],"span",{"class":38,"line":39},"line",1,[36,41,43],{"class":42},"sJ8bj","#创建一维数组\n",[36,45,47,51,55,58,62,65,68,70,73],{"class":38,"line":46},2,[36,48,50],{"class":49},"sVt8B","a",[36,52,54],{"class":53},"szBVR","=",[36,56,57],{"class":49},"np.random.randint(",[36,59,61],{"class":60},"sj4cs","1",[36,63,64],{"class":49},",",[36,66,67],{"class":60},"100",[36,69,64],{"class":49},[36,71,72],{"class":60},"20",[36,74,75],{"class":49},")\n",[36,77,79,82],{"class":38,"line":78},3,[36,80,81],{"class":49},"np.sum(a)",[36,83,84],{"class":42},"#求和\n",[21,86,88],{"id":87},"_112-max求最大值函数","11.2 max()求最大值函数",[26,90,92],{"className":28,"code":91,"language":30,"meta":31,"style":31},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[33,93,94,98,118,123,129],{"__ignoreMap":31},[36,95,96],{"class":38,"line":39},[36,97,43],{"class":42},[36,99,100,102,104,106,108,110,112,114,116],{"class":38,"line":46},[36,101,50],{"class":49},[36,103,54],{"class":53},[36,105,57],{"class":49},[36,107,61],{"class":60},[36,109,64],{"class":49},[36,111,67],{"class":60},[36,113,64],{"class":49},[36,115,72],{"class":60},[36,117,75],{"class":49},[36,119,120],{"class":38,"line":78},[36,121,122],{"class":49},"np.max(a)\n",[36,124,126],{"class":38,"line":125},4,[36,127,128],{"class":42},"#最大索引(求最大元素的索引)arg\n",[36,130,132],{"class":38,"line":131},5,[36,133,134],{"class":49},"np.argmax(a)\n",[26,136,138],{"className":28,"code":137,"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,139,140,166,189,195],{"__ignoreMap":31},[36,141,142,145,147,150,152,155,158,160,163],{"class":38,"line":39},[36,143,144],{"class":49},"a ",[36,146,54],{"class":53},[36,148,149],{"class":49}," np.array([",[36,151,61],{"class":60},[36,153,154],{"class":49},", ",[36,156,157],{"class":60},"5",[36,159,154],{"class":49},[36,161,162],{"class":60},"3",[36,164,165],{"class":49},"])\n",[36,167,168,171,173,175,177,179,182,184,187],{"class":38,"line":46},[36,169,170],{"class":49},"b ",[36,172,54],{"class":53},[36,174,149],{"class":49},[36,176,162],{"class":60},[36,178,154],{"class":49},[36,180,181],{"class":60},"2",[36,183,154],{"class":49},[36,185,186],{"class":60},"4",[36,188,165],{"class":49},[36,190,191],{"class":38,"line":78},[36,192,194],{"emptyLinePlaceholder":193},true,"\n",[36,196,197,200,203],{"class":38,"line":125},[36,198,199],{"class":60},"print",[36,201,202],{"class":49},"(np.maximum(a, b))   ",[36,204,205],{"class":42},"# [3 5 4]，每个位置上取较大值\n",[21,207,209],{"id":208},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,211,212],{},"①一维数组：",[26,214,216],{"className":28,"code":215,"language":30,"meta":31,"style":31},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[33,217,218,222,242,247],{"__ignoreMap":31},[36,219,220],{"class":38,"line":39},[36,221,43],{"class":42},[36,223,224,226,228,230,232,234,236,238,240],{"class":38,"line":46},[36,225,50],{"class":49},[36,227,54],{"class":53},[36,229,57],{"class":49},[36,231,61],{"class":60},[36,233,64],{"class":49},[36,235,67],{"class":60},[36,237,64],{"class":49},[36,239,72],{"class":60},[36,241,75],{"class":49},[36,243,244],{"class":38,"line":78},[36,245,246],{"class":42},"#求平均值\n",[36,248,249],{"class":38,"line":125},[36,250,251],{"class":49},"np.mean(a)\n",[14,253,254],{},"②二维数组",[26,256,258],{"className":28,"code":257,"language":30,"meta":31,"style":31},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[33,259,260,265,293,298],{"__ignoreMap":31},[36,261,262],{"class":38,"line":39},[36,263,264],{"class":42},"#二维数组\n",[36,266,267,270,272,275,277,279,282,285,287,289,291],{"class":38,"line":46},[36,268,269],{"class":49},"aa",[36,271,54],{"class":53},[36,273,274],{"class":49},"np.arange(",[36,276,61],{"class":60},[36,278,64],{"class":49},[36,280,281],{"class":60},"13",[36,283,284],{"class":49},").reshape(",[36,286,162],{"class":60},[36,288,64],{"class":49},[36,290,186],{"class":60},[36,292,75],{"class":49},[36,294,295],{"class":38,"line":78},[36,296,297],{"class":42},"#对数组中的所有数求平均\n",[36,299,300],{"class":38,"line":125},[36,301,302],{"class":49},"np.mean(aa)\n",[21,304,306],{"id":305},"_114-median求中位数函数","11.4 median()求中位数函数",[26,308,310],{"className":28,"code":309,"language":30,"meta":31,"style":31},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[33,311,312,317,335,340],{"__ignoreMap":31},[36,313,314],{"class":38,"line":39},[36,315,316],{"class":42},"#求中位数\n",[36,318,319,322,324,326,328,330,333],{"class":38,"line":46},[36,320,321],{"class":49},"b",[36,323,54],{"class":53},[36,325,274],{"class":49},[36,327,61],{"class":60},[36,329,64],{"class":49},[36,331,332],{"class":60},"10",[36,334,75],{"class":49},[36,336,337],{"class":38,"line":78},[36,338,339],{"class":49},"np.median(b)\n",[36,341,342],{"class":38,"line":125},[36,343,344],{"class":42},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[21,346,348],{"id":347},"_115-power求幂运算函数","11.5 power()求幂运算函数",[26,350,352],{"className":28,"code":351,"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,353,354,370,375,380,389,394,405],{"__ignoreMap":31},[36,355,356,358,360,362,364,366,368],{"class":38,"line":39},[36,357,321],{"class":49},[36,359,54],{"class":53},[36,361,274],{"class":49},[36,363,61],{"class":60},[36,365,64],{"class":49},[36,367,332],{"class":60},[36,369,75],{"class":49},[36,371,372],{"class":38,"line":46},[36,373,374],{"class":42},"#幂运算\n",[36,376,377],{"class":38,"line":78},[36,378,379],{"class":42},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[36,381,382,385,387],{"class":38,"line":125},[36,383,384],{"class":49},"np.power(b,",[36,386,181],{"class":60},[36,388,75],{"class":49},[36,390,391],{"class":38,"line":131},[36,392,393],{"class":42},"#或者以下代码，将数据存储起来\n",[36,395,397,400,402],{"class":38,"line":396},6,[36,398,399],{"class":49},"y",[36,401,54],{"class":53},[36,403,404],{"class":49},"np.empty_like(b)\n",[36,406,408,410,412,414,418,420],{"class":38,"line":407},7,[36,409,384],{"class":49},[36,411,181],{"class":60},[36,413,64],{"class":49},[36,415,417],{"class":416},"s4XuR","out",[36,419,54],{"class":53},[36,421,422],{"class":49},"y)\n",[21,424,426],{"id":425},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[26,428,430],{"className":28,"code":429,"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,431,432,448,453,458,462,481],{"__ignoreMap":31},[36,433,434,436,438,440,442,444,446],{"class":38,"line":39},[36,435,321],{"class":49},[36,437,54],{"class":53},[36,439,274],{"class":49},[36,441,61],{"class":60},[36,443,64],{"class":49},[36,445,332],{"class":60},[36,447,75],{"class":49},[36,449,450],{"class":38,"line":46},[36,451,452],{"class":42},"#开方\n",[36,454,455],{"class":38,"line":78},[36,456,457],{"class":49},"np.sqrt(b)\n",[36,459,460],{"class":38,"line":125},[36,461,393],{"class":42},[36,463,464,466,468,471,474,476,479],{"class":38,"line":131},[36,465,399],{"class":49},[36,467,54],{"class":53},[36,469,470],{"class":49},"np.empty_like(b,",[36,472,473],{"class":416},"dtype",[36,475,54],{"class":53},[36,477,478],{"class":60},"float",[36,480,75],{"class":49},[36,482,483,486,488,490],{"class":38,"line":396},[36,484,485],{"class":49},"np.sqrt(b,",[36,487,417],{"class":416},[36,489,54],{"class":53},[36,491,422],{"class":49},[21,493,495],{"id":494},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,497,498],{},"对数组中的元素累计求和，可指定轴",[14,500,501],{},"#累计求和的意思是：",[14,503,504],{},"a = np.array([1, 2, 3, 4])",[14,506,507],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[26,509,511],{"className":28,"code":510,"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,512,513,529,534,539],{"__ignoreMap":31},[36,514,515,517,519,521,523,525,527],{"class":38,"line":39},[36,516,321],{"class":49},[36,518,54],{"class":53},[36,520,274],{"class":49},[36,522,61],{"class":60},[36,524,64],{"class":49},[36,526,332],{"class":60},[36,528,75],{"class":49},[36,530,531],{"class":38,"line":46},[36,532,533],{"class":49},"np.cumsum(b)\n",[36,535,536],{"class":38,"line":78},[36,537,538],{"class":42},"#结果：\n",[36,540,541],{"class":38,"line":125},[36,542,543],{"class":42},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[21,545,547],{"id":546},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[26,549,551],{"className":28,"code":550,"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,552,553,569,574,579,583],{"__ignoreMap":31},[36,554,555,557,559,561,563,565,567],{"class":38,"line":39},[36,556,321],{"class":49},[36,558,54],{"class":53},[36,560,274],{"class":49},[36,562,61],{"class":60},[36,564,64],{"class":49},[36,566,332],{"class":60},[36,568,75],{"class":49},[36,570,571],{"class":38,"line":46},[36,572,573],{"class":42},"#对数组中的元素累计求积，可指定轴\n",[36,575,576],{"class":38,"line":78},[36,577,578],{"class":49},"np.cumprod(b)\n",[36,580,581],{"class":38,"line":125},[36,582,538],{"class":42},[36,584,585],{"class":38,"line":131},[36,586,587],{"class":42},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[21,589,591],{"id":590},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[26,593,595],{"className":28,"code":594,"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,596,597,602,655,660,664],{"__ignoreMap":31},[36,598,599],{"class":38,"line":39},[36,600,601],{"class":42},"#删除数组中的重复数据，并对数据进行排序\n",[36,603,604,606,608,611,613,615,617,619,621,623,626,628,630,632,634,636,639,641,644,646,649,651,653],{"class":38,"line":46},[36,605,50],{"class":49},[36,607,54],{"class":53},[36,609,610],{"class":49},"np.array([",[36,612,61],{"class":60},[36,614,64],{"class":49},[36,616,181],{"class":60},[36,618,64],{"class":49},[36,620,162],{"class":60},[36,622,64],{"class":49},[36,624,625],{"class":60},"12",[36,627,64],{"class":49},[36,629,162],{"class":60},[36,631,64],{"class":49},[36,633,332],{"class":60},[36,635,64],{"class":49},[36,637,638],{"class":60},"32",[36,640,64],{"class":49},[36,642,643],{"class":60},"0",[36,645,64],{"class":49},[36,647,648],{"class":60},"23",[36,650,64],{"class":49},[36,652,186],{"class":60},[36,654,165],{"class":49},[36,656,657],{"class":38,"line":78},[36,658,659],{"class":49},"np.unique(a)\n",[36,661,662],{"class":38,"line":125},[36,663,538],{"class":42},[36,665,666],{"class":38,"line":131},[36,667,668],{"class":42},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,670,671],{},"升序形式排序",[21,673,675],{"id":674},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[26,677,679],{"className":28,"code":678,"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,680,681,729,734],{"__ignoreMap":31},[36,682,683,685,687,689,691,693,695,697,699,701,703,705,707,709,711,713,715,717,719,721,723,725,727],{"class":38,"line":39},[36,684,50],{"class":49},[36,686,54],{"class":53},[36,688,610],{"class":49},[36,690,61],{"class":60},[36,692,64],{"class":49},[36,694,181],{"class":60},[36,696,64],{"class":49},[36,698,162],{"class":60},[36,700,64],{"class":49},[36,702,625],{"class":60},[36,704,64],{"class":49},[36,706,162],{"class":60},[36,708,64],{"class":49},[36,710,332],{"class":60},[36,712,64],{"class":49},[36,714,638],{"class":60},[36,716,64],{"class":49},[36,718,643],{"class":60},[36,720,64],{"class":49},[36,722,648],{"class":60},[36,724,64],{"class":49},[36,726,186],{"class":60},[36,728,165],{"class":49},[36,730,731],{"class":38,"line":46},[36,732,733],{"class":42},"#返回数组中非零元素的索引\n",[36,735,736],{"class":38,"line":78},[36,737,738],{"class":49},"np.nonzero(a)\n",[21,740,742],{"id":741},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[26,744,746],{"className":28,"code":745,"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,747,748,796,801],{"__ignoreMap":31},[36,749,750,752,754,756,758,760,762,764,766,768,770,772,774,776,778,780,782,784,786,788,790,792,794],{"class":38,"line":39},[36,751,50],{"class":49},[36,753,54],{"class":53},[36,755,610],{"class":49},[36,757,61],{"class":60},[36,759,64],{"class":49},[36,761,181],{"class":60},[36,763,64],{"class":49},[36,765,162],{"class":60},[36,767,64],{"class":49},[36,769,625],{"class":60},[36,771,64],{"class":49},[36,773,162],{"class":60},[36,775,64],{"class":49},[36,777,332],{"class":60},[36,779,64],{"class":49},[36,781,638],{"class":60},[36,783,64],{"class":49},[36,785,643],{"class":60},[36,787,64],{"class":49},[36,789,648],{"class":60},[36,791,64],{"class":49},[36,793,186],{"class":60},[36,795,165],{"class":49},[36,797,798],{"class":38,"line":46},[36,799,800],{"class":42},"#计算一组数中最大值与最小值的差，可指定轴\n",[36,802,803],{"class":38,"line":78},[36,804,805],{"class":49},"np.ptp(a)\n",[807,808,809],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .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":46,"depth":46,"links":811},[812,813,814,815,816,817,818,819,820,821,822],{"id":23,"depth":46,"text":24},{"id":87,"depth":46,"text":88},{"id":208,"depth":46,"text":209},{"id":305,"depth":46,"text":306},{"id":347,"depth":46,"text":348},{"id":425,"depth":46,"text":426},{"id":494,"depth":46,"text":495},{"id":546,"depth":46,"text":547},{"id":590,"depth":46,"text":591},{"id":674,"depth":46,"text":675},{"id":741,"depth":46,"text":742},null,"md",{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":5,"description":823},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",[831,5910,7017,8437,11426,12775,14263,15352,24115,24127,24726,24752,24876,25117,25182,25200,25213,25260,25384,25553,25752,25932,26137,26273,26368,26405,26418,26728,27469,28177,28198,29218,30849,31000,31013,31025,31323,51135,51150,51167,51200,54072,77420,93565,93586,93699,93816,94492,95155,95516,95554,95660,95760,95803,95829,95890,97544,97645,97670,98161,98661,99741,100024,100766,101268,101280,103296,104960,106463,108161,110078,111997,114019,117489,117921,118384,119133,122077,122425,122447,122803,126110,126122,126525,126548,126695,126862,127067,127368,127925,128582,130513,132111,132760,134254,135685,136920,138614,140366,142776,142892,143827,144038,144923,146158,146386,146399,147554,149966,152334,155655,158132,159776,161553,163566,166618,168798,171325,173519],{"id":832,"title":833,"body":834,"description":31,"extension":824,"meta":5905,"navigation":193,"path":5906,"seo":5907,"stem":5908,"__hash__":5909},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":835,"toc":5877},[836,839,843,846,850,863,867,872,875,878,881,884,887,914,918,921,924,927,930,977,981,1000,1002,1016,1019,1027,1030,1878,1885,1902,1906,1992,1996,2002,2091,2095,2133,2137,2201,2205,2209,2216,2227,2231,2236,2240,2245,2249,2254,2258,2262,2267,2537,2542,2680,2685,2942,2945,2953,2957,2962,3065,3068,3373,3382,3483,3486,3489,3492,3495,3755,3760,3900,3903,4082,4085,4213,4216,4368,4372,4377,4380,4391,4399,4402,4509,4513,4517,4522,4572,4577,4582,4606,4611,4664,4667,4672,4849,4854,5139,5144,5540,5544,5549,5606,5611,5619,5622,5762,5765,5874],[10,837,833],{"id":838},"_1基础入门",[21,840,842],{"id":841},"_11注释","1.1注释",[14,844,845],{},"\u002F\u002F或者\u002F* *\u002F",[21,847,849],{"id":848},"_12命名","1.2命名",[851,852,853,857,860],"ol",{},[854,855,856],"li",{},"字母数字下划线",[854,858,859],{},"开头必须是字母或_",[854,861,862],{},"不能使用关键词",[21,864,866],{"id":865},"_13数据类型","1.3数据类型",[868,869,871],"h3",{"id":870},"_131整形","1.3.1整形",[14,873,874],{},"short 短整形 2",[14,876,877],{},"int 整形 4",[14,879,880],{},"long 长整形 win4 linux32位4 linux64位8",[14,882,883],{},"long long 长长整形 8",[14,885,886],{},"利用sizeof可以求数据类型占用的内存空间大小",[26,888,892],{"className":889,"code":890,"language":891,"meta":31,"style":31},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[33,893,894,907],{"__ignoreMap":31},[36,895,896,899,902,905],{"class":38,"line":39},[36,897,898],{"class":53},"sizeof",[36,900,901],{"class":49},"(",[36,903,904],{"class":53},"int",[36,906,75],{"class":49},[36,908,909,911],{"class":38,"line":46},[36,910,898],{"class":53},[36,912,913],{"class":49},"(num)\n",[868,915,917],{"id":916},"_132浮点型","1.3.2浮点型",[14,919,920],{},"float 单精度 4节 7位有效数字",[14,922,923],{},"double 双精度 8节 15-16有效数字",[14,925,926],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,928,929],{},"注意点：",[26,931,933],{"className":889,"code":932,"language":891,"meta":31,"style":31},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[33,934,935,956],{"__ignoreMap":31},[36,936,937,939,942,944,947,950,953],{"class":38,"line":39},[36,938,478],{"class":53},[36,940,941],{"class":49}," f1",[36,943,54],{"class":53},[36,945,946],{"class":60},"3.14",[36,948,949],{"class":53},"f",[36,951,952],{"class":49},";",[36,954,955],{"class":42}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[36,957,958,960,963,965,967,970,972,974],{"class":38,"line":46},[36,959,478],{"class":53},[36,961,962],{"class":49}," f2",[36,964,54],{"class":53},[36,966,162],{"class":60},[36,968,969],{"class":53},"e",[36,971,181],{"class":60},[36,973,952],{"class":49},[36,975,976],{"class":42}," \u002F\u002F科学记数法\n",[868,978,980],{"id":979},"_133字符型","1.3.3字符型",[26,982,984],{"className":889,"code":983,"language":891,"meta":31,"style":31},"char ch='a'\n",[33,985,986],{"__ignoreMap":31},[36,987,988,991,994,996],{"class":38,"line":39},[36,989,990],{"class":53},"char",[36,992,993],{"class":49}," ch",[36,995,54],{"class":53},[36,997,999],{"class":998},"sZZnC","'a'\n",[14,1001,929],{},[851,1003,1004,1007,1010,1013],{},[854,1005,1006],{},"在显示字符型变量时，只能单引号，双引号x",[854,1008,1009],{},"单引号内只能一个字符，不能字符串",[854,1011,1012],{},"c和c++字符型变量只占用一个字符",[854,1014,1015],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,1017,1018],{},"ASCII码大致由以下两部分组成：",[851,1020,1021,1024],{},[854,1022,1023],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[854,1025,1026],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,1028,1029],{},"ASCII码表格：",[1031,1032,1033,1077],"table",{},[1034,1035,1036],"thead",{},[1037,1038,1039,1047,1052,1056,1061,1065,1069,1073],"tr",{},[1040,1041,1042,1046],"th",{},[1043,1044,1045],"strong",{},"ASCII","值",[1040,1048,1049],{},[1043,1050,1051],{},"控制字符",[1040,1053,1054,1046],{},[1043,1055,1045],{},[1040,1057,1058],{},[1043,1059,1060],{},"字符",[1040,1062,1063,1046],{},[1043,1064,1045],{},[1040,1066,1067],{},[1043,1068,1060],{},[1040,1070,1071,1046],{},[1043,1072,1045],{},[1040,1074,1075],{},[1043,1076,1060],{},[1078,1079,1080,1105,1129,1153,1178,1202,1226,1251,1276,1301,1327,1352,1378,1402,1427,1453,1479,1503,1528,1553,1578,1602,1627,1652,1676,1701,1725,1751,1776,1801,1826,1852],"tbody",{},[1037,1081,1082,1085,1088,1090,1093,1096,1099,1102],{},[1083,1084,643],"td",{},[1083,1086,1087],{},"NUT",[1083,1089,638],{},[1083,1091,1092],{},"(space)",[1083,1094,1095],{},"64",[1083,1097,1098],{},"@",[1083,1100,1101],{},"96",[1083,1103,1104],{},"、",[1037,1106,1107,1109,1112,1115,1118,1121,1124,1127],{},[1083,1108,61],{},[1083,1110,1111],{},"SOH",[1083,1113,1114],{},"33",[1083,1116,1117],{},"!",[1083,1119,1120],{},"65",[1083,1122,1123],{},"A",[1083,1125,1126],{},"97",[1083,1128,50],{},[1037,1130,1131,1133,1136,1139,1142,1145,1148,1151],{},[1083,1132,181],{},[1083,1134,1135],{},"STX",[1083,1137,1138],{},"34",[1083,1140,1141],{},"\"",[1083,1143,1144],{},"66",[1083,1146,1147],{},"B",[1083,1149,1150],{},"98",[1083,1152,321],{},[1037,1154,1155,1157,1160,1163,1166,1169,1172,1175],{},[1083,1156,162],{},[1083,1158,1159],{},"ETX",[1083,1161,1162],{},"35",[1083,1164,1165],{},"#",[1083,1167,1168],{},"67",[1083,1170,1171],{},"C",[1083,1173,1174],{},"99",[1083,1176,1177],{},"c",[1037,1179,1180,1182,1185,1188,1191,1194,1197,1199],{},[1083,1181,186],{},[1083,1183,1184],{},"EOT",[1083,1186,1187],{},"36",[1083,1189,1190],{},"$",[1083,1192,1193],{},"68",[1083,1195,1196],{},"D",[1083,1198,67],{},[1083,1200,1201],{},"d",[1037,1203,1204,1206,1209,1212,1215,1218,1221,1224],{},[1083,1205,157],{},[1083,1207,1208],{},"ENQ",[1083,1210,1211],{},"37",[1083,1213,1214],{},"%",[1083,1216,1217],{},"69",[1083,1219,1220],{},"E",[1083,1222,1223],{},"101",[1083,1225,969],{},[1037,1227,1228,1231,1234,1237,1240,1243,1246,1249],{},[1083,1229,1230],{},"6",[1083,1232,1233],{},"ACK",[1083,1235,1236],{},"38",[1083,1238,1239],{},"&",[1083,1241,1242],{},"70",[1083,1244,1245],{},"F",[1083,1247,1248],{},"102",[1083,1250,949],{},[1037,1252,1253,1256,1259,1262,1264,1267,1270,1273],{},[1083,1254,1255],{},"7",[1083,1257,1258],{},"BEL",[1083,1260,1261],{},"39",[1083,1263,64],{},[1083,1265,1266],{},"71",[1083,1268,1269],{},"G",[1083,1271,1272],{},"103",[1083,1274,1275],{},"g",[1037,1277,1278,1281,1284,1287,1289,1292,1295,1298],{},[1083,1279,1280],{},"8",[1083,1282,1283],{},"BS",[1083,1285,1286],{},"40",[1083,1288,901],{},[1083,1290,1291],{},"72",[1083,1293,1294],{},"H",[1083,1296,1297],{},"104",[1083,1299,1300],{},"h",[1037,1302,1303,1306,1309,1312,1315,1318,1321,1324],{},[1083,1304,1305],{},"9",[1083,1307,1308],{},"HT",[1083,1310,1311],{},"41",[1083,1313,1314],{},")",[1083,1316,1317],{},"73",[1083,1319,1320],{},"I",[1083,1322,1323],{},"105",[1083,1325,1326],{},"i",[1037,1328,1329,1331,1334,1337,1340,1343,1346,1349],{},[1083,1330,332],{},[1083,1332,1333],{},"LF",[1083,1335,1336],{},"42",[1083,1338,1339],{},"*",[1083,1341,1342],{},"74",[1083,1344,1345],{},"J",[1083,1347,1348],{},"106",[1083,1350,1351],{},"j",[1037,1353,1354,1357,1360,1363,1366,1369,1372,1375],{},[1083,1355,1356],{},"11",[1083,1358,1359],{},"VT",[1083,1361,1362],{},"43",[1083,1364,1365],{},"+",[1083,1367,1368],{},"75",[1083,1370,1371],{},"K",[1083,1373,1374],{},"107",[1083,1376,1377],{},"k",[1037,1379,1380,1382,1385,1388,1390,1393,1396,1399],{},[1083,1381,625],{},[1083,1383,1384],{},"FF",[1083,1386,1387],{},"44",[1083,1389,64],{},[1083,1391,1392],{},"76",[1083,1394,1395],{},"L",[1083,1397,1398],{},"108",[1083,1400,1401],{},"l",[1037,1403,1404,1406,1409,1412,1415,1418,1421,1424],{},[1083,1405,281],{},[1083,1407,1408],{},"CR",[1083,1410,1411],{},"45",[1083,1413,1414],{},"-",[1083,1416,1417],{},"77",[1083,1419,1420],{},"M",[1083,1422,1423],{},"109",[1083,1425,1426],{},"m",[1037,1428,1429,1432,1435,1438,1441,1444,1447,1450],{},[1083,1430,1431],{},"14",[1083,1433,1434],{},"SO",[1083,1436,1437],{},"46",[1083,1439,1440],{},".",[1083,1442,1443],{},"78",[1083,1445,1446],{},"N",[1083,1448,1449],{},"110",[1083,1451,1452],{},"n",[1037,1454,1455,1458,1461,1464,1467,1470,1473,1476],{},[1083,1456,1457],{},"15",[1083,1459,1460],{},"SI",[1083,1462,1463],{},"47",[1083,1465,1466],{},"\u002F",[1083,1468,1469],{},"79",[1083,1471,1472],{},"O",[1083,1474,1475],{},"111",[1083,1477,1478],{},"o",[1037,1480,1481,1484,1487,1490,1492,1495,1498,1501],{},[1083,1482,1483],{},"16",[1083,1485,1486],{},"DLE",[1083,1488,1489],{},"48",[1083,1491,643],{},[1083,1493,1494],{},"80",[1083,1496,1497],{},"P",[1083,1499,1500],{},"112",[1083,1502,14],{},[1037,1504,1505,1508,1511,1514,1516,1519,1522,1525],{},[1083,1506,1507],{},"17",[1083,1509,1510],{},"DCI",[1083,1512,1513],{},"49",[1083,1515,61],{},[1083,1517,1518],{},"81",[1083,1520,1521],{},"Q",[1083,1523,1524],{},"113",[1083,1526,1527],{},"q",[1037,1529,1530,1533,1536,1539,1541,1544,1547,1550],{},[1083,1531,1532],{},"18",[1083,1534,1535],{},"DC2",[1083,1537,1538],{},"50",[1083,1540,181],{},[1083,1542,1543],{},"82",[1083,1545,1546],{},"R",[1083,1548,1549],{},"114",[1083,1551,1552],{},"r",[1037,1554,1555,1558,1561,1564,1566,1569,1572,1575],{},[1083,1556,1557],{},"19",[1083,1559,1560],{},"DC3",[1083,1562,1563],{},"51",[1083,1565,162],{},[1083,1567,1568],{},"83",[1083,1570,1571],{},"S",[1083,1573,1574],{},"115",[1083,1576,1577],{},"s",[1037,1579,1580,1582,1585,1588,1590,1593,1596,1599],{},[1083,1581,72],{},[1083,1583,1584],{},"DC4",[1083,1586,1587],{},"52",[1083,1589,186],{},[1083,1591,1592],{},"84",[1083,1594,1595],{},"T",[1083,1597,1598],{},"116",[1083,1600,1601],{},"t",[1037,1603,1604,1607,1610,1613,1615,1618,1621,1624],{},[1083,1605,1606],{},"21",[1083,1608,1609],{},"NAK",[1083,1611,1612],{},"53",[1083,1614,157],{},[1083,1616,1617],{},"85",[1083,1619,1620],{},"U",[1083,1622,1623],{},"117",[1083,1625,1626],{},"u",[1037,1628,1629,1632,1635,1638,1640,1643,1646,1649],{},[1083,1630,1631],{},"22",[1083,1633,1634],{},"SYN",[1083,1636,1637],{},"54",[1083,1639,1230],{},[1083,1641,1642],{},"86",[1083,1644,1645],{},"V",[1083,1647,1648],{},"118",[1083,1650,1651],{},"v",[1037,1653,1654,1656,1659,1662,1664,1667,1670,1673],{},[1083,1655,648],{},[1083,1657,1658],{},"TB",[1083,1660,1661],{},"55",[1083,1663,1255],{},[1083,1665,1666],{},"87",[1083,1668,1669],{},"W",[1083,1671,1672],{},"119",[1083,1674,1675],{},"w",[1037,1677,1678,1681,1684,1687,1689,1692,1695,1698],{},[1083,1679,1680],{},"24",[1083,1682,1683],{},"CAN",[1083,1685,1686],{},"56",[1083,1688,1280],{},[1083,1690,1691],{},"88",[1083,1693,1694],{},"X",[1083,1696,1697],{},"120",[1083,1699,1700],{},"x",[1037,1702,1703,1706,1709,1712,1714,1717,1720,1723],{},[1083,1704,1705],{},"25",[1083,1707,1708],{},"EM",[1083,1710,1711],{},"57",[1083,1713,1305],{},[1083,1715,1716],{},"89",[1083,1718,1719],{},"Y",[1083,1721,1722],{},"121",[1083,1724,399],{},[1037,1726,1727,1730,1733,1736,1739,1742,1745,1748],{},[1083,1728,1729],{},"26",[1083,1731,1732],{},"SUB",[1083,1734,1735],{},"58",[1083,1737,1738],{},":",[1083,1740,1741],{},"90",[1083,1743,1744],{},"Z",[1083,1746,1747],{},"122",[1083,1749,1750],{},"z",[1037,1752,1753,1756,1759,1762,1764,1767,1770,1773],{},[1083,1754,1755],{},"27",[1083,1757,1758],{},"ESC",[1083,1760,1761],{},"59",[1083,1763,952],{},[1083,1765,1766],{},"91",[1083,1768,1769],{},"[",[1083,1771,1772],{},"123",[1083,1774,1775],{},"{",[1037,1777,1778,1781,1784,1787,1790,1793,1795,1798],{},[1083,1779,1780],{},"28",[1083,1782,1783],{},"FS",[1083,1785,1786],{},"60",[1083,1788,1789],{},"\u003C",[1083,1791,1792],{},"92",[1083,1794,1466],{},[1083,1796,1797],{},"124",[1083,1799,1800],{},"|",[1037,1802,1803,1806,1809,1812,1814,1817,1820,1823],{},[1083,1804,1805],{},"29",[1083,1807,1808],{},"GS",[1083,1810,1811],{},"61",[1083,1813,54],{},[1083,1815,1816],{},"93",[1083,1818,1819],{},"]",[1083,1821,1822],{},"125",[1083,1824,1825],{},"}",[1037,1827,1828,1831,1834,1837,1840,1843,1846,1849],{},[1083,1829,1830],{},"30",[1083,1832,1833],{},"RS",[1083,1835,1836],{},"62",[1083,1838,1839],{},">",[1083,1841,1842],{},"94",[1083,1844,1845],{},"^",[1083,1847,1848],{},"126",[1083,1850,1851],{},"`",[1037,1853,1854,1857,1860,1863,1866,1869,1872,1875],{},[1083,1855,1856],{},"31",[1083,1858,1859],{},"US",[1083,1861,1862],{},"63",[1083,1864,1865],{},"?",[1083,1867,1868],{},"95",[1083,1870,1871],{},"_",[1083,1873,1874],{},"127",[1083,1876,1877],{},"DEL",[14,1879,1880,1881,1884],{},"ASCII 码大致由以下",[1043,1882,1883],{},"两部分组","成：",[1886,1887,1888,1895],"ul",{},[854,1889,1890,1891,1894],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[1043,1892,1893],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[854,1896,1897,1898,1901],{},"ASCII 打印字符：数字 ",[1043,1899,1900],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[868,1903,1905],{"id":1904},"_134转义字符","1.3.4转义字符",[26,1907,1909],{"className":889,"code":1908,"language":891,"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,1910,1911,1916,1932,1946,1951,1964,1969],{"__ignoreMap":31},[36,1912,1913],{"class":38,"line":39},[36,1914,1915],{"class":42},"\u002F\u002F换行符\n",[36,1917,1918,1921,1924,1927,1929],{"class":38,"line":46},[36,1919,1920],{"class":49},"cout ",[36,1922,1923],{"class":53},"\u003C\u003C",[36,1925,1926],{"class":998},"\"hello world\u002Fn\"",[36,1928,952],{"class":49},[36,1930,1931],{"class":42}," \u002F\u002F就等同于如下：\n",[36,1933,1934,1936,1938,1941,1943],{"class":38,"line":78},[36,1935,1920],{"class":49},[36,1937,1923],{"class":53},[36,1939,1940],{"class":998},"\"hello world\"",[36,1942,1923],{"class":53},[36,1944,1945],{"class":49},"endl;\n",[36,1947,1948],{"class":38,"line":125},[36,1949,1950],{"class":42},"\u002F\u002F反斜杠\n",[36,1952,1953,1955,1957,1960,1962],{"class":38,"line":131},[36,1954,1920],{"class":49},[36,1956,1923],{"class":53},[36,1958,1959],{"class":998},"\"\u002F\u002F\"",[36,1961,1923],{"class":53},[36,1963,1945],{"class":49},[36,1965,1966],{"class":38,"line":396},[36,1967,1968],{"class":42},"\u002F\u002F水平制表符\n",[36,1970,1971,1973,1975,1978,1981,1984,1986,1989],{"class":38,"line":407},[36,1972,1920],{"class":49},[36,1974,1923],{"class":53},[36,1976,1977],{"class":998},"\"aaaa",[36,1979,1980],{"class":60},"\\t",[36,1982,1983],{"class":998},"helloworld\"",[36,1985,1923],{"class":53},[36,1987,1988],{"class":49},"endl;",[36,1990,1991],{"class":42}," \u002F\u002F输出窗口时有对齐效果\n",[868,1993,1995],{"id":1994},"_135字符串型","1.3.5字符串型",[14,1997,1998,1999,2001],{},"char 变量名",[36,2000],{},"=\"字符串值\"",[26,2003,2005],{"className":889,"code":2004,"language":891,"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,2006,2007,2012,2017,2022,2027,2041,2054,2059,2065,2077],{"__ignoreMap":31},[36,2008,2009],{"class":38,"line":39},[36,2010,2011],{"class":42},"\u002F\u002Fc风格字符串\n",[36,2013,2014],{"class":38,"line":46},[36,2015,2016],{"class":42},"\u002F\u002F注意事项：\n",[36,2018,2019],{"class":38,"line":78},[36,2020,2021],{"class":42},"\u002F\u002F1.char字符串名[]\n",[36,2023,2024],{"class":38,"line":125},[36,2025,2026],{"class":42},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[36,2028,2029,2031,2034,2036,2038],{"class":38,"line":131},[36,2030,990],{"class":53},[36,2032,2033],{"class":49}," str[]",[36,2035,54],{"class":53},[36,2037,1940],{"class":998},[36,2039,2040],{"class":49},";\n",[36,2042,2043,2045,2047,2050,2052],{"class":38,"line":396},[36,2044,1920],{"class":49},[36,2046,1923],{"class":53},[36,2048,2049],{"class":49},"str",[36,2051,1923],{"class":53},[36,2053,1945],{"class":49},[36,2055,2056],{"class":38,"line":407},[36,2057,2058],{"class":42},"\u002F\u002Fc++风格字符串\n",[36,2060,2062],{"class":38,"line":2061},8,[36,2063,2064],{"class":42},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[36,2066,2068,2071,2073,2075],{"class":38,"line":2067},9,[36,2069,2070],{"class":49},"string str2",[36,2072,54],{"class":53},[36,2074,1940],{"class":998},[36,2076,2040],{"class":49},[36,2078,2080,2082,2084,2087,2089],{"class":38,"line":2079},10,[36,2081,1920],{"class":49},[36,2083,1923],{"class":53},[36,2085,2086],{"class":49},"str2",[36,2088,1923],{"class":53},[36,2090,1945],{"class":49},[868,2092,2094],{"id":2093},"_136布尔类型bool","1.3.6布尔类型bool",[26,2096,2098],{"className":889,"code":2097,"language":891,"meta":31,"style":31},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[33,2099,2100,2115],{"__ignoreMap":31},[36,2101,2102,2105,2108,2110,2113],{"class":38,"line":39},[36,2103,2104],{"class":53},"bool",[36,2106,2107],{"class":49}," flag",[36,2109,54],{"class":53},[36,2111,2112],{"class":60},"true",[36,2114,2040],{"class":49},[36,2116,2117,2120,2123,2126,2128,2130],{"class":38,"line":46},[36,2118,2119],{"class":49},"cout",[36,2121,2122],{"class":53},"\u003C\u003Csizeof",[36,2124,2125],{"class":49},"(flag)",[36,2127,1923],{"class":53},[36,2129,1988],{"class":49},[36,2131,2132],{"class":42}," \u002F\u002F查看布尔占内存空间\n",[21,2134,2136],{"id":2135},"_14键盘输入cin","1.4键盘输入cin",[26,2138,2140],{"className":889,"code":2139,"language":891,"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,2141,2142,2155,2172,2183],{"__ignoreMap":31},[36,2143,2144,2146,2149,2151,2153],{"class":38,"line":39},[36,2145,904],{"class":53},[36,2147,2148],{"class":49}," a",[36,2150,54],{"class":53},[36,2152,643],{"class":60},[36,2154,2040],{"class":49},[36,2156,2157,2159,2161,2164,2166,2168,2170],{"class":38,"line":46},[36,2158,2119],{"class":49},[36,2160,1923],{"class":53},[36,2162,2163],{"class":998},"\"请给整型变量a赋值\"",[36,2165,1923],{"class":53},[36,2167,50],{"class":49},[36,2169,1923],{"class":53},[36,2171,1945],{"class":49},[36,2173,2174,2177,2180],{"class":38,"line":78},[36,2175,2176],{"class":49},"cin ",[36,2178,2179],{"class":53},">>",[36,2181,2182],{"class":49}," a;\n",[36,2184,2185,2187,2189,2192,2195,2197,2199],{"class":38,"line":125},[36,2186,1920],{"class":49},[36,2188,1923],{"class":53},[36,2190,2191],{"class":998}," \"整型变量a=\"",[36,2193,2194],{"class":53}," \u003C\u003C",[36,2196,50],{"class":49},[36,2198,1923],{"class":53},[36,2200,1945],{"class":49},[21,2202,2204],{"id":2203},"_15运算符","1.5运算符",[868,2206,2208],{"id":2207},"_151算术运算符","1.5.1算术运算符",[14,2210,2211,2215],{},[2212,2213],"img",{"alt":31,"src":2214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[851,2217,2218,2221,2224],{},[854,2219,2220],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[854,2222,2223],{},"两个小数不可以做取模运算",[854,2225,2226],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[868,2228,2230],{"id":2229},"_152赋值运算符","1.5.2赋值运算符",[14,2232,2233],{},[2212,2234],{"alt":31,"src":2235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[868,2237,2239],{"id":2238},"_153比较运算符","1.5.3比较运算符",[14,2241,2242],{},[2212,2243],{"alt":31,"src":2244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[868,2246,2248],{"id":2247},"_154逻辑运算符","1.5.4逻辑运算符",[14,2250,2251],{},[2212,2252],{"alt":31,"src":2253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[21,2255,2257],{"id":2256},"_16程序流程结构","1.6程序流程结构",[868,2259,2261],{"id":2260},"_161选择结构","1.6.1选择结构",[851,2263,2264],{},[854,2265,2266],{},"if语句\n单行、多行、多条件if语句",[26,2268,2270],{"className":889,"code":2269,"language":891,"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,2271,2272,2277,2292,2297,2311,2316,2321,2330,2343,2347,2360,2365,2371,2376,2390,2395,2401,2422,2427,2441,2446,2475,2480,2497,2502,2507,2512,2526,2531],{"__ignoreMap":31},[36,2273,2274],{"class":38,"line":39},[36,2275,2276],{"class":42},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[36,2278,2279,2282,2285,2287,2290],{"class":38,"line":46},[36,2280,2281],{"class":53},"if",[36,2283,2284],{"class":49},"(score",[36,2286,1839],{"class":53},[36,2288,2289],{"class":60},"600",[36,2291,75],{"class":49},[36,2293,2294],{"class":38,"line":78},[36,2295,2296],{"class":49},"{\n",[36,2298,2299,2302,2304,2307,2309],{"class":38,"line":125},[36,2300,2301],{"class":49},"    cout",[36,2303,1923],{"class":53},[36,2305,2306],{"class":998},"'这是单行if语句'",[36,2308,1923],{"class":53},[36,2310,1945],{"class":49},[36,2312,2313],{"class":38,"line":131},[36,2314,2315],{"class":49},"}\n",[36,2317,2318],{"class":38,"line":396},[36,2319,2320],{"class":42},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[36,2322,2323,2325,2327],{"class":38,"line":407},[36,2324,2176],{"class":49},[36,2326,2179],{"class":53},[36,2328,2329],{"class":49}," score\n",[36,2331,2332,2334,2336,2339,2341],{"class":38,"line":2061},[36,2333,2281],{"class":53},[36,2335,2284],{"class":49},[36,2337,2338],{"class":53},"\u003C=",[36,2340,2289],{"class":60},[36,2342,75],{"class":49},[36,2344,2345],{"class":38,"line":2067},[36,2346,2296],{"class":49},[36,2348,2349,2351,2353,2356,2358],{"class":38,"line":2079},[36,2350,2301],{"class":49},[36,2352,2179],{"class":53},[36,2354,2355],{"class":998},"\"小于等于600\"",[36,2357,1923],{"class":53},[36,2359,1945],{"class":49},[36,2361,2363],{"class":38,"line":2362},11,[36,2364,2315],{"class":49},[36,2366,2368],{"class":38,"line":2367},12,[36,2369,2370],{"class":53},"else\n",[36,2372,2374],{"class":38,"line":2373},13,[36,2375,2296],{"class":49},[36,2377,2379,2381,2383,2386,2388],{"class":38,"line":2378},14,[36,2380,2301],{"class":49},[36,2382,2179],{"class":53},[36,2384,2385],{"class":998},"\"大于600\"",[36,2387,2179],{"class":53},[36,2389,1945],{"class":49},[36,2391,2393],{"class":38,"line":2392},15,[36,2394,2315],{"class":49},[36,2396,2398],{"class":38,"line":2397},16,[36,2399,2400],{"class":42},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[36,2402,2404,2406,2409,2411,2413,2416,2418,2420],{"class":38,"line":2403},17,[36,2405,2281],{"class":53},[36,2407,2408],{"class":49}," (",[36,2410,643],{"class":60},[36,2412,1789],{"class":53},[36,2414,2415],{"class":49},"num",[36,2417,1789],{"class":53},[36,2419,67],{"class":60},[36,2421,75],{"class":49},[36,2423,2425],{"class":38,"line":2424},18,[36,2426,2296],{"class":49},[36,2428,2430,2432,2434,2437,2439],{"class":38,"line":2429},19,[36,2431,2301],{"class":49},[36,2433,1923],{"class":53},[36,2435,2436],{"class":998},"\"小于100\"",[36,2438,1923],{"class":53},[36,2440,1945],{"class":49},[36,2442,2444],{"class":38,"line":2443},20,[36,2445,2315],{"class":49},[36,2447,2449,2452,2455,2458,2461,2463,2466,2468,2470,2473],{"class":38,"line":2448},21,[36,2450,2451],{"class":53},"else",[36,2453,2454],{"class":53}," if",[36,2456,2457],{"class":49}," (nmu",[36,2459,2460],{"class":53},">=",[36,2462,67],{"class":60},[36,2464,2465],{"class":53},"&&",[36,2467,2415],{"class":49},[36,2469,1789],{"class":53},[36,2471,2472],{"class":60},"200",[36,2474,75],{"class":49},[36,2476,2478],{"class":38,"line":2477},22,[36,2479,2296],{"class":49},[36,2481,2483,2485,2487,2490,2492,2494],{"class":38,"line":2482},23,[36,2484,2301],{"class":49},[36,2486,1923],{"class":53},[36,2488,2489],{"class":998},"\"不小于100且小于200\"",[36,2491,1923],{"class":53},[36,2493,1988],{"class":49},[36,2495,2496],{"class":42}," \u002F\u002F可以无限else if,python中是elif：\n",[36,2498,2500],{"class":38,"line":2499},24,[36,2501,2315],{"class":49},[36,2503,2505],{"class":38,"line":2504},25,[36,2506,2370],{"class":53},[36,2508,2510],{"class":38,"line":2509},26,[36,2511,2296],{"class":49},[36,2513,2515,2517,2519,2522,2524],{"class":38,"line":2514},27,[36,2516,2301],{"class":49},[36,2518,1923],{"class":53},[36,2520,2521],{"class":998},"\"不小于200\"",[36,2523,1923],{"class":53},[36,2525,1945],{"class":49},[36,2527,2529],{"class":38,"line":2528},28,[36,2530,2315],{"class":49},[36,2532,2534],{"class":38,"line":2533},29,[36,2535,2536],{"class":42},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[851,2538,2539],{"start":46},[854,2540,2541],{},"三目运算符",[26,2543,2545],{"className":889,"code":2544,"language":891,"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,2546,2547,2552,2557,2583,2605,2622,2627,2650,2665],{"__ignoreMap":31},[36,2548,2549],{"class":38,"line":39},[36,2550,2551],{"class":42},"\u002F\u002F创建三个变量a,b,c\n",[36,2553,2554],{"class":38,"line":46},[36,2555,2556],{"class":42},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[36,2558,2559,2561,2563,2565,2567,2570,2572,2574,2577,2579,2581],{"class":38,"line":78},[36,2560,904],{"class":53},[36,2562,2148],{"class":49},[36,2564,54],{"class":53},[36,2566,72],{"class":60},[36,2568,2569],{"class":49},",b",[36,2571,54],{"class":53},[36,2573,332],{"class":60},[36,2575,2576],{"class":49},",c",[36,2578,54],{"class":53},[36,2580,643],{"class":60},[36,2582,2040],{"class":49},[36,2584,2585,2587,2589,2592,2594,2596,2598,2600,2602],{"class":38,"line":125},[36,2586,1177],{"class":49},[36,2588,54],{"class":53},[36,2590,2591],{"class":49},"(a",[36,2593,1839],{"class":53},[36,2595,321],{"class":49},[36,2597,1865],{"class":53},[36,2599,50],{"class":49},[36,2601,1738],{"class":53},[36,2603,2604],{"class":49},"b)\n",[36,2606,2607,2609,2611,2614,2616,2618,2620],{"class":38,"line":131},[36,2608,2119],{"class":49},[36,2610,1923],{"class":53},[36,2612,2613],{"class":998},"\"c=\"",[36,2615,1923],{"class":53},[36,2617,1177],{"class":49},[36,2619,1923],{"class":53},[36,2621,1945],{"class":49},[36,2623,2624],{"class":38,"line":396},[36,2625,2626],{"class":42},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[36,2628,2629,2631,2633,2635,2637,2639,2641,2644,2646,2648],{"class":38,"line":407},[36,2630,2591],{"class":49},[36,2632,1839],{"class":53},[36,2634,321],{"class":49},[36,2636,1865],{"class":53},[36,2638,50],{"class":49},[36,2640,1738],{"class":53},[36,2642,2643],{"class":49},"b)",[36,2645,54],{"class":53},[36,2647,67],{"class":60},[36,2649,2040],{"class":49},[36,2651,2652,2654,2656,2658,2660,2662],{"class":38,"line":2061},[36,2653,2119],{"class":49},[36,2655,1923],{"class":53},[36,2657,50],{"class":49},[36,2659,1923],{"class":53},[36,2661,1988],{"class":49},[36,2663,2664],{"class":42}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[36,2666,2667,2669,2671,2673,2675,2677],{"class":38,"line":2067},[36,2668,2119],{"class":49},[36,2670,1923],{"class":53},[36,2672,321],{"class":49},[36,2674,1923],{"class":53},[36,2676,1988],{"class":49},[36,2678,2679],{"class":42}," \u002F\u002F10   a>b,b还是原值\n",[851,2681,2682],{"start":78},[854,2683,2684],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[26,2686,2688],{"className":889,"code":2687,"language":891,"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,2689,2690,2695,2703,2717,2727,2731,2745,2758,2768,2776,2781,2806,2827,2849,2870,2892,2913,2933,2938],{"__ignoreMap":31},[36,2691,2692],{"class":38,"line":39},[36,2693,2694],{"class":42},"\u002F\u002F案例-电影打分\n",[36,2696,2697,2700],{"class":38,"line":46},[36,2698,2699],{"class":53},"#include",[36,2701,2702],{"class":998},"\u003Ciostream>\n",[36,2704,2705,2708,2711,2715],{"class":38,"line":78},[36,2706,2707],{"class":53},"using",[36,2709,2710],{"class":53}," namespace",[36,2712,2714],{"class":2713},"sScJk"," std",[36,2716,2040],{"class":49},[36,2718,2719,2721,2724],{"class":38,"line":125},[36,2720,904],{"class":53},[36,2722,2723],{"class":2713}," main",[36,2725,2726],{"class":49},"()\n",[36,2728,2729],{"class":38,"line":131},[36,2730,2296],{"class":49},[36,2732,2733,2736,2739,2741,2743],{"class":38,"line":396},[36,2734,2735],{"class":53},"    int",[36,2737,2738],{"class":49}," score",[36,2740,54],{"class":53},[36,2742,643],{"class":60},[36,2744,2040],{"class":49},[36,2746,2747,2749,2751,2754,2756],{"class":38,"line":407},[36,2748,2301],{"class":49},[36,2750,1923],{"class":53},[36,2752,2753],{"class":998},"\"电影打分：\"",[36,2755,1923],{"class":53},[36,2757,1945],{"class":49},[36,2759,2760,2763,2765],{"class":38,"line":2061},[36,2761,2762],{"class":49},"    cin",[36,2764,2179],{"class":53},[36,2766,2767],{"class":49},"score;\n",[36,2769,2770,2773],{"class":38,"line":2067},[36,2771,2772],{"class":53},"    switch",[36,2774,2775],{"class":49},"(score)\n",[36,2777,2778],{"class":38,"line":2079},[36,2779,2780],{"class":49},"    {\n",[36,2782,2783,2786,2789,2792,2794,2797,2799,2801,2804],{"class":38,"line":2362},[36,2784,2785],{"class":53},"        case",[36,2787,2788],{"class":60}," 10",[36,2790,2791],{"class":49},":cout",[36,2793,1923],{"class":53},[36,2795,2796],{"class":998},"\"经典\"",[36,2798,1923],{"class":53},[36,2800,1988],{"class":49},[36,2802,2803],{"class":53},"break",[36,2805,2040],{"class":49},[36,2807,2808,2810,2813,2815,2817,2819,2821,2823,2825],{"class":38,"line":2367},[36,2809,2785],{"class":53},[36,2811,2812],{"class":60}," 9",[36,2814,2791],{"class":49},[36,2816,1923],{"class":53},[36,2818,2796],{"class":998},[36,2820,1923],{"class":53},[36,2822,1988],{"class":49},[36,2824,2803],{"class":53},[36,2826,2040],{"class":49},[36,2828,2829,2831,2834,2836,2838,2841,2843,2845,2847],{"class":38,"line":2373},[36,2830,2785],{"class":53},[36,2832,2833],{"class":60}," 8",[36,2835,2791],{"class":49},[36,2837,1923],{"class":53},[36,2839,2840],{"class":998},"\"非常好\"",[36,2842,1923],{"class":53},[36,2844,1988],{"class":49},[36,2846,2803],{"class":53},[36,2848,2040],{"class":49},[36,2850,2851,2853,2856,2858,2860,2862,2864,2866,2868],{"class":38,"line":2378},[36,2852,2785],{"class":53},[36,2854,2855],{"class":60}," 7",[36,2857,2791],{"class":49},[36,2859,1923],{"class":53},[36,2861,2840],{"class":998},[36,2863,1923],{"class":53},[36,2865,1988],{"class":49},[36,2867,2803],{"class":53},[36,2869,2040],{"class":49},[36,2871,2872,2874,2877,2879,2881,2884,2886,2888,2890],{"class":38,"line":2392},[36,2873,2785],{"class":53},[36,2875,2876],{"class":60}," 6",[36,2878,2791],{"class":49},[36,2880,1923],{"class":53},[36,2882,2883],{"class":998},"\"一般\"",[36,2885,1923],{"class":53},[36,2887,1988],{"class":49},[36,2889,2803],{"class":53},[36,2891,2040],{"class":49},[36,2893,2894,2896,2899,2901,2903,2905,2907,2909,2911],{"class":38,"line":2397},[36,2895,2785],{"class":53},[36,2897,2898],{"class":60}," 5",[36,2900,2791],{"class":49},[36,2902,1923],{"class":53},[36,2904,2883],{"class":998},[36,2906,1923],{"class":53},[36,2908,1988],{"class":49},[36,2910,2803],{"class":53},[36,2912,2040],{"class":49},[36,2914,2915,2918,2920,2922,2925,2927,2929,2931],{"class":38,"line":2403},[36,2916,2917],{"class":53},"        default",[36,2919,2791],{"class":49},[36,2921,1923],{"class":53},[36,2923,2924],{"class":998},"\"烂片\"",[36,2926,1923],{"class":53},[36,2928,1988],{"class":49},[36,2930,2803],{"class":53},[36,2932,2040],{"class":49},[36,2934,2935],{"class":38,"line":2424},[36,2936,2937],{"class":49},"    }\n",[36,2939,2940],{"class":38,"line":2429},[36,2941,2315],{"class":49},[14,2943,2944],{},"if和switch区别：",[1886,2946,2947,2950],{},[854,2948,2949],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[854,2951,2952],{},"switch优点：结构清晰，执行效率高",[868,2954,2956],{"id":2955},"_162循环结构","1.6.2循环结构",[851,2958,2959],{},[854,2960,2961],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[26,2963,2965],{"className":889,"code":2964,"language":891,"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,2966,2967,2972,2980,2984,2997,3011,3015,3035,3045,3049,3061],{"__ignoreMap":31},[36,2968,2969],{"class":38,"line":39},[36,2970,2971],{"class":42},"\u002F\u002F打印0-9数字\n",[36,2973,2974,2976,2978],{"class":38,"line":46},[36,2975,904],{"class":53},[36,2977,2723],{"class":2713},[36,2979,2726],{"class":49},[36,2981,2982],{"class":38,"line":78},[36,2983,2296],{"class":49},[36,2985,2986,2988,2991,2993,2995],{"class":38,"line":125},[36,2987,2735],{"class":53},[36,2989,2990],{"class":49}," num",[36,2992,54],{"class":53},[36,2994,643],{"class":60},[36,2996,2040],{"class":49},[36,2998,2999,3002,3005,3007,3009],{"class":38,"line":131},[36,3000,3001],{"class":53},"    while",[36,3003,3004],{"class":49},"(num",[36,3006,1789],{"class":53},[36,3008,332],{"class":60},[36,3010,75],{"class":49},[36,3012,3013],{"class":38,"line":396},[36,3014,2780],{"class":49},[36,3016,3017,3020,3023,3025,3027,3029,3032],{"class":38,"line":407},[36,3018,3019],{"class":2713},"       std",[36,3021,3022],{"class":49},"::cout",[36,3024,1923],{"class":53},[36,3026,2415],{"class":49},[36,3028,1923],{"class":53},[36,3030,3031],{"class":2713},"std",[36,3033,3034],{"class":49},"::endl;\n",[36,3036,3037,3040,3043],{"class":38,"line":2061},[36,3038,3039],{"class":49},"        num",[36,3041,3042],{"class":53},"++",[36,3044,2040],{"class":49},[36,3046,3047],{"class":38,"line":2067},[36,3048,2937],{"class":49},[36,3050,3051,3054,3056,3059],{"class":38,"line":2079},[36,3052,3053],{"class":2713},"    system",[36,3055,901],{"class":49},[36,3057,3058],{"class":998},"\"pause\"",[36,3060,75],{"class":49},[36,3062,3063],{"class":38,"line":2362},[36,3064,2315],{"class":49},[14,3066,3067],{},"注意：写好循环条件，避免死循环情况",[26,3069,3071],{"className":889,"code":3070,"language":891,"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,3072,3073,3078,3085,3092,3102,3110,3114,3119,3146,3150,3155,3163,3190,3195,3200,3213,3223,3227,3237,3242,3255,3260,3274,3279,3294,3298,3311,3315,3320,3324,3338,3346,3351,3357,3363,3368],{"__ignoreMap":31},[36,3074,3075],{"class":38,"line":39},[36,3076,3077],{"class":42},"\u002F\u002F循环结构-猜数字\n",[36,3079,3080,3082],{"class":38,"line":46},[36,3081,2699],{"class":53},[36,3083,3084],{"class":998}," \u003Ciostream>\n",[36,3086,3087,3089],{"class":38,"line":78},[36,3088,2699],{"class":53},[36,3090,3091],{"class":998}," \u003Cctime>\n",[36,3093,3094,3096,3098,3100],{"class":38,"line":125},[36,3095,2707],{"class":53},[36,3097,2710],{"class":53},[36,3099,2714],{"class":2713},[36,3101,2040],{"class":49},[36,3103,3104,3106,3108],{"class":38,"line":131},[36,3105,904],{"class":53},[36,3107,2723],{"class":2713},[36,3109,2726],{"class":49},[36,3111,3112],{"class":38,"line":396},[36,3113,2296],{"class":49},[36,3115,3116],{"class":38,"line":407},[36,3117,3118],{"class":42},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[36,3120,3121,3124,3127,3130,3133,3135,3138,3140,3143],{"class":38,"line":2061},[36,3122,3123],{"class":2713},"    srand",[36,3125,3126],{"class":49},"((",[36,3128,3129],{"class":53},"unsigned",[36,3131,3132],{"class":53}," int",[36,3134,1314],{"class":49},[36,3136,3137],{"class":2713},"time",[36,3139,901],{"class":49},[36,3141,3142],{"class":60},"NULL",[36,3144,3145],{"class":49},"));\n",[36,3147,3148],{"class":38,"line":2067},[36,3149,194],{"emptyLinePlaceholder":193},[36,3151,3152],{"class":38,"line":2079},[36,3153,3154],{"class":42},"    \u002F\u002F1.系统生成随机数\n",[36,3156,3157,3160],{"class":38,"line":2362},[36,3158,3159],{"class":42},"    \u002F\u002Frand()%100",[36,3161,3162],{"class":42}," \u002F\u002F生成0-99的随机数\n",[36,3164,3165,3167,3169,3171,3174,3177,3179,3181,3183,3185,3187],{"class":38,"line":2367},[36,3166,2735],{"class":53},[36,3168,2990],{"class":49},[36,3170,54],{"class":53},[36,3172,3173],{"class":2713},"rand",[36,3175,3176],{"class":49},"()",[36,3178,1214],{"class":53},[36,3180,67],{"class":60},[36,3182,1365],{"class":53},[36,3184,61],{"class":60},[36,3186,952],{"class":49},[36,3188,3189],{"class":42}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[36,3191,3192],{"class":38,"line":2373},[36,3193,3194],{"class":42},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[36,3196,3197],{"class":38,"line":2378},[36,3198,3199],{"class":42},"    \u002F\u002F2.玩家猜测\n",[36,3201,3202,3204,3207,3209,3211],{"class":38,"line":2392},[36,3203,2735],{"class":53},[36,3205,3206],{"class":49}," val",[36,3208,54],{"class":53},[36,3210,643],{"class":60},[36,3212,2040],{"class":49},[36,3214,3215,3217,3219,3221],{"class":38,"line":2397},[36,3216,3001],{"class":53},[36,3218,2408],{"class":49},[36,3220,61],{"class":60},[36,3222,75],{"class":49},[36,3224,3225],{"class":38,"line":2403},[36,3226,2780],{"class":49},[36,3228,3229,3232,3234],{"class":38,"line":2424},[36,3230,3231],{"class":49},"        cin",[36,3233,2179],{"class":53},[36,3235,3236],{"class":49},"val;\n",[36,3238,3239],{"class":38,"line":2429},[36,3240,3241],{"class":42},"        \u002F\u002F3.判断玩家猜测\n",[36,3243,3244,3247,3250,3252],{"class":38,"line":2443},[36,3245,3246],{"class":53},"        if",[36,3248,3249],{"class":49},"(val",[36,3251,1789],{"class":53},[36,3253,3254],{"class":49},"num) \n",[36,3256,3257],{"class":38,"line":2448},[36,3258,3259],{"class":49},"        {\n",[36,3261,3262,3265,3267,3270,3272],{"class":38,"line":2477},[36,3263,3264],{"class":49},"            cout",[36,3266,1923],{"class":53},[36,3268,3269],{"class":998},"\"猜小了！\"",[36,3271,1923],{"class":53},[36,3273,1945],{"class":49},[36,3275,3276],{"class":38,"line":2482},[36,3277,3278],{"class":49},"        }\n",[36,3280,3281,3284,3286,3289,3291],{"class":38,"line":2499},[36,3282,3283],{"class":53},"        else",[36,3285,2454],{"class":53},[36,3287,3288],{"class":49}," (val",[36,3290,1839],{"class":53},[36,3292,3293],{"class":49},"num)\n",[36,3295,3296],{"class":38,"line":2504},[36,3297,3259],{"class":49},[36,3299,3300,3302,3304,3307,3309],{"class":38,"line":2509},[36,3301,3264],{"class":49},[36,3303,1923],{"class":53},[36,3305,3306],{"class":998},"\"猜大了！\"",[36,3308,1923],{"class":53},[36,3310,1945],{"class":49},[36,3312,3313],{"class":38,"line":2514},[36,3314,3278],{"class":49},[36,3316,3317],{"class":38,"line":2528},[36,3318,3319],{"class":53},"        else\n",[36,3321,3322],{"class":38,"line":2533},[36,3323,3259],{"class":49},[36,3325,3327,3329,3331,3334,3336],{"class":38,"line":3326},30,[36,3328,3264],{"class":49},[36,3330,1923],{"class":53},[36,3332,3333],{"class":998},"\"猜对了！\"",[36,3335,1923],{"class":53},[36,3337,1945],{"class":49},[36,3339,3341,3344],{"class":38,"line":3340},31,[36,3342,3343],{"class":53},"            break",[36,3345,2040],{"class":49},[36,3347,3349],{"class":38,"line":3348},32,[36,3350,3278],{"class":49},[36,3352,3354],{"class":38,"line":3353},33,[36,3355,3356],{"class":42},"        \u002F\u002F猜对 退出游戏\n",[36,3358,3360],{"class":38,"line":3359},34,[36,3361,3362],{"class":42},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[36,3364,3366],{"class":38,"line":3365},35,[36,3367,2937],{"class":49},[36,3369,3371],{"class":38,"line":3370},36,[36,3372,2315],{"class":49},[851,3374,3375],{"start":46},[854,3376,3377,3378,3381],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[1043,3379,3380],{},"do...while会先执行一次循环语句","，在判断循环语句",[26,3383,3385],{"className":889,"code":3384,"language":891,"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,3386,3387,3392,3400,3404,3416,3424,3428,3445,3452,3456,3469,3479],{"__ignoreMap":31},[36,3388,3389],{"class":38,"line":39},[36,3390,3391],{"class":42},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[36,3393,3394,3396,3398],{"class":38,"line":46},[36,3395,904],{"class":53},[36,3397,2723],{"class":2713},[36,3399,2726],{"class":49},[36,3401,3402],{"class":38,"line":78},[36,3403,2296],{"class":49},[36,3405,3406,3408,3410,3412,3414],{"class":38,"line":125},[36,3407,2735],{"class":53},[36,3409,2990],{"class":49},[36,3411,54],{"class":53},[36,3413,643],{"class":60},[36,3415,2040],{"class":49},[36,3417,3418,3421],{"class":38,"line":131},[36,3419,3420],{"class":53},"    do",[36,3422,3423],{"class":49}," \n",[36,3425,3426],{"class":38,"line":396},[36,3427,2780],{"class":49},[36,3429,3430,3433,3435,3437,3439,3441,3443],{"class":38,"line":407},[36,3431,3432],{"class":2713},"        std",[36,3434,3022],{"class":49},[36,3436,1923],{"class":53},[36,3438,2415],{"class":49},[36,3440,1923],{"class":53},[36,3442,3031],{"class":2713},[36,3444,3034],{"class":49},[36,3446,3447,3449],{"class":38,"line":2061},[36,3448,3039],{"class":49},[36,3450,3451],{"class":53},"++\n",[36,3453,3454],{"class":38,"line":2067},[36,3455,2937],{"class":49},[36,3457,3458,3460,3462,3464,3466],{"class":38,"line":2079},[36,3459,3001],{"class":53},[36,3461,3004],{"class":49},[36,3463,1789],{"class":53},[36,3465,332],{"class":60},[36,3467,3468],{"class":49},");\n",[36,3470,3471,3473,3475,3477],{"class":38,"line":2362},[36,3472,3053],{"class":2713},[36,3474,901],{"class":49},[36,3476,3058],{"class":998},[36,3478,3468],{"class":49},[36,3480,3481],{"class":38,"line":2367},[36,3482,2315],{"class":49},[14,3484,3485],{},"案例-水仙花数",[14,3487,3488],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,3490,3491],{},"例如：1^3+5^3+3^3=153",[14,3493,3494],{},"请用do...while语句，求出所有3位数的水仙花数",[26,3496,3498],{"className":889,"code":3497,"language":891,"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,3499,3500,3506,3516,3524,3528,3533,3545,3551,3555,3560,3576,3592,3608,3623,3642,3657,3705,3709,3721,3725,3733,3737,3751],{"__ignoreMap":31},[36,3501,3502,3504],{"class":38,"line":39},[36,3503,2699],{"class":53},[36,3505,3084],{"class":998},[36,3507,3508,3510,3512,3514],{"class":38,"line":46},[36,3509,2707],{"class":53},[36,3511,2710],{"class":53},[36,3513,2714],{"class":2713},[36,3515,2040],{"class":49},[36,3517,3518,3520,3522],{"class":38,"line":78},[36,3519,904],{"class":53},[36,3521,2723],{"class":2713},[36,3523,2726],{"class":49},[36,3525,3526],{"class":38,"line":125},[36,3527,2296],{"class":49},[36,3529,3530],{"class":38,"line":131},[36,3531,3532],{"class":42},"    \u002F\u002F1.先打印所有三位数字\n",[36,3534,3535,3537,3539,3541,3543],{"class":38,"line":396},[36,3536,2735],{"class":53},[36,3538,2990],{"class":49},[36,3540,54],{"class":53},[36,3542,67],{"class":60},[36,3544,2040],{"class":49},[36,3546,3547,3549],{"class":38,"line":407},[36,3548,3420],{"class":53},[36,3550,3423],{"class":49},[36,3552,3553],{"class":38,"line":2061},[36,3554,2780],{"class":49},[36,3556,3557],{"class":38,"line":2067},[36,3558,3559],{"class":42},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[36,3561,3562,3565,3567,3569,3571,3573],{"class":38,"line":2079},[36,3563,3564],{"class":53},"        int",[36,3566,2148],{"class":49},[36,3568,54],{"class":53},[36,3570,643],{"class":60},[36,3572,952],{"class":49},[36,3574,3575],{"class":42}," \u002F\u002F个位\n",[36,3577,3578,3580,3583,3585,3587,3589],{"class":38,"line":2362},[36,3579,3564],{"class":53},[36,3581,3582],{"class":49}," b",[36,3584,54],{"class":53},[36,3586,643],{"class":60},[36,3588,952],{"class":49},[36,3590,3591],{"class":42}," \u002F\u002F十位\n",[36,3593,3594,3596,3599,3601,3603,3605],{"class":38,"line":2367},[36,3595,3564],{"class":53},[36,3597,3598],{"class":49}," c",[36,3600,54],{"class":53},[36,3602,643],{"class":60},[36,3604,952],{"class":49},[36,3606,3607],{"class":42}," \u002F\u002F百位\n",[36,3609,3610,3613,3615,3617,3619,3621],{"class":38,"line":2373},[36,3611,3612],{"class":49},"        a",[36,3614,54],{"class":53},[36,3616,2415],{"class":49},[36,3618,1214],{"class":53},[36,3620,332],{"class":60},[36,3622,2040],{"class":49},[36,3624,3625,3628,3630,3632,3634,3636,3638,3640],{"class":38,"line":2378},[36,3626,3627],{"class":49},"        b",[36,3629,54],{"class":53},[36,3631,2415],{"class":49},[36,3633,1466],{"class":53},[36,3635,332],{"class":60},[36,3637,1214],{"class":53},[36,3639,332],{"class":60},[36,3641,2040],{"class":49},[36,3643,3644,3647,3649,3651,3653,3655],{"class":38,"line":2392},[36,3645,3646],{"class":49},"        c",[36,3648,54],{"class":53},[36,3650,2415],{"class":49},[36,3652,1466],{"class":53},[36,3654,67],{"class":60},[36,3656,2040],{"class":49},[36,3658,3659,3661,3663,3665,3667,3669,3671,3673,3675,3677,3679,3681,3683,3685,3687,3689,3691,3693,3696,3699,3702],{"class":38,"line":2397},[36,3660,3246],{"class":53},[36,3662,2591],{"class":49},[36,3664,1339],{"class":53},[36,3666,50],{"class":49},[36,3668,1339],{"class":53},[36,3670,50],{"class":49},[36,3672,1365],{"class":53},[36,3674,321],{"class":49},[36,3676,1339],{"class":53},[36,3678,321],{"class":49},[36,3680,1339],{"class":53},[36,3682,321],{"class":49},[36,3684,1365],{"class":53},[36,3686,1177],{"class":49},[36,3688,1339],{"class":53},[36,3690,1177],{"class":49},[36,3692,1339],{"class":53},[36,3694,3695],{"class":49},"c ",[36,3697,3698],{"class":53},"==",[36,3700,3701],{"class":49}," num)",[36,3703,3704],{"class":42}," \u002F\u002F如果是水仙花数，才打印\n",[36,3706,3707],{"class":38,"line":2403},[36,3708,3259],{"class":49},[36,3710,3711,3713,3715,3717,3719],{"class":38,"line":2424},[36,3712,3264],{"class":49},[36,3714,1923],{"class":53},[36,3716,2415],{"class":49},[36,3718,1923],{"class":53},[36,3720,1945],{"class":49},[36,3722,3723],{"class":38,"line":2429},[36,3724,3278],{"class":49},[36,3726,3727,3729,3731],{"class":38,"line":2443},[36,3728,3039],{"class":49},[36,3730,3042],{"class":53},[36,3732,2040],{"class":49},[36,3734,3735],{"class":38,"line":2448},[36,3736,2937],{"class":49},[36,3738,3739,3741,3744,3746,3749],{"class":38,"line":2477},[36,3740,3001],{"class":53},[36,3742,3743],{"class":49}," (num ",[36,3745,1789],{"class":53},[36,3747,3748],{"class":60}," 1000",[36,3750,3468],{"class":49},[36,3752,3753],{"class":38,"line":2482},[36,3754,2315],{"class":49},[851,3756,3757],{"start":78},[854,3758,3759],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[26,3761,3763],{"className":889,"code":3762,"language":891,"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,3764,3765,3770,3799,3803,3815,3819,3824,3835,3842,3846,3860,3864,3871,3875,3887,3896],{"__ignoreMap":31},[36,3766,3767],{"class":38,"line":39},[36,3768,3769],{"class":42},"\u002F\u002F从数字0-9打印\n",[36,3771,3772,3775,3777,3779,3782,3784,3786,3789,3791,3793,3795,3797],{"class":38,"line":46},[36,3773,3774],{"class":53},"for",[36,3776,901],{"class":49},[36,3778,904],{"class":53},[36,3780,3781],{"class":49}," i",[36,3783,54],{"class":53},[36,3785,643],{"class":60},[36,3787,3788],{"class":49},";i",[36,3790,1789],{"class":53},[36,3792,332],{"class":60},[36,3794,3788],{"class":49},[36,3796,3042],{"class":53},[36,3798,75],{"class":49},[36,3800,3801],{"class":38,"line":78},[36,3802,2296],{"class":49},[36,3804,3805,3807,3809,3811,3813],{"class":38,"line":125},[36,3806,2301],{"class":49},[36,3808,1923],{"class":53},[36,3810,1326],{"class":49},[36,3812,1923],{"class":53},[36,3814,1945],{"class":49},[36,3816,3817],{"class":38,"line":131},[36,3818,2315],{"class":49},[36,3820,3821],{"class":38,"line":396},[36,3822,3823],{"class":42},"\u002F\u002F上式可以进行拆分\n",[36,3825,3826,3828,3830,3832],{"class":38,"line":407},[36,3827,904],{"class":53},[36,3829,3781],{"class":49},[36,3831,54],{"class":53},[36,3833,3834],{"class":60},"0\n",[36,3836,3837,3839],{"class":38,"line":2061},[36,3838,3774],{"class":53},[36,3840,3841],{"class":49},"(;;;)\n",[36,3843,3844],{"class":38,"line":2067},[36,3845,2296],{"class":49},[36,3847,3848,3851,3854,3856,3858],{"class":38,"line":2079},[36,3849,3850],{"class":53},"    if",[36,3852,3853],{"class":49},"(i",[36,3855,2460],{"class":53},[36,3857,332],{"class":60},[36,3859,75],{"class":49},[36,3861,3862],{"class":38,"line":2362},[36,3863,2780],{"class":49},[36,3865,3866,3869],{"class":38,"line":2367},[36,3867,3868],{"class":53},"        break",[36,3870,2040],{"class":49},[36,3872,3873],{"class":38,"line":2373},[36,3874,2937],{"class":49},[36,3876,3877,3879,3881,3883,3885],{"class":38,"line":2378},[36,3878,2301],{"class":49},[36,3880,1923],{"class":53},[36,3882,1326],{"class":49},[36,3884,1923],{"class":53},[36,3886,1945],{"class":49},[36,3888,3889,3892,3894],{"class":38,"line":2392},[36,3890,3891],{"class":49},"    i",[36,3893,3042],{"class":53},[36,3895,2040],{"class":49},[36,3897,3898],{"class":38,"line":2397},[36,3899,2315],{"class":49},[14,3901,3902],{},"小练习",[26,3904,3906],{"className":889,"code":3905,"language":891,"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,3907,3908,3914,3924,3932,3936,3941,3946,3974,3978,3983,3988,4029,4033,4046,4050,4054,4058,4070,4074,4078],{"__ignoreMap":31},[36,3909,3910,3912],{"class":38,"line":39},[36,3911,2699],{"class":53},[36,3913,2702],{"class":998},[36,3915,3916,3918,3920,3922],{"class":38,"line":46},[36,3917,2707],{"class":53},[36,3919,2710],{"class":53},[36,3921,2714],{"class":2713},[36,3923,2040],{"class":49},[36,3925,3926,3928,3930],{"class":38,"line":78},[36,3927,904],{"class":53},[36,3929,2723],{"class":2713},[36,3931,2726],{"class":49},[36,3933,3934],{"class":38,"line":125},[36,3935,2296],{"class":49},[36,3937,3938],{"class":38,"line":131},[36,3939,3940],{"class":42},"    \u002F\u002F敲桌子案例\n",[36,3942,3943],{"class":38,"line":396},[36,3944,3945],{"class":42},"    \u002F\u002F1.先输出1-100的数字\n",[36,3947,3948,3951,3953,3955,3957,3959,3961,3964,3966,3968,3970,3972],{"class":38,"line":407},[36,3949,3950],{"class":53},"    for",[36,3952,901],{"class":49},[36,3954,904],{"class":53},[36,3956,3781],{"class":49},[36,3958,54],{"class":53},[36,3960,61],{"class":60},[36,3962,3963],{"class":49},"; i",[36,3965,2338],{"class":53},[36,3967,67],{"class":60},[36,3969,3963],{"class":49},[36,3971,3042],{"class":53},[36,3973,75],{"class":49},[36,3975,3976],{"class":38,"line":2061},[36,3977,2780],{"class":49},[36,3979,3980],{"class":38,"line":2067},[36,3981,3982],{"class":42},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[36,3984,3985],{"class":38,"line":2079},[36,3986,3987],{"class":42},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[36,3989,3990,3992,3994,3996,3998,4000,4002,4005,4007,4009,4011,4013,4015,4017,4019,4021,4023,4025,4027],{"class":38,"line":2362},[36,3991,3246],{"class":53},[36,3993,3853],{"class":49},[36,3995,1214],{"class":53},[36,3997,1255],{"class":60},[36,3999,3698],{"class":53},[36,4001,643],{"class":60},[36,4003,4004],{"class":53}," ||",[36,4006,3781],{"class":49},[36,4008,1214],{"class":53},[36,4010,332],{"class":60},[36,4012,3698],{"class":53},[36,4014,1255],{"class":60},[36,4016,4004],{"class":53},[36,4018,3781],{"class":49},[36,4020,1466],{"class":53},[36,4022,332],{"class":60},[36,4024,3698],{"class":53},[36,4026,1255],{"class":60},[36,4028,75],{"class":49},[36,4030,4031],{"class":38,"line":2367},[36,4032,3259],{"class":49},[36,4034,4035,4037,4039,4042,4044],{"class":38,"line":2373},[36,4036,3264],{"class":49},[36,4038,1923],{"class":53},[36,4040,4041],{"class":998},"\"敲桌子\"",[36,4043,1923],{"class":53},[36,4045,1945],{"class":49},[36,4047,4048],{"class":38,"line":2378},[36,4049,3278],{"class":49},[36,4051,4052],{"class":38,"line":2392},[36,4053,3319],{"class":53},[36,4055,4056],{"class":38,"line":2397},[36,4057,3259],{"class":49},[36,4059,4060,4062,4064,4066,4068],{"class":38,"line":2403},[36,4061,3264],{"class":49},[36,4063,1923],{"class":53},[36,4065,1326],{"class":49},[36,4067,1923],{"class":53},[36,4069,1945],{"class":49},[36,4071,4072],{"class":38,"line":2424},[36,4073,3278],{"class":49},[36,4075,4076],{"class":38,"line":2429},[36,4077,2937],{"class":49},[36,4079,4080],{"class":38,"line":2443},[36,4081,2315],{"class":49},[14,4083,4084],{},"嵌套实现星图",[26,4086,4088],{"className":889,"code":4087,"language":891,"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,4089,4090,4096,4106,4114,4118,4144,4148,4177,4181,4192,4196,4205,4209],{"__ignoreMap":31},[36,4091,4092,4094],{"class":38,"line":39},[36,4093,2699],{"class":53},[36,4095,2702],{"class":998},[36,4097,4098,4100,4102,4104],{"class":38,"line":46},[36,4099,2707],{"class":53},[36,4101,2710],{"class":53},[36,4103,2714],{"class":2713},[36,4105,2040],{"class":49},[36,4107,4108,4110,4112],{"class":38,"line":78},[36,4109,904],{"class":53},[36,4111,2723],{"class":2713},[36,4113,2726],{"class":49},[36,4115,4116],{"class":38,"line":125},[36,4117,2296],{"class":49},[36,4119,4120,4122,4124,4126,4128,4130,4132,4134,4136,4138,4140,4142],{"class":38,"line":131},[36,4121,3950],{"class":53},[36,4123,2408],{"class":49},[36,4125,904],{"class":53},[36,4127,3781],{"class":49},[36,4129,54],{"class":53},[36,4131,643],{"class":60},[36,4133,3788],{"class":49},[36,4135,1789],{"class":53},[36,4137,332],{"class":60},[36,4139,3788],{"class":49},[36,4141,3042],{"class":53},[36,4143,75],{"class":49},[36,4145,4146],{"class":38,"line":396},[36,4147,2780],{"class":49},[36,4149,4150,4153,4155,4157,4160,4162,4164,4167,4169,4171,4173,4175],{"class":38,"line":407},[36,4151,4152],{"class":53},"        for",[36,4154,2408],{"class":49},[36,4156,904],{"class":53},[36,4158,4159],{"class":49}," j",[36,4161,54],{"class":53},[36,4163,643],{"class":60},[36,4165,4166],{"class":49},";j",[36,4168,1789],{"class":53},[36,4170,332],{"class":60},[36,4172,4166],{"class":49},[36,4174,3042],{"class":53},[36,4176,75],{"class":49},[36,4178,4179],{"class":38,"line":2061},[36,4180,3259],{"class":49},[36,4182,4183,4185,4187,4190],{"class":38,"line":2067},[36,4184,3264],{"class":49},[36,4186,1923],{"class":53},[36,4188,4189],{"class":998},"\"*\"",[36,4191,2040],{"class":49},[36,4193,4194],{"class":38,"line":2079},[36,4195,3278],{"class":49},[36,4197,4198,4201,4203],{"class":38,"line":2362},[36,4199,4200],{"class":49},"        cout",[36,4202,1923],{"class":53},[36,4204,1945],{"class":49},[36,4206,4207],{"class":38,"line":2367},[36,4208,2937],{"class":49},[36,4210,4211],{"class":38,"line":2373},[36,4212,2315],{"class":49},[14,4214,4215],{},"乘法口诀表",[26,4217,4219],{"className":889,"code":4218,"language":891,"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,4220,4221,4227,4237,4245,4249,4275,4279,4304,4308,4348,4352,4360,4364],{"__ignoreMap":31},[36,4222,4223,4225],{"class":38,"line":39},[36,4224,2699],{"class":53},[36,4226,3084],{"class":998},[36,4228,4229,4231,4233,4235],{"class":38,"line":46},[36,4230,2707],{"class":53},[36,4232,2710],{"class":53},[36,4234,2714],{"class":2713},[36,4236,2040],{"class":49},[36,4238,4239,4241,4243],{"class":38,"line":78},[36,4240,904],{"class":53},[36,4242,2723],{"class":2713},[36,4244,2726],{"class":49},[36,4246,4247],{"class":38,"line":125},[36,4248,2296],{"class":49},[36,4250,4251,4253,4255,4257,4259,4261,4263,4265,4267,4269,4271,4273],{"class":38,"line":131},[36,4252,3950],{"class":53},[36,4254,901],{"class":49},[36,4256,904],{"class":53},[36,4258,3781],{"class":49},[36,4260,54],{"class":53},[36,4262,61],{"class":60},[36,4264,3788],{"class":49},[36,4266,1789],{"class":53},[36,4268,332],{"class":60},[36,4270,3788],{"class":49},[36,4272,3042],{"class":53},[36,4274,75],{"class":49},[36,4276,4277],{"class":38,"line":396},[36,4278,2780],{"class":49},[36,4280,4281,4283,4285,4287,4289,4291,4293,4295,4297,4300,4302],{"class":38,"line":407},[36,4282,4152],{"class":53},[36,4284,901],{"class":49},[36,4286,904],{"class":53},[36,4288,4159],{"class":49},[36,4290,54],{"class":53},[36,4292,61],{"class":60},[36,4294,4166],{"class":49},[36,4296,2338],{"class":53},[36,4298,4299],{"class":49},"i;j",[36,4301,3042],{"class":53},[36,4303,75],{"class":49},[36,4305,4306],{"class":38,"line":2061},[36,4307,3259],{"class":49},[36,4309,4310,4312,4314,4316,4318,4320,4322,4324,4326,4329,4331,4333,4335,4337,4339,4342,4344,4346],{"class":38,"line":2067},[36,4311,3264],{"class":49},[36,4313,1923],{"class":53},[36,4315,1351],{"class":49},[36,4317,1923],{"class":53},[36,4319,4189],{"class":998},[36,4321,1923],{"class":53},[36,4323,1326],{"class":49},[36,4325,1923],{"class":53},[36,4327,4328],{"class":998},"\"=\"",[36,4330,1923],{"class":53},[36,4332,1326],{"class":49},[36,4334,1339],{"class":53},[36,4336,1351],{"class":49},[36,4338,1923],{"class":53},[36,4340,4341],{"class":998},"'",[36,4343,1980],{"class":60},[36,4345,4341],{"class":998},[36,4347,2040],{"class":49},[36,4349,4350],{"class":38,"line":2079},[36,4351,3278],{"class":49},[36,4353,4354,4356,4358],{"class":38,"line":2362},[36,4355,4200],{"class":49},[36,4357,1923],{"class":53},[36,4359,1945],{"class":49},[36,4361,4362],{"class":38,"line":2367},[36,4363,2937],{"class":49},[36,4365,4366],{"class":38,"line":2373},[36,4367,2315],{"class":49},[868,4369,4371],{"id":4370},"_163跳出语句","1.6.3跳出语句",[851,4373,4374],{},[854,4375,4376],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,4378,4379],{},"break使用时机：",[1886,4381,4382,4385,4388],{},[854,4383,4384],{},"出现在switch条件语句中，作用是终止case并跳出switch",[854,4386,4387],{},"出现在循环结构中，作用是跳出当前的循环结构",[854,4389,4390],{},"出现在嵌套循环中，跳出最近的内层循环语句",[851,4392,4393,4396],{"start":46},[854,4394,4395],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[854,4397,4398],{},"goto语句\n语法：goto 标记;",[14,4400,4401],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[26,4403,4405],{"className":889,"code":4404,"language":891,"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,4406,4407,4415,4419,4432,4442,4455,4468,4481,4489,4505],{"__ignoreMap":31},[36,4408,4409,4411,4413],{"class":38,"line":39},[36,4410,904],{"class":53},[36,4412,2723],{"class":2713},[36,4414,2726],{"class":49},[36,4416,4417],{"class":38,"line":46},[36,4418,2296],{"class":49},[36,4420,4421,4423,4425,4428,4430],{"class":38,"line":78},[36,4422,2301],{"class":49},[36,4424,1923],{"class":53},[36,4426,4427],{"class":998},"\"1\"",[36,4429,1923],{"class":53},[36,4431,1945],{"class":49},[36,4433,4434,4437,4440],{"class":38,"line":125},[36,4435,4436],{"class":53},"    goto",[36,4438,4439],{"class":2713}," FLAG",[36,4441,2040],{"class":49},[36,4443,4444,4446,4448,4451,4453],{"class":38,"line":131},[36,4445,2301],{"class":49},[36,4447,1923],{"class":53},[36,4449,4450],{"class":998},"\"2\"",[36,4452,1923],{"class":53},[36,4454,1945],{"class":49},[36,4456,4457,4459,4461,4464,4466],{"class":38,"line":396},[36,4458,2301],{"class":49},[36,4460,1923],{"class":53},[36,4462,4463],{"class":998},"\"3\"",[36,4465,1923],{"class":53},[36,4467,1945],{"class":49},[36,4469,4470,4472,4474,4477,4479],{"class":38,"line":407},[36,4471,2301],{"class":49},[36,4473,1923],{"class":53},[36,4475,4476],{"class":998},"\"4\"",[36,4478,1923],{"class":53},[36,4480,1945],{"class":49},[36,4482,4483,4486],{"class":38,"line":2061},[36,4484,4485],{"class":2713},"    FLAG",[36,4487,4488],{"class":49},":\n",[36,4490,4491,4493,4495,4498,4500,4502],{"class":38,"line":2067},[36,4492,2301],{"class":49},[36,4494,1923],{"class":53},[36,4496,4497],{"class":998},"\"5\"",[36,4499,1923],{"class":53},[36,4501,1988],{"class":49},[36,4503,4504],{"class":42},"\u002F\u002F跳过了2,3,4,直接到5\n",[36,4506,4507],{"class":38,"line":2079},[36,4508,2315],{"class":49},[21,4510,4512],{"id":4511},"_17数组","1.7数组",[868,4514,4516],{"id":4515},"_171一维数组","1.7.1一维数组",[851,4518,4519],{},[854,4520,4521],{},"一维数组定义方式",[1031,4523,4524,4534],{},[1034,4525,4526],{},[1037,4527,4528,4531],{},[1040,4529,4530],{},"方式",[1040,4532,4533],{},"注意事项",[1078,4535,4536,4550,4560],{},[1037,4537,4538,4544],{},[1083,4539,4540,4541,952],{},"数据类型 数组名",[36,4542,4543],{},"数组长度",[1083,4545,4546,4547,4549],{},"这种方式是先定义再arr",[36,4548,1326],{},"赋值",[1037,4551,4552,4557],{},[1083,4553,4540,4554,4556],{},[36,4555,4543],{},"={值1,值2....};",[1083,4558,4559],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[1037,4561,4562,4566],{},[1083,4563,4540,4564,4556],{},[36,4565],{},[1083,4567,4568,4569,4571],{},"int arr",[36,4570],{},";这是不正确的，按照这样的方式定义必须有初始长度",[851,4573,4574],{"start":46},[854,4575,4576],{},"一维数组数组名\n用途：",[1886,4578,4579],{},[854,4580,4581],{},"1.可以统计整个数组在内存中的长度：",[26,4583,4585],{"className":889,"code":4584,"language":891,"meta":31,"style":31},"sizeof(arr);\nsizeof(arr[0]);\n",[33,4586,4587,4594],{"__ignoreMap":31},[36,4588,4589,4591],{"class":38,"line":39},[36,4590,898],{"class":53},[36,4592,4593],{"class":49},"(arr);\n",[36,4595,4596,4598,4601,4603],{"class":38,"line":46},[36,4597,898],{"class":53},[36,4599,4600],{"class":49},"(arr[",[36,4602,643],{"class":60},[36,4604,4605],{"class":49},"]);\n",[1886,4607,4608],{},[854,4609,4610],{},"2.可以获取数组在内存中的首地址:",[26,4612,4614],{"className":889,"code":4613,"language":891,"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,4615,4616,4621,4634,4639],{"__ignoreMap":31},[36,4617,4618],{"class":38,"line":39},[36,4619,4620],{"class":42},"\u002F\u002F查看16进制的首地址\n",[36,4622,4623,4625,4627,4630,4632],{"class":38,"line":46},[36,4624,2119],{"class":49},[36,4626,1923],{"class":53},[36,4628,4629],{"class":49},"arr",[36,4631,1923],{"class":53},[36,4633,1945],{"class":49},[36,4635,4636],{"class":38,"line":78},[36,4637,4638],{"class":42},"\u002F\u002F看10进制数\n",[36,4640,4641,4643,4645,4647,4649,4651,4653,4656,4658,4660,4662],{"class":38,"line":125},[36,4642,2119],{"class":49},[36,4644,1923],{"class":53},[36,4646,901],{"class":49},[36,4648,904],{"class":53},[36,4650,1314],{"class":49},[36,4652,1239],{"class":53},[36,4654,4655],{"class":49},"arr[",[36,4657,643],{"class":60},[36,4659,1819],{"class":49},[36,4661,1923],{"class":53},[36,4663,1945],{"class":49},[14,4665,4666],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1886,4668,4669],{},[854,4670,4671],{},"1️⃣五只小猪称体重",[26,4673,4675],{"className":889,"code":4674,"language":891,"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,4676,4677,4683,4693,4701,4705,4745,4758,4784,4788,4800,4804,4814,4818,4822,4835,4845],{"__ignoreMap":31},[36,4678,4679,4681],{"class":38,"line":39},[36,4680,2699],{"class":53},[36,4682,2702],{"class":998},[36,4684,4685,4687,4689,4691],{"class":38,"line":46},[36,4686,2707],{"class":53},[36,4688,2710],{"class":53},[36,4690,2714],{"class":2713},[36,4692,2040],{"class":49},[36,4694,4695,4697,4699],{"class":38,"line":78},[36,4696,904],{"class":53},[36,4698,2723],{"class":2713},[36,4700,2726],{"class":49},[36,4702,4703],{"class":38,"line":125},[36,4704,2296],{"class":49},[36,4706,4707,4709,4712,4714,4716,4718,4720,4723,4725,4728,4730,4732,4734,4737,4739,4742],{"class":38,"line":131},[36,4708,2735],{"class":53},[36,4710,4711],{"class":49}," arr[",[36,4713,157],{"class":60},[36,4715,1819],{"class":49},[36,4717,54],{"class":53},[36,4719,1775],{"class":49},[36,4721,4722],{"class":60},"300",[36,4724,64],{"class":49},[36,4726,4727],{"class":60},"350",[36,4729,64],{"class":49},[36,4731,2472],{"class":60},[36,4733,64],{"class":49},[36,4735,4736],{"class":60},"400",[36,4738,64],{"class":49},[36,4740,4741],{"class":60},"250",[36,4743,4744],{"class":49},"};\n",[36,4746,4747,4749,4752,4754,4756],{"class":38,"line":396},[36,4748,2735],{"class":53},[36,4750,4751],{"class":49}," tmp",[36,4753,54],{"class":53},[36,4755,643],{"class":60},[36,4757,2040],{"class":49},[36,4759,4760,4762,4764,4766,4768,4770,4772,4774,4776,4778,4780,4782],{"class":38,"line":407},[36,4761,3950],{"class":53},[36,4763,2408],{"class":49},[36,4765,904],{"class":53},[36,4767,3781],{"class":49},[36,4769,54],{"class":53},[36,4771,643],{"class":60},[36,4773,3788],{"class":49},[36,4775,1789],{"class":53},[36,4777,157],{"class":60},[36,4779,3788],{"class":49},[36,4781,3042],{"class":53},[36,4783,75],{"class":49},[36,4785,4786],{"class":38,"line":2061},[36,4787,2780],{"class":49},[36,4789,4790,4792,4795,4797],{"class":38,"line":2067},[36,4791,3246],{"class":53},[36,4793,4794],{"class":49},"(tmp",[36,4796,1789],{"class":53},[36,4798,4799],{"class":49},"arr[i])\n",[36,4801,4802],{"class":38,"line":2079},[36,4803,3259],{"class":49},[36,4805,4806,4809,4811],{"class":38,"line":2362},[36,4807,4808],{"class":49},"            tmp",[36,4810,54],{"class":53},[36,4812,4813],{"class":49},"arr[i];\n",[36,4815,4816],{"class":38,"line":2367},[36,4817,3278],{"class":49},[36,4819,4820],{"class":38,"line":2373},[36,4821,2937],{"class":49},[36,4823,4824,4826,4828,4831,4833],{"class":38,"line":2378},[36,4825,2301],{"class":49},[36,4827,1923],{"class":53},[36,4829,4830],{"class":49},"tmp",[36,4832,1923],{"class":53},[36,4834,1945],{"class":49},[36,4836,4837,4840,4843],{"class":38,"line":2392},[36,4838,4839],{"class":53},"    return",[36,4841,4842],{"class":60}," 0",[36,4844,2040],{"class":49},[36,4846,4847],{"class":38,"line":2397},[36,4848,2315],{"class":49},[1886,4850,4851],{},[854,4852,4853],{},"2️⃣数组元素逆置",[26,4855,4857],{"className":889,"code":4856,"language":891,"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,4858,4859,4864,4870,4880,4888,4892,4927,4943,4975,4988,4993,4998,5010,5020,5030,5035,5044,5054,5059,5064,5091,5095,5111,5115,5126,5135],{"__ignoreMap":31},[36,4860,4861],{"class":38,"line":39},[36,4862,4863],{"class":42},"\u002F\u002F元素逆置\n",[36,4865,4866,4868],{"class":38,"line":46},[36,4867,2699],{"class":53},[36,4869,2702],{"class":998},[36,4871,4872,4874,4876,4878],{"class":38,"line":78},[36,4873,2707],{"class":53},[36,4875,2710],{"class":53},[36,4877,2714],{"class":2713},[36,4879,2040],{"class":49},[36,4881,4882,4884,4886],{"class":38,"line":125},[36,4883,904],{"class":53},[36,4885,2723],{"class":2713},[36,4887,2726],{"class":49},[36,4889,4890],{"class":38,"line":131},[36,4891,2296],{"class":49},[36,4893,4894,4897,4899,4901,4903,4905,4907,4909,4911,4913,4915,4917,4919,4921,4923,4925],{"class":38,"line":396},[36,4895,4896],{"class":53},"   int",[36,4898,4711],{"class":49},[36,4900,157],{"class":60},[36,4902,1819],{"class":49},[36,4904,54],{"class":53},[36,4906,1775],{"class":49},[36,4908,61],{"class":60},[36,4910,64],{"class":49},[36,4912,181],{"class":60},[36,4914,64],{"class":49},[36,4916,162],{"class":60},[36,4918,64],{"class":49},[36,4920,186],{"class":60},[36,4922,64],{"class":49},[36,4924,157],{"class":60},[36,4926,4744],{"class":49},[36,4928,4929,4931,4934,4936,4938,4940],{"class":38,"line":407},[36,4930,4896],{"class":53},[36,4932,4933],{"class":49}," start",[36,4935,54],{"class":53},[36,4937,643],{"class":60},[36,4939,952],{"class":49},[36,4941,4942],{"class":42},"\u002F\u002F起始下标\n",[36,4944,4945,4947,4950,4953,4956,4959,4961,4963,4966,4968,4970,4972],{"class":38,"line":2061},[36,4946,4896],{"class":53},[36,4948,4949],{"class":49}," end",[36,4951,4952],{"class":53},"=sizeof",[36,4954,4955],{"class":49},"(arr)",[36,4957,4958],{"class":53},"\u002Fsizeof",[36,4960,4600],{"class":49},[36,4962,643],{"class":60},[36,4964,4965],{"class":49},"])",[36,4967,1414],{"class":53},[36,4969,61],{"class":60},[36,4971,952],{"class":49},[36,4973,4974],{"class":42},"\u002F\u002F结束下标\n",[36,4976,4977,4980,4983,4985],{"class":38,"line":2067},[36,4978,4979],{"class":53},"   while",[36,4981,4982],{"class":49}," (start",[36,4984,1789],{"class":53},[36,4986,4987],{"class":49},"end)\n",[36,4989,4990],{"class":38,"line":2079},[36,4991,4992],{"class":49},"   {\n",[36,4994,4995],{"class":38,"line":2362},[36,4996,4997],{"class":42},"    \u002F\u002F实现元素互换代码\n",[36,4999,5000,5002,5005,5007],{"class":38,"line":2367},[36,5001,2735],{"class":53},[36,5003,5004],{"class":49}," temp",[36,5006,54],{"class":53},[36,5008,5009],{"class":49},"arr[start];\n",[36,5011,5012,5015,5017],{"class":38,"line":2373},[36,5013,5014],{"class":49},"    arr[start]",[36,5016,54],{"class":53},[36,5018,5019],{"class":49},"arr[end];\n",[36,5021,5022,5025,5027],{"class":38,"line":2378},[36,5023,5024],{"class":49},"    arr[end]",[36,5026,54],{"class":53},[36,5028,5029],{"class":49},"temp;\n",[36,5031,5032],{"class":38,"line":2392},[36,5033,5034],{"class":42},"    \u002F\u002F下标更新\n",[36,5036,5037,5040,5042],{"class":38,"line":2397},[36,5038,5039],{"class":49},"    start",[36,5041,3042],{"class":53},[36,5043,2040],{"class":49},[36,5045,5046,5049,5052],{"class":38,"line":2403},[36,5047,5048],{"class":49},"    end",[36,5050,5051],{"class":53},"--",[36,5053,2040],{"class":49},[36,5055,5056],{"class":38,"line":2424},[36,5057,5058],{"class":49},"   }\n",[36,5060,5061],{"class":38,"line":2429},[36,5062,5063],{"class":42},"   \u002F\u002F输出逆置后的数组\n",[36,5065,5066,5069,5071,5073,5075,5077,5079,5081,5083,5085,5087,5089],{"class":38,"line":2443},[36,5067,5068],{"class":53},"   for",[36,5070,2408],{"class":49},[36,5072,904],{"class":53},[36,5074,3781],{"class":49},[36,5076,54],{"class":53},[36,5078,643],{"class":60},[36,5080,3788],{"class":49},[36,5082,1789],{"class":53},[36,5084,157],{"class":60},[36,5086,3788],{"class":49},[36,5088,3042],{"class":53},[36,5090,75],{"class":49},[36,5092,5093],{"class":38,"line":2448},[36,5094,4992],{"class":49},[36,5096,5097,5099,5101,5104,5106,5109],{"class":38,"line":2477},[36,5098,2301],{"class":49},[36,5100,1923],{"class":53},[36,5102,5103],{"class":49},"arr[i]",[36,5105,1923],{"class":53},[36,5107,5108],{"class":998},"\" \"",[36,5110,2040],{"class":49},[36,5112,5113],{"class":38,"line":2482},[36,5114,5058],{"class":49},[36,5116,5117,5120,5122,5124],{"class":38,"line":2499},[36,5118,5119],{"class":2713},"   system",[36,5121,901],{"class":49},[36,5123,3058],{"class":998},[36,5125,3468],{"class":49},[36,5127,5128,5131,5133],{"class":38,"line":2504},[36,5129,5130],{"class":53},"   return",[36,5132,4842],{"class":60},[36,5134,2040],{"class":49},[36,5136,5137],{"class":38,"line":2509},[36,5138,2315],{"class":49},[1886,5140,5141],{},[854,5142,5143],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[26,5145,5147],{"className":889,"code":5146,"language":891,"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,5148,5149,5154,5160,5170,5178,5182,5234,5247,5273,5277,5291,5295,5300,5305,5335,5339,5344,5378,5382,5387,5406,5411,5423,5439,5454,5459,5463,5467,5480,5506,5510,5524,5528,5536],{"__ignoreMap":31},[36,5150,5151],{"class":38,"line":39},[36,5152,5153],{"class":42},"\u002F\u002F冒泡排序,升序\n",[36,5155,5156,5158],{"class":38,"line":46},[36,5157,2699],{"class":53},[36,5159,2702],{"class":998},[36,5161,5162,5164,5166,5168],{"class":38,"line":78},[36,5163,2707],{"class":53},[36,5165,2710],{"class":53},[36,5167,2714],{"class":2713},[36,5169,2040],{"class":49},[36,5171,5172,5174,5176],{"class":38,"line":125},[36,5173,904],{"class":53},[36,5175,2723],{"class":2713},[36,5177,2726],{"class":49},[36,5179,5180],{"class":38,"line":131},[36,5181,2296],{"class":49},[36,5183,5184,5186,5188,5190,5193,5195,5198,5200,5202,5204,5206,5208,5210,5212,5214,5216,5218,5220,5222,5224,5226,5228,5230,5232],{"class":38,"line":396},[36,5185,2735],{"class":53},[36,5187,4711],{"class":49},[36,5189,1305],{"class":60},[36,5191,5192],{"class":49},"] ",[36,5194,54],{"class":53},[36,5196,5197],{"class":49}," {",[36,5199,186],{"class":60},[36,5201,64],{"class":49},[36,5203,181],{"class":60},[36,5205,64],{"class":49},[36,5207,1280],{"class":60},[36,5209,64],{"class":49},[36,5211,643],{"class":60},[36,5213,64],{"class":49},[36,5215,157],{"class":60},[36,5217,64],{"class":49},[36,5219,1255],{"class":60},[36,5221,64],{"class":49},[36,5223,61],{"class":60},[36,5225,64],{"class":49},[36,5227,162],{"class":60},[36,5229,64],{"class":49},[36,5231,1305],{"class":60},[36,5233,4744],{"class":49},[36,5235,5236,5238,5240,5243,5245],{"class":38,"line":407},[36,5237,2301],{"class":49},[36,5239,1923],{"class":53},[36,5241,5242],{"class":998},"\"排序前：\"",[36,5244,1923],{"class":53},[36,5246,1945],{"class":49},[36,5248,5249,5251,5253,5255,5257,5259,5261,5263,5265,5267,5269,5271],{"class":38,"line":2061},[36,5250,3950],{"class":53},[36,5252,2408],{"class":49},[36,5254,904],{"class":53},[36,5256,3781],{"class":49},[36,5258,54],{"class":53},[36,5260,643],{"class":60},[36,5262,3788],{"class":49},[36,5264,1789],{"class":53},[36,5266,1305],{"class":60},[36,5268,3788],{"class":49},[36,5270,3042],{"class":53},[36,5272,75],{"class":49},[36,5274,5275],{"class":38,"line":2067},[36,5276,2780],{"class":49},[36,5278,5279,5281,5283,5285,5287,5289],{"class":38,"line":2079},[36,5280,4200],{"class":49},[36,5282,1923],{"class":53},[36,5284,5103],{"class":49},[36,5286,1923],{"class":53},[36,5288,5108],{"class":998},[36,5290,2040],{"class":49},[36,5292,5293],{"class":38,"line":2362},[36,5294,2937],{"class":49},[36,5296,5297],{"class":38,"line":2367},[36,5298,5299],{"class":42},"    \u002F\u002F开始冒泡排序\n",[36,5301,5302],{"class":38,"line":2373},[36,5303,5304],{"class":42},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[36,5306,5307,5309,5311,5313,5315,5317,5319,5321,5323,5325,5327,5329,5331,5333],{"class":38,"line":2378},[36,5308,3950],{"class":53},[36,5310,2408],{"class":49},[36,5312,904],{"class":53},[36,5314,3781],{"class":49},[36,5316,54],{"class":53},[36,5318,643],{"class":60},[36,5320,3788],{"class":49},[36,5322,1789],{"class":53},[36,5324,1305],{"class":60},[36,5326,1414],{"class":53},[36,5328,61],{"class":60},[36,5330,3788],{"class":49},[36,5332,3042],{"class":53},[36,5334,75],{"class":49},[36,5336,5337],{"class":38,"line":2392},[36,5338,2780],{"class":49},[36,5340,5341],{"class":38,"line":2397},[36,5342,5343],{"class":42},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[36,5345,5346,5348,5350,5352,5354,5356,5358,5360,5362,5364,5366,5368,5370,5372,5374,5376],{"class":38,"line":2403},[36,5347,4152],{"class":53},[36,5349,2408],{"class":49},[36,5351,904],{"class":53},[36,5353,4159],{"class":49},[36,5355,54],{"class":53},[36,5357,643],{"class":60},[36,5359,4166],{"class":49},[36,5361,1789],{"class":53},[36,5363,1305],{"class":60},[36,5365,1414],{"class":53},[36,5367,1326],{"class":49},[36,5369,1414],{"class":53},[36,5371,61],{"class":60},[36,5373,4166],{"class":49},[36,5375,3042],{"class":53},[36,5377,75],{"class":49},[36,5379,5380],{"class":38,"line":2424},[36,5381,3259],{"class":49},[36,5383,5384],{"class":38,"line":2429},[36,5385,5386],{"class":42},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[36,5388,5389,5392,5395,5397,5400,5402,5404],{"class":38,"line":2443},[36,5390,5391],{"class":53},"            if",[36,5393,5394],{"class":49},"(arr[j]",[36,5396,1839],{"class":53},[36,5398,5399],{"class":49},"arr[j",[36,5401,1365],{"class":53},[36,5403,61],{"class":60},[36,5405,165],{"class":49},[36,5407,5408],{"class":38,"line":2448},[36,5409,5410],{"class":49},"            {\n",[36,5412,5413,5416,5418,5420],{"class":38,"line":2477},[36,5414,5415],{"class":53},"                int",[36,5417,5004],{"class":49},[36,5419,54],{"class":53},[36,5421,5422],{"class":49},"arr[j];\n",[36,5424,5425,5428,5430,5432,5434,5436],{"class":38,"line":2482},[36,5426,5427],{"class":49},"                arr[j]",[36,5429,54],{"class":53},[36,5431,5399],{"class":49},[36,5433,1365],{"class":53},[36,5435,61],{"class":60},[36,5437,5438],{"class":49},"];\n",[36,5440,5441,5444,5446,5448,5450,5452],{"class":38,"line":2499},[36,5442,5443],{"class":49},"                arr[j",[36,5445,1365],{"class":53},[36,5447,61],{"class":60},[36,5449,1819],{"class":49},[36,5451,54],{"class":53},[36,5453,5029],{"class":49},[36,5455,5456],{"class":38,"line":2504},[36,5457,5458],{"class":49},"            }\n",[36,5460,5461],{"class":38,"line":2509},[36,5462,3278],{"class":49},[36,5464,5465],{"class":38,"line":2514},[36,5466,2937],{"class":49},[36,5468,5469,5471,5473,5476,5478],{"class":38,"line":2528},[36,5470,2301],{"class":49},[36,5472,1923],{"class":53},[36,5474,5475],{"class":998},"\"排序后：\"",[36,5477,1923],{"class":53},[36,5479,1945],{"class":49},[36,5481,5482,5484,5486,5488,5490,5492,5494,5496,5498,5500,5502,5504],{"class":38,"line":2533},[36,5483,3950],{"class":53},[36,5485,2408],{"class":49},[36,5487,904],{"class":53},[36,5489,3781],{"class":49},[36,5491,54],{"class":53},[36,5493,643],{"class":60},[36,5495,3788],{"class":49},[36,5497,1789],{"class":53},[36,5499,1305],{"class":60},[36,5501,3788],{"class":49},[36,5503,3042],{"class":53},[36,5505,75],{"class":49},[36,5507,5508],{"class":38,"line":3326},[36,5509,2780],{"class":49},[36,5511,5512,5514,5516,5518,5520,5522],{"class":38,"line":3340},[36,5513,4200],{"class":49},[36,5515,1923],{"class":53},[36,5517,5103],{"class":49},[36,5519,1923],{"class":53},[36,5521,5108],{"class":998},[36,5523,2040],{"class":49},[36,5525,5526],{"class":38,"line":3348},[36,5527,2937],{"class":49},[36,5529,5530,5532,5534],{"class":38,"line":3353},[36,5531,4839],{"class":53},[36,5533,4842],{"class":60},[36,5535,2040],{"class":49},[36,5537,5538],{"class":38,"line":3359},[36,5539,2315],{"class":49},[868,5541,5543],{"id":5542},"_172二维数组","1.7.2二维数组",[851,5545,5546],{},[854,5547,5548],{},"二维数组的四种定义方式",[1031,5550,5551,5560],{},[1034,5552,5553],{},[1037,5554,5555,5558],{},[1040,5556,5557],{},"序号",[1040,5559,4530],{},[1078,5561,5562,5572,5581,5590,5599],{},[1037,5563,5564,5566],{},[1083,5565,61],{},[1083,5567,5568,5569,952],{},"数据类型 数组名[行数]",[36,5570,5571],{},"列数",[1037,5573,5574,5576],{},[1083,5575,181],{},[1083,5577,5568,5578,5580],{},[36,5579,5571],{},"={ {数据1,数据2}，{数据3，数据4}... }",[1037,5582,5583,5585],{},[1083,5584,162],{},[1083,5586,5568,5587,5589],{},[36,5588,5571],{},"={数据1,数据2,数据3...}",[1037,5591,5592,5594],{},[1083,5593,186],{},[1083,5595,5596,5597,5589],{},"数据类型 数组名[]",[36,5598,5571],{},[1037,5600,5601,5604],{},[1083,5602,5603],{},"注意：不能只省略列数",[1083,5605],{},[851,5607,5608],{"start":46},[854,5609,5610],{},"二维数组数组名",[1886,5612,5613,5616],{},[854,5614,5615],{},"1.查看二维数组所占内存空间",[854,5617,5618],{},"2.获取二维数组首地址",[14,5620,5621],{},"已知二维数组，求二维数组的行数与列数",[26,5623,5625],{"className":889,"code":5624,"language":891,"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,5626,5627,5635,5639,5657,5661,5679,5695,5700,5725,5758],{"__ignoreMap":31},[36,5628,5629,5631,5633],{"class":38,"line":39},[36,5630,904],{"class":53},[36,5632,2723],{"class":2713},[36,5634,2726],{"class":49},[36,5636,5637],{"class":38,"line":46},[36,5638,2296],{"class":49},[36,5640,5641,5643,5645,5647,5650,5652,5654],{"class":38,"line":78},[36,5642,2735],{"class":53},[36,5644,4711],{"class":49},[36,5646,181],{"class":60},[36,5648,5649],{"class":49},"][",[36,5651,162],{"class":60},[36,5653,1819],{"class":49},[36,5655,5656],{"class":53},"=\n",[36,5658,5659],{"class":38,"line":125},[36,5660,2780],{"class":49},[36,5662,5663,5666,5668,5670,5672,5674,5676],{"class":38,"line":131},[36,5664,5665],{"class":49},"        {",[36,5667,61],{"class":60},[36,5669,64],{"class":49},[36,5671,181],{"class":60},[36,5673,64],{"class":49},[36,5675,162],{"class":60},[36,5677,5678],{"class":49},"},\n",[36,5680,5681,5683,5685,5687,5689,5691,5693],{"class":38,"line":396},[36,5682,5665],{"class":49},[36,5684,186],{"class":60},[36,5686,64],{"class":49},[36,5688,157],{"class":60},[36,5690,64],{"class":49},[36,5692,1230],{"class":60},[36,5694,2315],{"class":49},[36,5696,5697],{"class":38,"line":407},[36,5698,5699],{"class":49},"    };\n",[36,5701,5702,5704,5706,5709,5711,5713,5715,5717,5719,5721,5723],{"class":38,"line":2061},[36,5703,2301],{"class":49},[36,5705,1923],{"class":53},[36,5707,5708],{"class":998},"\"二维数组的行数\"",[36,5710,2122],{"class":53},[36,5712,4955],{"class":49},[36,5714,4958],{"class":53},[36,5716,4600],{"class":49},[36,5718,643],{"class":60},[36,5720,4965],{"class":49},[36,5722,1923],{"class":53},[36,5724,1945],{"class":49},[36,5726,5727,5729,5731,5734,5736,5738,5740,5742,5744,5746,5748,5750,5752,5754,5756],{"class":38,"line":2067},[36,5728,2301],{"class":49},[36,5730,1923],{"class":53},[36,5732,5733],{"class":998},"\"二维数组的列数\"",[36,5735,2122],{"class":53},[36,5737,4600],{"class":49},[36,5739,643],{"class":60},[36,5741,4965],{"class":49},[36,5743,4958],{"class":53},[36,5745,4600],{"class":49},[36,5747,643],{"class":60},[36,5749,5649],{"class":49},[36,5751,643],{"class":60},[36,5753,4965],{"class":49},[36,5755,1923],{"class":53},[36,5757,1945],{"class":49},[36,5759,5760],{"class":38,"line":2079},[36,5761,2315],{"class":49},[14,5763,5764],{},"查看二维数组首地址",[26,5766,5768],{"className":889,"code":5767,"language":891,"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,5769,5770,5787,5813,5838],{"__ignoreMap":31},[36,5771,5772,5774,5776,5779,5781,5783,5785],{"class":38,"line":39},[36,5773,2119],{"class":49},[36,5775,1923],{"class":53},[36,5777,5778],{"class":998},"\"二维数组首地址：\"",[36,5780,1923],{"class":53},[36,5782,4629],{"class":49},[36,5784,1923],{"class":53},[36,5786,1945],{"class":49},[36,5788,5789,5791,5793,5796,5798,5800,5802,5805,5807,5809,5811],{"class":38,"line":46},[36,5790,2119],{"class":49},[36,5792,1923],{"class":53},[36,5794,5795],{"class":998},"\"二维数组第一行的首地址：\"",[36,5797,1923],{"class":53},[36,5799,901],{"class":49},[36,5801,904],{"class":53},[36,5803,5804],{"class":49},")arr[",[36,5806,643],{"class":60},[36,5808,1819],{"class":49},[36,5810,1923],{"class":53},[36,5812,1945],{"class":49},[36,5814,5815,5817,5819,5822,5824,5826,5828,5830,5832,5834,5836],{"class":38,"line":78},[36,5816,2119],{"class":49},[36,5818,1923],{"class":53},[36,5820,5821],{"class":998},"\"二维数组第二行的首地址：\"",[36,5823,1923],{"class":53},[36,5825,901],{"class":49},[36,5827,904],{"class":53},[36,5829,5804],{"class":49},[36,5831,61],{"class":60},[36,5833,1819],{"class":49},[36,5835,1923],{"class":53},[36,5837,1945],{"class":49},[36,5839,5840,5842,5844,5847,5849,5851,5853,5855,5857,5859,5861,5863,5865,5867,5869,5871],{"class":38,"line":125},[36,5841,2119],{"class":49},[36,5843,1923],{"class":53},[36,5845,5846],{"class":998},"\"二维数组第一个元素的首地址:\"",[36,5848,1923],{"class":53},[36,5850,901],{"class":49},[36,5852,904],{"class":53},[36,5854,1314],{"class":49},[36,5856,1239],{"class":53},[36,5858,4655],{"class":49},[36,5860,643],{"class":60},[36,5862,5649],{"class":49},[36,5864,643],{"class":60},[36,5866,1819],{"class":49},[36,5868,1923],{"class":53},[36,5870,1988],{"class":49},[36,5872,5873],{"class":42},"\u002F\u002F对于数，要加取址符\n",[807,5875,5876],{},"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":46,"depth":46,"links":5878},[5879,5880,5881,5889,5890,5896,5901],{"id":841,"depth":46,"text":842},{"id":848,"depth":46,"text":849},{"id":865,"depth":46,"text":866,"children":5882},[5883,5884,5885,5886,5887,5888],{"id":870,"depth":78,"text":871},{"id":916,"depth":78,"text":917},{"id":979,"depth":78,"text":980},{"id":1904,"depth":78,"text":1905},{"id":1994,"depth":78,"text":1995},{"id":2093,"depth":78,"text":2094},{"id":2135,"depth":46,"text":2136},{"id":2203,"depth":46,"text":2204,"children":5891},[5892,5893,5894,5895],{"id":2207,"depth":78,"text":2208},{"id":2229,"depth":78,"text":2230},{"id":2238,"depth":78,"text":2239},{"id":2247,"depth":78,"text":2248},{"id":2256,"depth":46,"text":2257,"children":5897},[5898,5899,5900],{"id":2260,"depth":78,"text":2261},{"id":2955,"depth":78,"text":2956},{"id":4370,"depth":78,"text":4371},{"id":4511,"depth":46,"text":4512,"children":5902},[5903,5904],{"id":4515,"depth":78,"text":4516},{"id":5542,"depth":78,"text":5543},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":833,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5911,"title":5912,"body":5913,"description":31,"extension":824,"meta":7012,"navigation":193,"path":7013,"seo":7014,"stem":7015,"__hash__":7016},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5914,"toc":7004},[5915,5918,5922,5930,5938,5941,6006,6010,6013,6089,6093,6096,6099,6102,6315,6319,6324,6388,6393,6460,6465,6556,6559,6664,6668,6671,6677,6821,6825,6828,6842,6845,6890,6893,7001],[10,5916,5912],{"id":5917},"_2函数",[21,5919,5921],{"id":5920},"_21函数概述","2.1函数概述",[851,5923,5924,5927],{},[854,5925,5926],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[854,5928,5929],{},"语法：",[26,5931,5936],{"className":5932,"code":5934,"language":5935,"meta":31},[5933],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[33,5937,5934],{"__ignoreMap":31},[14,5939,5940],{},"小案例",[26,5942,5944],{"className":889,"code":5943,"language":891,"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,5945,5946,5951,5974,5978,5995,6002],{"__ignoreMap":31},[36,5947,5948],{"class":38,"line":39},[36,5949,5950],{"class":42},"\u002F\u002Fnum1,num2形参\n",[36,5952,5953,5955,5958,5960,5962,5965,5967,5969,5972],{"class":38,"line":46},[36,5954,904],{"class":53},[36,5956,5957],{"class":2713}," add",[36,5959,901],{"class":49},[36,5961,904],{"class":53},[36,5963,5964],{"class":416}," num1",[36,5966,64],{"class":49},[36,5968,904],{"class":53},[36,5970,5971],{"class":416}," num2",[36,5973,75],{"class":49},[36,5975,5976],{"class":38,"line":78},[36,5977,2296],{"class":49},[36,5979,5980,5982,5985,5987,5990,5992],{"class":38,"line":125},[36,5981,2735],{"class":53},[36,5983,5984],{"class":49}," sum",[36,5986,54],{"class":53},[36,5988,5989],{"class":49},"num1",[36,5991,1365],{"class":53},[36,5993,5994],{"class":49},"num2;\n",[36,5996,5997,5999],{"class":38,"line":131},[36,5998,4839],{"class":53},[36,6000,6001],{"class":49}," sum;\n",[36,6003,6004],{"class":38,"line":396},[36,6005,2315],{"class":49},[21,6007,6009],{"id":6008},"_22函数调用","2.2函数调用",[14,6011,6012],{},"调用刚刚写的求和函数",[26,6014,6016],{"className":889,"code":6015,"language":891,"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,6017,6018,6026,6030,6035,6047,6059,6068,6073,6085],{"__ignoreMap":31},[36,6019,6020,6022,6024],{"class":38,"line":39},[36,6021,904],{"class":53},[36,6023,2723],{"class":2713},[36,6025,2726],{"class":49},[36,6027,6028],{"class":38,"line":46},[36,6029,2296],{"class":49},[36,6031,6032],{"class":38,"line":78},[36,6033,6034],{"class":42},"    \u002F\u002Fa,b实参\n",[36,6036,6037,6039,6041,6043,6045],{"class":38,"line":125},[36,6038,2735],{"class":53},[36,6040,2148],{"class":49},[36,6042,54],{"class":53},[36,6044,643],{"class":60},[36,6046,2040],{"class":49},[36,6048,6049,6051,6053,6055,6057],{"class":38,"line":131},[36,6050,2735],{"class":53},[36,6052,3582],{"class":49},[36,6054,54],{"class":53},[36,6056,643],{"class":60},[36,6058,2040],{"class":49},[36,6060,6061,6063,6065],{"class":38,"line":396},[36,6062,2762],{"class":49},[36,6064,2179],{"class":53},[36,6066,6067],{"class":49},"a,b;\n",[36,6069,6070],{"class":38,"line":407},[36,6071,6072],{"class":42},"    \u002F\u002F调用函数时，实参值传给了形参\n",[36,6074,6075,6077,6079,6082],{"class":38,"line":2061},[36,6076,2301],{"class":49},[36,6078,1923],{"class":53},[36,6080,6081],{"class":2713},"add",[36,6083,6084],{"class":49},"(a,b);\n",[36,6086,6087],{"class":38,"line":2067},[36,6088,2315],{"class":49},[21,6090,6092],{"id":6091},"_23值传递","2.3值传递",[14,6094,6095],{},"值传递就是函数调用时实参将数值传给形参",[14,6097,6098],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,6100,6101],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[26,6103,6105],{"className":889,"code":6104,"language":891,"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,6106,6107,6129,6133,6146,6163,6181,6192,6201,6210,6223,6239,6255,6264,6268,6276,6280,6292,6304,6311],{"__ignoreMap":31},[36,6108,6109,6112,6115,6117,6119,6121,6123,6125,6127],{"class":38,"line":39},[36,6110,6111],{"class":53},"void",[36,6113,6114],{"class":2713}," swap",[36,6116,901],{"class":49},[36,6118,904],{"class":53},[36,6120,5964],{"class":416},[36,6122,64],{"class":49},[36,6124,904],{"class":53},[36,6126,5971],{"class":416},[36,6128,75],{"class":49},[36,6130,6131],{"class":38,"line":46},[36,6132,2296],{"class":49},[36,6134,6135,6137,6139,6142,6144],{"class":38,"line":78},[36,6136,2301],{"class":49},[36,6138,1923],{"class":53},[36,6140,6141],{"class":998},"\"交换前：\"",[36,6143,1923],{"class":53},[36,6145,1945],{"class":49},[36,6147,6148,6150,6152,6155,6157,6159,6161],{"class":38,"line":125},[36,6149,2301],{"class":49},[36,6151,1923],{"class":53},[36,6153,6154],{"class":998},"\"num1=\"",[36,6156,1923],{"class":53},[36,6158,5989],{"class":49},[36,6160,1923],{"class":53},[36,6162,1945],{"class":49},[36,6164,6165,6167,6169,6172,6174,6177,6179],{"class":38,"line":131},[36,6166,2301],{"class":49},[36,6168,1923],{"class":53},[36,6170,6171],{"class":998},"\"num2=\"",[36,6173,1923],{"class":53},[36,6175,6176],{"class":49},"num2",[36,6178,1923],{"class":53},[36,6180,1945],{"class":49},[36,6182,6183,6185,6187,6189],{"class":38,"line":396},[36,6184,2735],{"class":53},[36,6186,5004],{"class":49},[36,6188,54],{"class":53},[36,6190,6191],{"class":49},"num1;\n",[36,6193,6194,6197,6199],{"class":38,"line":407},[36,6195,6196],{"class":49},"    num1",[36,6198,54],{"class":53},[36,6200,5994],{"class":49},[36,6202,6203,6206,6208],{"class":38,"line":2061},[36,6204,6205],{"class":49},"    num2",[36,6207,54],{"class":53},[36,6209,5029],{"class":49},[36,6211,6212,6214,6216,6219,6221],{"class":38,"line":2067},[36,6213,2301],{"class":49},[36,6215,1923],{"class":53},[36,6217,6218],{"class":998},"\"交换后：\"",[36,6220,1923],{"class":53},[36,6222,1945],{"class":49},[36,6224,6225,6227,6229,6231,6233,6235,6237],{"class":38,"line":2079},[36,6226,2301],{"class":49},[36,6228,1923],{"class":53},[36,6230,6154],{"class":998},[36,6232,1923],{"class":53},[36,6234,5989],{"class":49},[36,6236,1923],{"class":53},[36,6238,1945],{"class":49},[36,6240,6241,6243,6245,6247,6249,6251,6253],{"class":38,"line":2362},[36,6242,2301],{"class":49},[36,6244,1923],{"class":53},[36,6246,6171],{"class":998},[36,6248,1923],{"class":53},[36,6250,6176],{"class":49},[36,6252,1923],{"class":53},[36,6254,1945],{"class":49},[36,6256,6257,6259,6261],{"class":38,"line":2367},[36,6258,4839],{"class":53},[36,6260,952],{"class":49},[36,6262,6263],{"class":42},"\u002F\u002F或者不写\n",[36,6265,6266],{"class":38,"line":2373},[36,6267,2315],{"class":49},[36,6269,6270,6272,6274],{"class":38,"line":2378},[36,6271,904],{"class":53},[36,6273,2723],{"class":2713},[36,6275,2726],{"class":49},[36,6277,6278],{"class":38,"line":2392},[36,6279,2296],{"class":49},[36,6281,6282,6284,6286,6288,6290],{"class":38,"line":2397},[36,6283,2735],{"class":53},[36,6285,2148],{"class":49},[36,6287,54],{"class":53},[36,6289,332],{"class":60},[36,6291,2040],{"class":49},[36,6293,6294,6296,6298,6300,6302],{"class":38,"line":2403},[36,6295,2735],{"class":53},[36,6297,3582],{"class":49},[36,6299,54],{"class":53},[36,6301,72],{"class":60},[36,6303,2040],{"class":49},[36,6305,6306,6309],{"class":38,"line":2424},[36,6307,6308],{"class":2713},"    swap",[36,6310,6084],{"class":49},[36,6312,6313],{"class":38,"line":2429},[36,6314,2315],{"class":49},[21,6316,6318],{"id":6317},"_24函数的常见形式","2.4函数的常见形式",[851,6320,6321],{},[854,6322,6323],{},"无参无返",[26,6325,6327],{"className":889,"code":6326,"language":891,"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,6328,6329,6338,6342,6355,6359,6367,6371,6376,6384],{"__ignoreMap":31},[36,6330,6331,6333,6336],{"class":38,"line":39},[36,6332,6111],{"class":53},[36,6334,6335],{"class":2713}," test01",[36,6337,2726],{"class":49},[36,6339,6340],{"class":38,"line":46},[36,6341,2296],{"class":49},[36,6343,6344,6346,6348,6351,6353],{"class":38,"line":78},[36,6345,2301],{"class":49},[36,6347,1923],{"class":53},[36,6349,6350],{"class":998},"\"你好\"",[36,6352,1923],{"class":53},[36,6354,1945],{"class":49},[36,6356,6357],{"class":38,"line":125},[36,6358,2315],{"class":49},[36,6360,6361,6363,6365],{"class":38,"line":131},[36,6362,904],{"class":53},[36,6364,2723],{"class":2713},[36,6366,2726],{"class":49},[36,6368,6369],{"class":38,"line":396},[36,6370,2296],{"class":49},[36,6372,6373],{"class":38,"line":407},[36,6374,6375],{"class":42},"    \u002F\u002F函数调用\n",[36,6377,6378,6381],{"class":38,"line":2061},[36,6379,6380],{"class":2713},"    test01",[36,6382,6383],{"class":49},"();\n",[36,6385,6386],{"class":38,"line":2067},[36,6387,2315],{"class":49},[851,6389,6390],{"start":46},[854,6391,6392],{},"有参无返",[26,6394,6396],{"className":889,"code":6395,"language":891,"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,6397,6398,6413,6417,6429,6433,6441,6445,6456],{"__ignoreMap":31},[36,6399,6400,6402,6405,6407,6409,6411],{"class":38,"line":39},[36,6401,6111],{"class":53},[36,6403,6404],{"class":2713}," test02",[36,6406,901],{"class":49},[36,6408,904],{"class":53},[36,6410,2148],{"class":416},[36,6412,75],{"class":49},[36,6414,6415],{"class":38,"line":46},[36,6416,2296],{"class":49},[36,6418,6419,6421,6423,6425,6427],{"class":38,"line":78},[36,6420,2301],{"class":49},[36,6422,1923],{"class":53},[36,6424,6350],{"class":998},[36,6426,1923],{"class":53},[36,6428,1945],{"class":49},[36,6430,6431],{"class":38,"line":125},[36,6432,2315],{"class":49},[36,6434,6435,6437,6439],{"class":38,"line":131},[36,6436,904],{"class":53},[36,6438,2723],{"class":2713},[36,6440,2726],{"class":49},[36,6442,6443],{"class":38,"line":396},[36,6444,2296],{"class":49},[36,6446,6447,6450,6452,6454],{"class":38,"line":407},[36,6448,6449],{"class":2713},"    test02",[36,6451,901],{"class":49},[36,6453,67],{"class":60},[36,6455,3468],{"class":49},[36,6457,6458],{"class":38,"line":2061},[36,6459,2315],{"class":49},[851,6461,6462],{"start":78},[854,6463,6464],{},"无参有返",[26,6466,6468],{"className":889,"code":6467,"language":891,"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,6469,6470,6479,6483,6495,6504,6508,6516,6520,6533,6552],{"__ignoreMap":31},[36,6471,6472,6474,6477],{"class":38,"line":39},[36,6473,904],{"class":53},[36,6475,6476],{"class":2713}," test03",[36,6478,2726],{"class":49},[36,6480,6481],{"class":38,"line":46},[36,6482,2296],{"class":49},[36,6484,6485,6487,6489,6491,6493],{"class":38,"line":78},[36,6486,2301],{"class":49},[36,6488,1923],{"class":53},[36,6490,6350],{"class":998},[36,6492,1923],{"class":53},[36,6494,1945],{"class":49},[36,6496,6497,6499,6502],{"class":38,"line":125},[36,6498,4839],{"class":53},[36,6500,6501],{"class":60}," 100",[36,6503,2040],{"class":49},[36,6505,6506],{"class":38,"line":131},[36,6507,2315],{"class":49},[36,6509,6510,6512,6514],{"class":38,"line":396},[36,6511,904],{"class":53},[36,6513,2723],{"class":2713},[36,6515,2726],{"class":49},[36,6517,6518],{"class":38,"line":407},[36,6519,2296],{"class":49},[36,6521,6522,6524,6526,6528,6531],{"class":38,"line":2061},[36,6523,2735],{"class":53},[36,6525,5964],{"class":49},[36,6527,54],{"class":53},[36,6529,6530],{"class":2713},"test03",[36,6532,6383],{"class":49},[36,6534,6535,6537,6539,6541,6543,6545,6547,6549],{"class":38,"line":2067},[36,6536,2301],{"class":49},[36,6538,1923],{"class":53},[36,6540,6154],{"class":998},[36,6542,1923],{"class":53},[36,6544,5989],{"class":49},[36,6546,1923],{"class":53},[36,6548,1988],{"class":49},[36,6550,6551],{"class":42}," \u002F\u002F100\n",[36,6553,6554],{"class":38,"line":2079},[36,6555,2315],{"class":49},[14,6557,6558],{},"4.有参有返",[26,6560,6562],{"className":889,"code":6561,"language":891,"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,6563,6564,6579,6583,6596,6602,6606,6615,6619,6631,6645,6660],{"__ignoreMap":31},[36,6565,6566,6568,6571,6573,6575,6577],{"class":38,"line":39},[36,6567,904],{"class":53},[36,6569,6570],{"class":2713}," test04",[36,6572,901],{"class":49},[36,6574,904],{"class":53},[36,6576,2148],{"class":416},[36,6578,75],{"class":49},[36,6580,6581],{"class":38,"line":46},[36,6582,2296],{"class":49},[36,6584,6585,6587,6589,6592,6594],{"class":38,"line":78},[36,6586,2301],{"class":49},[36,6588,1923],{"class":53},[36,6590,6591],{"class":998},"\"hello\"",[36,6593,1923],{"class":53},[36,6595,1945],{"class":49},[36,6597,6598,6600],{"class":38,"line":125},[36,6599,4839],{"class":53},[36,6601,2182],{"class":49},[36,6603,6604],{"class":38,"line":131},[36,6605,2315],{"class":49},[36,6607,6608,6610,6613],{"class":38,"line":396},[36,6609,904],{"class":53},[36,6611,6612],{"class":2713}," mian",[36,6614,2726],{"class":49},[36,6616,6617],{"class":38,"line":407},[36,6618,2296],{"class":49},[36,6620,6621,6623,6625,6627,6629],{"class":38,"line":2061},[36,6622,2735],{"class":53},[36,6624,3582],{"class":49},[36,6626,54],{"class":53},[36,6628,61],{"class":60},[36,6630,2040],{"class":49},[36,6632,6633,6635,6637,6639,6642],{"class":38,"line":2067},[36,6634,2735],{"class":53},[36,6636,3598],{"class":49},[36,6638,54],{"class":53},[36,6640,6641],{"class":2713},"test04",[36,6643,6644],{"class":49},"(b);\n",[36,6646,6647,6649,6651,6653,6655,6657],{"class":38,"line":2079},[36,6648,2301],{"class":49},[36,6650,1923],{"class":53},[36,6652,1177],{"class":49},[36,6654,1923],{"class":53},[36,6656,1988],{"class":49},[36,6658,6659],{"class":42}," \u002F\u002F1\n",[36,6661,6662],{"class":38,"line":2362},[36,6663,2315],{"class":49},[21,6665,6667],{"id":6666},"_25函数的声明","2.5函数的声明",[14,6669,6670],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,6672,6673,6674],{},"函数的",[1043,6675,6676],{},"声明可以多次，但是函数的定义只能有一次",[26,6678,6680],{"className":889,"code":6679,"language":891,"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,6681,6682,6687,6692,6717,6726,6730,6742,6754,6770,6774,6794,6798,6817],{"__ignoreMap":31},[36,6683,6684],{"class":38,"line":39},[36,6685,6686],{"class":42},"\u002F\u002F函数声明\n",[36,6688,6689],{"class":38,"line":46},[36,6690,6691],{"class":42},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[36,6693,6694,6696,6699,6701,6703,6705,6707,6709,6711,6714],{"class":38,"line":78},[36,6695,904],{"class":53},[36,6697,6698],{"class":2713}," max",[36,6700,901],{"class":49},[36,6702,904],{"class":53},[36,6704,2148],{"class":416},[36,6706,64],{"class":49},[36,6708,904],{"class":53},[36,6710,3582],{"class":416},[36,6712,6713],{"class":49},");",[36,6715,6716],{"class":42},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[36,6718,6719,6721,6723],{"class":38,"line":125},[36,6720,904],{"class":53},[36,6722,2723],{"class":2713},[36,6724,6725],{"class":49},"() \n",[36,6727,6728],{"class":38,"line":131},[36,6729,2296],{"class":49},[36,6731,6732,6734,6736,6738,6740],{"class":38,"line":396},[36,6733,2735],{"class":53},[36,6735,2148],{"class":49},[36,6737,54],{"class":53},[36,6739,332],{"class":60},[36,6741,2040],{"class":49},[36,6743,6744,6746,6748,6750,6752],{"class":38,"line":407},[36,6745,2735],{"class":53},[36,6747,3582],{"class":49},[36,6749,54],{"class":53},[36,6751,72],{"class":60},[36,6753,2040],{"class":49},[36,6755,6756,6758,6760,6763,6766,6768],{"class":38,"line":2061},[36,6757,2301],{"class":49},[36,6759,1923],{"class":53},[36,6761,6762],{"class":2713},"max",[36,6764,6765],{"class":49},"(a,b)",[36,6767,1923],{"class":53},[36,6769,1945],{"class":49},[36,6771,6772],{"class":38,"line":2067},[36,6773,2315],{"class":49},[36,6775,6776,6778,6780,6782,6784,6786,6788,6790,6792],{"class":38,"line":2079},[36,6777,904],{"class":53},[36,6779,6698],{"class":2713},[36,6781,901],{"class":49},[36,6783,904],{"class":53},[36,6785,2148],{"class":416},[36,6787,64],{"class":49},[36,6789,904],{"class":53},[36,6791,3582],{"class":416},[36,6793,75],{"class":49},[36,6795,6796],{"class":38,"line":2362},[36,6797,2296],{"class":49},[36,6799,6800,6802,6804,6806,6808,6810,6812,6814],{"class":38,"line":2367},[36,6801,4839],{"class":53},[36,6803,2148],{"class":49},[36,6805,1839],{"class":53},[36,6807,321],{"class":49},[36,6809,1865],{"class":53},[36,6811,50],{"class":49},[36,6813,1738],{"class":53},[36,6815,6816],{"class":49},"b;\n",[36,6818,6819],{"class":38,"line":2373},[36,6820,2315],{"class":49},[21,6822,6824],{"id":6823},"_26函数的分文件编写","2.6函数的分文件编写",[14,6826,6827],{},"4个步骤：",[1886,6829,6830,6833,6836,6839],{},[854,6831,6832],{},"1.创建后缀名为.h的头文件",[854,6834,6835],{},"2.创建后缀名为.cpp的源文件",[854,6837,6838],{},"3.在头文件中写函数的定义",[854,6840,6841],{},"4.在源文件中写函数的定义\n示例：",[14,6843,6844],{},"头文件：swap.h",[26,6846,6848],{"className":889,"code":6847,"language":891,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[33,6849,6850,6856,6866,6870],{"__ignoreMap":31},[36,6851,6852,6854],{"class":38,"line":39},[36,6853,2699],{"class":53},[36,6855,2702],{"class":998},[36,6857,6858,6860,6862,6864],{"class":38,"line":46},[36,6859,2707],{"class":53},[36,6861,2710],{"class":53},[36,6863,2714],{"class":2713},[36,6865,2040],{"class":49},[36,6867,6868],{"class":38,"line":78},[36,6869,6686],{"class":42},[36,6871,6872,6874,6876,6878,6880,6882,6884,6886,6888],{"class":38,"line":125},[36,6873,6111],{"class":53},[36,6875,6114],{"class":2713},[36,6877,901],{"class":49},[36,6879,904],{"class":53},[36,6881,2148],{"class":416},[36,6883,64],{"class":49},[36,6885,904],{"class":53},[36,6887,3582],{"class":416},[36,6889,3468],{"class":49},[14,6891,6892],{},"源文件：swap.cpp",[26,6894,6896],{"className":889,"code":6895,"language":891,"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,6897,6898,6905,6910,6930,6934,6945,6954,6963,6980,6997],{"__ignoreMap":31},[36,6899,6900,6902],{"class":38,"line":39},[36,6901,2699],{"class":53},[36,6903,6904],{"class":998}," \"swap.h\"\n",[36,6906,6907],{"class":38,"line":46},[36,6908,6909],{"class":42},"\u002F\u002F函数的定义\n",[36,6911,6912,6914,6916,6918,6920,6922,6924,6926,6928],{"class":38,"line":78},[36,6913,6111],{"class":53},[36,6915,6114],{"class":2713},[36,6917,901],{"class":49},[36,6919,904],{"class":53},[36,6921,2148],{"class":416},[36,6923,64],{"class":49},[36,6925,904],{"class":53},[36,6927,3582],{"class":416},[36,6929,75],{"class":49},[36,6931,6932],{"class":38,"line":125},[36,6933,2296],{"class":49},[36,6935,6936,6938,6940,6942],{"class":38,"line":131},[36,6937,2735],{"class":53},[36,6939,5004],{"class":49},[36,6941,54],{"class":53},[36,6943,6944],{"class":49},"a;\n",[36,6946,6947,6950,6952],{"class":38,"line":396},[36,6948,6949],{"class":49},"    a",[36,6951,54],{"class":53},[36,6953,6816],{"class":49},[36,6955,6956,6959,6961],{"class":38,"line":407},[36,6957,6958],{"class":49},"    b",[36,6960,54],{"class":53},[36,6962,5029],{"class":49},[36,6964,6965,6967,6969,6972,6974,6976,6978],{"class":38,"line":2061},[36,6966,2301],{"class":49},[36,6968,1923],{"class":53},[36,6970,6971],{"class":998},"\"a=\"",[36,6973,1923],{"class":53},[36,6975,50],{"class":49},[36,6977,1923],{"class":53},[36,6979,1945],{"class":49},[36,6981,6982,6984,6986,6989,6991,6993,6995],{"class":38,"line":2067},[36,6983,2301],{"class":49},[36,6985,1923],{"class":53},[36,6987,6988],{"class":998},"\"b=\"",[36,6990,1923],{"class":53},[36,6992,321],{"class":49},[36,6994,1923],{"class":53},[36,6996,1945],{"class":49},[36,6998,6999],{"class":38,"line":2079},[36,7000,2315],{"class":49},[807,7002,7003],{},"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":46,"depth":46,"links":7005},[7006,7007,7008,7009,7010,7011],{"id":5920,"depth":46,"text":5921},{"id":6008,"depth":46,"text":6009},{"id":6091,"depth":46,"text":6092},{"id":6317,"depth":46,"text":6318},{"id":6666,"depth":46,"text":6667},{"id":6823,"depth":46,"text":6824},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5912,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":7018,"title":7019,"body":7020,"description":7027,"extension":824,"meta":8432,"navigation":193,"path":8433,"seo":8434,"stem":8435,"__hash__":8436},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":7021,"toc":8422},[7022,7025,7028,7032,7194,7198,7201,7204,7207,7210,7350,7354,7357,7360,7363,7428,7432,7437,7504,7507,7511,7514,7525,7530,7550,7553,7558,7577,7580,7584,7603,7606,7610,7845,7849,7852,7855,7858,8020,8023,8027,8030,8036,8419],[10,7023,7019],{"id":7024},"_3指针",[14,7026,7027],{},"通过指针保存一个地址，指针就是个地址",[21,7029,7031],{"id":7030},"_31定义指针","3.1定义指针",[26,7033,7035],{"className":889,"code":7034,"language":891,"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,7036,7037,7045,7049,7054,7066,7071,7079,7089,7107,7127,7131,7136,7141,7146,7160,7176,7190],{"__ignoreMap":31},[36,7038,7039,7041,7043],{"class":38,"line":39},[36,7040,904],{"class":53},[36,7042,2723],{"class":2713},[36,7044,2726],{"class":49},[36,7046,7047],{"class":38,"line":46},[36,7048,2296],{"class":49},[36,7050,7051],{"class":38,"line":78},[36,7052,7053],{"class":42},"    \u002F\u002F1.定义指针\n",[36,7055,7056,7058,7060,7062,7064],{"class":38,"line":125},[36,7057,2735],{"class":53},[36,7059,2148],{"class":49},[36,7061,54],{"class":53},[36,7063,332],{"class":60},[36,7065,2040],{"class":49},[36,7067,7068],{"class":38,"line":131},[36,7069,7070],{"class":42},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[36,7072,7073,7076],{"class":38,"line":396},[36,7074,7075],{"class":53},"    int*",[36,7077,7078],{"class":49},"p;\n",[36,7080,7081,7084,7087],{"class":38,"line":407},[36,7082,7083],{"class":49},"    p",[36,7085,7086],{"class":53},"=&",[36,7088,6944],{"class":49},[36,7090,7091,7093,7095,7098,7101,7103,7105],{"class":38,"line":2061},[36,7092,2301],{"class":49},[36,7094,1923],{"class":53},[36,7096,7097],{"class":998},"\"a的地址为：\"",[36,7099,7100],{"class":53},"\u003C\u003C&",[36,7102,50],{"class":49},[36,7104,1923],{"class":53},[36,7106,1945],{"class":49},[36,7108,7109,7111,7113,7116,7118,7120,7122,7124],{"class":38,"line":2067},[36,7110,2301],{"class":49},[36,7112,1923],{"class":53},[36,7114,7115],{"class":998},"\"指针p为：\"",[36,7117,1923],{"class":53},[36,7119,14],{"class":49},[36,7121,1923],{"class":53},[36,7123,1988],{"class":49},[36,7125,7126],{"class":42},"\u002F\u002F指针p表示的就是a的地址\n",[36,7128,7129],{"class":38,"line":2079},[36,7130,194],{"emptyLinePlaceholder":193},[36,7132,7133],{"class":38,"line":2362},[36,7134,7135],{"class":42},"    \u002F\u002F2.使用指针\n",[36,7137,7138],{"class":38,"line":2367},[36,7139,7140],{"class":42},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[36,7142,7143],{"class":38,"line":2373},[36,7144,7145],{"class":42},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[36,7147,7148,7151,7153,7155,7158],{"class":38,"line":2378},[36,7149,7150],{"class":53},"    *",[36,7152,14],{"class":49},[36,7154,54],{"class":53},[36,7156,7157],{"class":60},"1000",[36,7159,2040],{"class":49},[36,7161,7162,7164,7167,7169,7171,7173],{"class":38,"line":2392},[36,7163,2301],{"class":49},[36,7165,7166],{"class":53},"\u003C\u003C*",[36,7168,14],{"class":49},[36,7170,1923],{"class":53},[36,7172,1988],{"class":49},[36,7174,7175],{"class":42},"\u002F\u002F1000\n",[36,7177,7178,7180,7182,7184,7186,7188],{"class":38,"line":2397},[36,7179,2301],{"class":49},[36,7181,1923],{"class":53},[36,7183,50],{"class":49},[36,7185,1923],{"class":53},[36,7187,1988],{"class":49},[36,7189,7175],{"class":42},[36,7191,7192],{"class":38,"line":2403},[36,7193,2315],{"class":49},[21,7195,7197],{"id":7196},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,7199,7200],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,7202,7203],{},"在32位操作系统下：占用4个字节空间",[14,7205,7206],{},"在64位操作系统下：占用8个字节空间",[14,7208,7209],{},"上方是不管啥数据类型的",[26,7211,7213],{"className":889,"code":7212,"language":891,"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,7214,7215,7223,7227,7232,7244,7249,7254,7259,7272,7294,7320,7346],{"__ignoreMap":31},[36,7216,7217,7219,7221],{"class":38,"line":39},[36,7218,904],{"class":53},[36,7220,2723],{"class":2713},[36,7222,2726],{"class":49},[36,7224,7225],{"class":38,"line":46},[36,7226,2296],{"class":49},[36,7228,7229],{"class":38,"line":78},[36,7230,7231],{"class":42},"    \u002F\u002F指针所占内存空间\n",[36,7233,7234,7236,7238,7240,7242],{"class":38,"line":125},[36,7235,2735],{"class":53},[36,7237,2148],{"class":49},[36,7239,54],{"class":53},[36,7241,332],{"class":60},[36,7243,2040],{"class":49},[36,7245,7246],{"class":38,"line":131},[36,7247,7248],{"class":42},"    \u002F\u002Fint *p;\n",[36,7250,7251],{"class":38,"line":396},[36,7252,7253],{"class":42},"    \u002F\u002Fp=&a;\n",[36,7255,7256],{"class":38,"line":407},[36,7257,7258],{"class":42},"    \u002F\u002F上述可以写为以下：\n",[36,7260,7261,7263,7266,7268,7270],{"class":38,"line":2061},[36,7262,2735],{"class":53},[36,7264,7265],{"class":53}," *",[36,7267,14],{"class":49},[36,7269,7086],{"class":53},[36,7271,6944],{"class":49},[36,7273,7274,7277,7279,7282,7284,7287,7289,7291],{"class":38,"line":2067},[36,7275,7276],{"class":49},"    cout ",[36,7278,1923],{"class":53},[36,7280,7281],{"class":998},"\"sizeof(int *)\"",[36,7283,2122],{"class":53},[36,7285,7286],{"class":49},"(p)",[36,7288,1923],{"class":53},[36,7290,1988],{"class":49},[36,7292,7293],{"class":42},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[36,7295,7296,7298,7300,7302,7304,7306,7308,7310,7312,7314,7317],{"class":38,"line":2079},[36,7297,7276],{"class":49},[36,7299,1923],{"class":53},[36,7301,7281],{"class":998},[36,7303,2122],{"class":53},[36,7305,901],{"class":49},[36,7307,904],{"class":53},[36,7309,7265],{"class":53},[36,7311,1314],{"class":49},[36,7313,1923],{"class":53},[36,7315,7316],{"class":49},"endl",[36,7318,7319],{"class":42},"  \u002F\u002F4字节(32位的话)\n",[36,7321,7322,7324,7326,7329,7331,7333,7335,7337,7339,7341,7343],{"class":38,"line":2362},[36,7323,7276],{"class":49},[36,7325,1923],{"class":53},[36,7327,7328],{"class":998},"\"sizeof(char *)\"",[36,7330,2122],{"class":53},[36,7332,901],{"class":49},[36,7334,990],{"class":53},[36,7336,7265],{"class":53},[36,7338,1314],{"class":49},[36,7340,1923],{"class":53},[36,7342,1988],{"class":49},[36,7344,7345],{"class":42}," \u002F\u002F4字节(32位的话)\n",[36,7347,7348],{"class":38,"line":2367},[36,7349,2315],{"class":49},[21,7351,7353],{"id":7352},"_33空指针","3.3空指针",[14,7355,7356],{},"空指针：指针变量指向内存中编号为0的空间",[14,7358,7359],{},"用途：初始化指针变量",[14,7361,7362],{},"注意：空指针指向的内存是不可以访问的",[26,7364,7366],{"className":889,"code":7365,"language":891,"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,7367,7368,7376,7380,7385,7399,7404,7419,7424],{"__ignoreMap":31},[36,7369,7370,7372,7374],{"class":38,"line":39},[36,7371,904],{"class":53},[36,7373,2723],{"class":2713},[36,7375,2726],{"class":49},[36,7377,7378],{"class":38,"line":46},[36,7379,2296],{"class":49},[36,7381,7382],{"class":38,"line":78},[36,7383,7384],{"class":42},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[36,7386,7387,7389,7391,7393,7395,7397],{"class":38,"line":125},[36,7388,2735],{"class":53},[36,7390,7265],{"class":53},[36,7392,14],{"class":49},[36,7394,54],{"class":53},[36,7396,3142],{"class":60},[36,7398,2040],{"class":49},[36,7400,7401],{"class":38,"line":131},[36,7402,7403],{"class":42},"    \u002F\u002F2.空指针不能进行访问\n",[36,7405,7406,7408,7410,7412,7414,7416],{"class":38,"line":396},[36,7407,7150],{"class":53},[36,7409,14],{"class":49},[36,7411,54],{"class":53},[36,7413,67],{"class":60},[36,7415,952],{"class":49},[36,7417,7418],{"class":42},"\u002F\u002F直接报错，压根不能访问\n",[36,7420,7421],{"class":38,"line":407},[36,7422,7423],{"class":42},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[36,7425,7426],{"class":38,"line":2061},[36,7427,2315],{"class":49},[21,7429,7431],{"id":7430},"_34野指针","3.4野指针",[14,7433,7434],{},[1043,7435,7436],{},"指针变量指向非法的内存空间",[26,7438,7440],{"className":889,"code":7439,"language":891,"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,7441,7442,7450,7454,7483,7488,7500],{"__ignoreMap":31},[36,7443,7444,7446,7448],{"class":38,"line":39},[36,7445,904],{"class":53},[36,7447,2723],{"class":2713},[36,7449,2726],{"class":49},[36,7451,7452],{"class":38,"line":46},[36,7453,2296],{"class":49},[36,7455,7456,7458,7460,7462,7464,7466,7468,7470,7472,7475,7478,7480],{"class":38,"line":78},[36,7457,2735],{"class":53},[36,7459,7265],{"class":53},[36,7461,14],{"class":49},[36,7463,54],{"class":53},[36,7465,901],{"class":49},[36,7467,904],{"class":53},[36,7469,7265],{"class":53},[36,7471,1314],{"class":49},[36,7473,7474],{"class":53},"0x",[36,7476,7477],{"class":60},"1100",[36,7479,952],{"class":49},[36,7481,7482],{"class":42}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[36,7484,7485],{"class":38,"line":125},[36,7486,7487],{"class":42},"    \u002F\u002F访问野指针报错\n",[36,7489,7490,7492,7494,7496,7498],{"class":38,"line":131},[36,7491,2301],{"class":49},[36,7493,7166],{"class":53},[36,7495,14],{"class":49},[36,7497,1923],{"class":53},[36,7499,1945],{"class":49},[36,7501,7502],{"class":38,"line":396},[36,7503,2315],{"class":49},[14,7505,7506],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[21,7508,7510],{"id":7509},"_35const修饰指针","3.5const修饰指针",[14,7512,7513],{},"三种情况：",[1886,7515,7516,7519,7522],{},[854,7517,7518],{},"const修饰指针 常量指针",[854,7520,7521],{},"const修饰常量 指针常量",[854,7523,7524],{},"const即修饰指针，又修饰常量",[851,7526,7527],{},[854,7528,7529],{},"常量指针",[26,7531,7533],{"className":889,"code":7532,"language":891,"meta":31,"style":31},"const int *p=&a;\n",[33,7534,7535],{"__ignoreMap":31},[36,7536,7537,7540,7542,7544,7546,7548],{"class":38,"line":39},[36,7538,7539],{"class":53},"const",[36,7541,3132],{"class":53},[36,7543,7265],{"class":53},[36,7545,14],{"class":49},[36,7547,7086],{"class":53},[36,7549,6944],{"class":49},[14,7551,7552],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[851,7554,7555],{"start":46},[854,7556,7557],{},"指针常量",[26,7559,7561],{"className":889,"code":7560,"language":891,"meta":31,"style":31},"int *const p=&a;\n",[33,7562,7563],{"__ignoreMap":31},[36,7564,7565,7567,7570,7573,7575],{"class":38,"line":39},[36,7566,904],{"class":53},[36,7568,7569],{"class":53}," *const",[36,7571,7572],{"class":49}," p",[36,7574,7086],{"class":53},[36,7576,6944],{"class":49},[14,7578,7579],{},"指针的指向不可以改，指针指向的值可以改",[851,7581,7582],{"start":78},[854,7583,7524],{},[26,7585,7587],{"className":889,"code":7586,"language":891,"meta":31,"style":31},"const int *const p=&a;\n",[33,7588,7589],{"__ignoreMap":31},[36,7590,7591,7593,7595,7597,7599,7601],{"class":38,"line":39},[36,7592,7539],{"class":53},[36,7594,3132],{"class":53},[36,7596,7569],{"class":53},[36,7598,7572],{"class":49},[36,7600,7086],{"class":53},[36,7602,6944],{"class":49},[14,7604,7605],{},"指针的指向和指针指向的值都不可以改变",[21,7607,7609],{"id":7608},"_36指针和数组","3.6指针和数组",[26,7611,7613],{"className":889,"code":7612,"language":891,"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,7614,7615,7623,7627,7632,7686,7707,7723,7739,7750,7767,7772,7786,7812,7816,7828,7837,7841],{"__ignoreMap":31},[36,7616,7617,7619,7621],{"class":38,"line":39},[36,7618,904],{"class":53},[36,7620,2723],{"class":2713},[36,7622,2726],{"class":49},[36,7624,7625],{"class":38,"line":46},[36,7626,2296],{"class":49},[36,7628,7629],{"class":38,"line":78},[36,7630,7631],{"class":42},"    \u002F\u002F利用指针访问数组中的元素\n",[36,7633,7634,7636,7638,7640,7642,7644,7646,7648,7650,7652,7654,7656,7658,7660,7662,7664,7666,7668,7670,7672,7674,7676,7678,7680,7682,7684],{"class":38,"line":125},[36,7635,2735],{"class":53},[36,7637,4711],{"class":49},[36,7639,332],{"class":60},[36,7641,1819],{"class":49},[36,7643,54],{"class":53},[36,7645,1775],{"class":49},[36,7647,61],{"class":60},[36,7649,64],{"class":49},[36,7651,181],{"class":60},[36,7653,64],{"class":49},[36,7655,162],{"class":60},[36,7657,64],{"class":49},[36,7659,186],{"class":60},[36,7661,64],{"class":49},[36,7663,157],{"class":60},[36,7665,64],{"class":49},[36,7667,1230],{"class":60},[36,7669,64],{"class":49},[36,7671,1255],{"class":60},[36,7673,64],{"class":49},[36,7675,1280],{"class":60},[36,7677,64],{"class":49},[36,7679,1305],{"class":60},[36,7681,64],{"class":49},[36,7683,332],{"class":60},[36,7685,4744],{"class":49},[36,7687,7688,7690,7692,7695,7697,7699,7701,7703,7705],{"class":38,"line":131},[36,7689,2301],{"class":49},[36,7691,1923],{"class":53},[36,7693,7694],{"class":998},"\"数组的第一个元素为：\"",[36,7696,1923],{"class":53},[36,7698,4655],{"class":49},[36,7700,643],{"class":60},[36,7702,1819],{"class":49},[36,7704,1923],{"class":53},[36,7706,1945],{"class":49},[36,7708,7709,7711,7713,7715,7717,7720],{"class":38,"line":396},[36,7710,2735],{"class":53},[36,7712,7265],{"class":53},[36,7714,14],{"class":49},[36,7716,54],{"class":53},[36,7718,7719],{"class":49},"arr;",[36,7721,7722],{"class":42},"\u002F\u002F注意数才要加取地址符号&\n",[36,7724,7725,7727,7729,7731,7733,7735,7737],{"class":38,"line":407},[36,7726,2301],{"class":49},[36,7728,1923],{"class":53},[36,7730,7694],{"class":998},[36,7732,7166],{"class":53},[36,7734,14],{"class":49},[36,7736,1923],{"class":53},[36,7738,1945],{"class":49},[36,7740,7741,7743,7745,7747],{"class":38,"line":2061},[36,7742,7083],{"class":49},[36,7744,3042],{"class":53},[36,7746,952],{"class":49},[36,7748,7749],{"class":42}," \u002F\u002F让指针向后偏移4个字节\n",[36,7751,7752,7754,7756,7759,7761,7763,7765],{"class":38,"line":2067},[36,7753,2301],{"class":49},[36,7755,1923],{"class":53},[36,7757,7758],{"class":998},"\"数组的第二个元素为：\"",[36,7760,7166],{"class":53},[36,7762,14],{"class":49},[36,7764,1923],{"class":53},[36,7766,1945],{"class":49},[36,7768,7769],{"class":38,"line":2079},[36,7770,7771],{"class":42},"    \u002F\u002F利用指针遍历数组\n",[36,7773,7774,7776,7778,7781,7783],{"class":38,"line":2362},[36,7775,2735],{"class":53},[36,7777,7265],{"class":53},[36,7779,7780],{"class":49},"p2",[36,7782,54],{"class":53},[36,7784,7785],{"class":49},"arr;\n",[36,7787,7788,7790,7792,7794,7796,7798,7800,7802,7804,7806,7808,7810],{"class":38,"line":2367},[36,7789,3950],{"class":53},[36,7791,2408],{"class":49},[36,7793,904],{"class":53},[36,7795,3781],{"class":49},[36,7797,54],{"class":53},[36,7799,643],{"class":60},[36,7801,3788],{"class":49},[36,7803,1789],{"class":53},[36,7805,332],{"class":60},[36,7807,3788],{"class":49},[36,7809,3042],{"class":53},[36,7811,75],{"class":49},[36,7813,7814],{"class":38,"line":2373},[36,7815,2780],{"class":49},[36,7817,7818,7820,7822,7824,7826],{"class":38,"line":2378},[36,7819,4200],{"class":49},[36,7821,7166],{"class":53},[36,7823,7780],{"class":49},[36,7825,1923],{"class":53},[36,7827,1945],{"class":49},[36,7829,7830,7833,7835],{"class":38,"line":2392},[36,7831,7832],{"class":49},"        p2",[36,7834,3042],{"class":53},[36,7836,2040],{"class":49},[36,7838,7839],{"class":38,"line":2397},[36,7840,2937],{"class":49},[36,7842,7843],{"class":38,"line":2403},[36,7844,2315],{"class":49},[21,7846,7848],{"id":7847},"_37指针和函数","3.7指针和函数",[14,7850,7851],{},"利用指针做函数参数，可以修改实参的值",[14,7853,7854],{},"值传递：只改变形参，不改变实参",[14,7856,7857],{},"地址传递：",[26,7859,7861],{"className":889,"code":7860,"language":891,"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,7862,7863,7888,7892,7904,7915,7925,7929,7937,7941,7953,7965,7970,7986,8001,8016],{"__ignoreMap":31},[36,7864,7865,7867,7869,7871,7873,7875,7878,7880,7882,7884,7886],{"class":38,"line":39},[36,7866,6111],{"class":53},[36,7868,6114],{"class":2713},[36,7870,901],{"class":49},[36,7872,904],{"class":53},[36,7874,7265],{"class":53},[36,7876,7877],{"class":416},"p1",[36,7879,64],{"class":49},[36,7881,904],{"class":53},[36,7883,7265],{"class":53},[36,7885,7780],{"class":416},[36,7887,75],{"class":49},[36,7889,7890],{"class":38,"line":46},[36,7891,2296],{"class":49},[36,7893,7894,7896,7898,7901],{"class":38,"line":78},[36,7895,2735],{"class":53},[36,7897,5004],{"class":49},[36,7899,7900],{"class":53},"=*",[36,7902,7903],{"class":49},"p1;\n",[36,7905,7906,7908,7910,7912],{"class":38,"line":125},[36,7907,7150],{"class":53},[36,7909,7877],{"class":49},[36,7911,7900],{"class":53},[36,7913,7914],{"class":49},"p2;\n",[36,7916,7917,7919,7921,7923],{"class":38,"line":131},[36,7918,7150],{"class":53},[36,7920,7780],{"class":49},[36,7922,54],{"class":53},[36,7924,5029],{"class":49},[36,7926,7927],{"class":38,"line":396},[36,7928,2315],{"class":49},[36,7930,7931,7933,7935],{"class":38,"line":407},[36,7932,904],{"class":53},[36,7934,2723],{"class":2713},[36,7936,2726],{"class":49},[36,7938,7939],{"class":38,"line":2061},[36,7940,2296],{"class":49},[36,7942,7943,7945,7947,7949,7951],{"class":38,"line":2067},[36,7944,2735],{"class":53},[36,7946,2148],{"class":49},[36,7948,54],{"class":53},[36,7950,332],{"class":60},[36,7952,2040],{"class":49},[36,7954,7955,7957,7959,7961,7963],{"class":38,"line":2079},[36,7956,2735],{"class":53},[36,7958,3582],{"class":49},[36,7960,54],{"class":53},[36,7962,72],{"class":60},[36,7964,2040],{"class":49},[36,7966,7967],{"class":38,"line":2362},[36,7968,7969],{"class":42},"    \u002F\u002F地址传递\n",[36,7971,7972,7974,7976,7978,7981,7983],{"class":38,"line":2367},[36,7973,6308],{"class":2713},[36,7975,901],{"class":49},[36,7977,1239],{"class":53},[36,7979,7980],{"class":49},"a,",[36,7982,1239],{"class":53},[36,7984,7985],{"class":49},"b);\n",[36,7987,7988,7990,7992,7994,7996,7998],{"class":38,"line":2373},[36,7989,2301],{"class":49},[36,7991,1923],{"class":53},[36,7993,50],{"class":49},[36,7995,1923],{"class":53},[36,7997,1988],{"class":49},[36,7999,8000],{"class":42},"\u002F\u002F20\n",[36,8002,8003,8005,8007,8009,8011,8013],{"class":38,"line":2378},[36,8004,2301],{"class":49},[36,8006,1923],{"class":53},[36,8008,321],{"class":49},[36,8010,1923],{"class":53},[36,8012,1988],{"class":49},[36,8014,8015],{"class":42},"\u002F\u002F10\n",[36,8017,8018],{"class":38,"line":2392},[36,8019,2315],{"class":49},[14,8021,8022],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[21,8024,8026],{"id":8025},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,8028,8029],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,8031,8032,8033,8035],{},"例如数组：int arr",[36,8034,332],{},"={4,3,6,9,1,2,10,8,7,5}",[26,8037,8039],{"className":889,"code":8038,"language":891,"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,8040,8041,8047,8057,8081,8085,8116,8120,8154,8158,8176,8180,8191,8206,8221,8225,8229,8233,8237,8241,8249,8253,8258,8312,8324,8336,8341,8349,8353,8358,8383,8387,8402,8411,8415],{"__ignoreMap":31},[36,8042,8043,8045],{"class":38,"line":39},[36,8044,2699],{"class":53},[36,8046,2702],{"class":998},[36,8048,8049,8051,8053,8055],{"class":38,"line":46},[36,8050,2707],{"class":53},[36,8052,2710],{"class":53},[36,8054,2714],{"class":2713},[36,8056,2040],{"class":49},[36,8058,8059,8061,8064,8066,8068,8070,8072,8074,8076,8079],{"class":38,"line":78},[36,8060,6111],{"class":53},[36,8062,8063],{"class":2713}," bubbleSort",[36,8065,901],{"class":49},[36,8067,904],{"class":53},[36,8069,7265],{"class":53},[36,8071,14],{"class":416},[36,8073,64],{"class":49},[36,8075,904],{"class":53},[36,8077,8078],{"class":416}," len",[36,8080,75],{"class":49},[36,8082,8083],{"class":38,"line":125},[36,8084,2296],{"class":49},[36,8086,8087,8089,8091,8093,8095,8097,8099,8101,8103,8106,8108,8110,8112,8114],{"class":38,"line":131},[36,8088,3950],{"class":53},[36,8090,901],{"class":49},[36,8092,904],{"class":53},[36,8094,3781],{"class":49},[36,8096,54],{"class":53},[36,8098,643],{"class":60},[36,8100,3788],{"class":49},[36,8102,1789],{"class":53},[36,8104,8105],{"class":49},"len",[36,8107,1414],{"class":53},[36,8109,61],{"class":60},[36,8111,3788],{"class":49},[36,8113,3042],{"class":53},[36,8115,75],{"class":49},[36,8117,8118],{"class":38,"line":396},[36,8119,2780],{"class":49},[36,8121,8122,8124,8126,8128,8130,8132,8134,8136,8138,8140,8142,8144,8146,8148,8150,8152],{"class":38,"line":407},[36,8123,4152],{"class":53},[36,8125,901],{"class":49},[36,8127,904],{"class":53},[36,8129,4159],{"class":49},[36,8131,54],{"class":53},[36,8133,643],{"class":60},[36,8135,4166],{"class":49},[36,8137,1789],{"class":53},[36,8139,8105],{"class":49},[36,8141,1414],{"class":53},[36,8143,1326],{"class":49},[36,8145,1414],{"class":53},[36,8147,61],{"class":60},[36,8149,4166],{"class":49},[36,8151,3042],{"class":53},[36,8153,75],{"class":49},[36,8155,8156],{"class":38,"line":2061},[36,8157,3259],{"class":49},[36,8159,8160,8162,8165,8167,8170,8172,8174],{"class":38,"line":2067},[36,8161,5391],{"class":53},[36,8163,8164],{"class":49},"(p[j]",[36,8166,1839],{"class":53},[36,8168,8169],{"class":49},"p[j",[36,8171,1365],{"class":53},[36,8173,61],{"class":60},[36,8175,165],{"class":49},[36,8177,8178],{"class":38,"line":2079},[36,8179,5410],{"class":49},[36,8181,8182,8184,8186,8188],{"class":38,"line":2362},[36,8183,5415],{"class":53},[36,8185,5004],{"class":49},[36,8187,54],{"class":53},[36,8189,8190],{"class":49},"p[j];\n",[36,8192,8193,8196,8198,8200,8202,8204],{"class":38,"line":2367},[36,8194,8195],{"class":49},"                p[j]",[36,8197,54],{"class":53},[36,8199,8169],{"class":49},[36,8201,1365],{"class":53},[36,8203,61],{"class":60},[36,8205,5438],{"class":49},[36,8207,8208,8211,8213,8215,8217,8219],{"class":38,"line":2373},[36,8209,8210],{"class":49},"                p[j",[36,8212,1365],{"class":53},[36,8214,61],{"class":60},[36,8216,1819],{"class":49},[36,8218,54],{"class":53},[36,8220,5029],{"class":49},[36,8222,8223],{"class":38,"line":2378},[36,8224,5458],{"class":49},[36,8226,8227],{"class":38,"line":2392},[36,8228,3278],{"class":49},[36,8230,8231],{"class":38,"line":2397},[36,8232,2937],{"class":49},[36,8234,8235],{"class":38,"line":2403},[36,8236,2315],{"class":49},[36,8238,8239],{"class":38,"line":2424},[36,8240,194],{"emptyLinePlaceholder":193},[36,8242,8243,8245,8247],{"class":38,"line":2429},[36,8244,904],{"class":53},[36,8246,2723],{"class":2713},[36,8248,2726],{"class":49},[36,8250,8251],{"class":38,"line":2443},[36,8252,2296],{"class":49},[36,8254,8255],{"class":38,"line":2448},[36,8256,8257],{"class":42},"    \u002F\u002F 1.创建数组\n",[36,8259,8260,8262,8264,8266,8268,8270,8272,8274,8276,8278,8280,8282,8284,8286,8288,8290,8292,8294,8296,8298,8300,8302,8304,8306,8308,8310],{"class":38,"line":2477},[36,8261,2735],{"class":53},[36,8263,4711],{"class":49},[36,8265,332],{"class":60},[36,8267,1819],{"class":49},[36,8269,54],{"class":53},[36,8271,1775],{"class":49},[36,8273,186],{"class":60},[36,8275,64],{"class":49},[36,8277,162],{"class":60},[36,8279,64],{"class":49},[36,8281,1230],{"class":60},[36,8283,64],{"class":49},[36,8285,1305],{"class":60},[36,8287,64],{"class":49},[36,8289,61],{"class":60},[36,8291,64],{"class":49},[36,8293,181],{"class":60},[36,8295,64],{"class":49},[36,8297,332],{"class":60},[36,8299,64],{"class":49},[36,8301,1280],{"class":60},[36,8303,64],{"class":49},[36,8305,1255],{"class":60},[36,8307,64],{"class":49},[36,8309,157],{"class":60},[36,8311,4744],{"class":49},[36,8313,8314,8316,8318,8320,8322],{"class":38,"line":2482},[36,8315,2735],{"class":53},[36,8317,8078],{"class":49},[36,8319,54],{"class":53},[36,8321,332],{"class":60},[36,8323,2040],{"class":49},[36,8325,8326,8328,8330,8332,8334],{"class":38,"line":2499},[36,8327,2735],{"class":53},[36,8329,7265],{"class":53},[36,8331,14],{"class":49},[36,8333,54],{"class":53},[36,8335,7785],{"class":49},[36,8337,8338],{"class":38,"line":2504},[36,8339,8340],{"class":42},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[36,8342,8343,8346],{"class":38,"line":2509},[36,8344,8345],{"class":2713},"    bubbleSort",[36,8347,8348],{"class":49},"(p,len);\n",[36,8350,8351],{"class":38,"line":2514},[36,8352,194],{"emptyLinePlaceholder":193},[36,8354,8355],{"class":38,"line":2528},[36,8356,8357],{"class":42},"    \u002F\u002F 3.打印排序后的数组\n",[36,8359,8360,8362,8364,8366,8368,8370,8372,8374,8376,8379,8381],{"class":38,"line":2533},[36,8361,3950],{"class":53},[36,8363,2408],{"class":49},[36,8365,904],{"class":53},[36,8367,3781],{"class":49},[36,8369,54],{"class":53},[36,8371,643],{"class":60},[36,8373,3963],{"class":49},[36,8375,1789],{"class":53},[36,8377,8378],{"class":49},"len; i",[36,8380,3042],{"class":53},[36,8382,75],{"class":49},[36,8384,8385],{"class":38,"line":3326},[36,8386,2780],{"class":49},[36,8388,8389,8391,8393,8395,8397,8400],{"class":38,"line":3340},[36,8390,4200],{"class":49},[36,8392,7166],{"class":53},[36,8394,14],{"class":49},[36,8396,1923],{"class":53},[36,8398,8399],{"class":998},"\"\"",[36,8401,2040],{"class":49},[36,8403,8404,8407,8409],{"class":38,"line":3348},[36,8405,8406],{"class":49},"        p",[36,8408,3042],{"class":53},[36,8410,2040],{"class":49},[36,8412,8413],{"class":38,"line":3353},[36,8414,2937],{"class":49},[36,8416,8417],{"class":38,"line":3359},[36,8418,2315],{"class":49},[807,8420,8421],{},"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":46,"depth":46,"links":8423},[8424,8425,8426,8427,8428,8429,8430,8431],{"id":7030,"depth":46,"text":7031},{"id":7196,"depth":46,"text":7197},{"id":7352,"depth":46,"text":7353},{"id":7430,"depth":46,"text":7431},{"id":7509,"depth":46,"text":7510},{"id":7608,"depth":46,"text":7609},{"id":7847,"depth":46,"text":7848},{"id":8025,"depth":46,"text":8026},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":7019,"description":7027},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8438,"title":8439,"body":8440,"description":8447,"extension":824,"meta":11421,"navigation":193,"path":11422,"seo":11423,"stem":11424,"__hash__":11425},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8441,"toc":11412},[8442,8445,8448,8452,8455,8458,8469,8807,8810,8814,8817,8824,9079,9083,9086,9089,9244,9248,9251,9254,9460,9464,9467,9770,9773,9781,9785,9788,9939,9941,9952,10009,10013,10018,10675,10683,10686,10780,10783,11403,11409],[10,8443,8439],{"id":8444},"_4结构体",[14,8446,8447],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[21,8449,8451],{"id":8450},"_41结构体定义与使用","4.1结构体定义与使用",[14,8453,8454],{},"语法：struct 结构体名 {结构体成员列表}；",[14,8456,8457],{},"通过结构体创建变量的方式：",[1886,8459,8460,8463,8466],{},[854,8461,8462],{},"struct 结构体名 变量名",[854,8464,8465],{},"struct 结构体名 变量名={成员1值，成员2值...}",[854,8467,8468],{},"定义结构体时顺便创建变量",[26,8470,8472],{"className":889,"code":8471,"language":891,"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,8473,8474,8480,8490,8497,8502,8510,8514,8519,8523,8528,8533,8538,8545,8550,8557,8561,8568,8572,8576,8580,8584,8588,8592,8598,8602,8608,8616,8624,8628,8633,8638,8649,8654,8666,8677,8688,8693,8717,8722,8728,8755,8760,8766,8778,8790,8802],{"__ignoreMap":31},[36,8475,8476,8478],{"class":38,"line":39},[36,8477,2699],{"class":53},[36,8479,2702],{"class":998},[36,8481,8482,8484,8486,8488],{"class":38,"line":46},[36,8483,2707],{"class":53},[36,8485,2710],{"class":53},[36,8487,2714],{"class":2713},[36,8489,2040],{"class":49},[36,8491,8492,8494],{"class":38,"line":78},[36,8493,2699],{"class":53},[36,8495,8496],{"class":998},"\u003Cstring>\n",[36,8498,8499],{"class":38,"line":125},[36,8500,8501],{"class":42},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[36,8503,8504,8507],{"class":38,"line":131},[36,8505,8506],{"class":53},"struct",[36,8508,8509],{"class":2713}," Student\n",[36,8511,8512],{"class":38,"line":396},[36,8513,2296],{"class":49},[36,8515,8516],{"class":38,"line":407},[36,8517,8518],{"class":42},"    \u002F\u002F成员列表\n",[36,8520,8521],{"class":38,"line":2061},[36,8522,194],{"emptyLinePlaceholder":193},[36,8524,8525],{"class":38,"line":2067},[36,8526,8527],{"class":42},"    \u002F\u002F姓名\n",[36,8529,8530],{"class":38,"line":2079},[36,8531,8532],{"class":49},"    string name;\n",[36,8534,8535],{"class":38,"line":2362},[36,8536,8537],{"class":42},"    \u002F\u002F年龄\n",[36,8539,8540,8542],{"class":38,"line":2367},[36,8541,2735],{"class":53},[36,8543,8544],{"class":49}," age;\n",[36,8546,8547],{"class":38,"line":2373},[36,8548,8549],{"class":42},"    \u002F\u002F分数\n",[36,8551,8552,8554],{"class":38,"line":2378},[36,8553,2735],{"class":53},[36,8555,8556],{"class":49}," score;\n",[36,8558,8559],{"class":38,"line":2392},[36,8560,4744],{"class":49},[36,8562,8563,8565],{"class":38,"line":2397},[36,8564,8506],{"class":53},[36,8566,8567],{"class":2713}," School\n",[36,8569,8570],{"class":38,"line":2403},[36,8571,2296],{"class":49},[36,8573,8574],{"class":38,"line":2424},[36,8575,8518],{"class":42},[36,8577,8578],{"class":38,"line":2429},[36,8579,194],{"emptyLinePlaceholder":193},[36,8581,8582],{"class":38,"line":2443},[36,8583,8527],{"class":42},[36,8585,8586],{"class":38,"line":2448},[36,8587,8532],{"class":49},[36,8589,8590],{"class":38,"line":2477},[36,8591,8537],{"class":42},[36,8593,8594,8596],{"class":38,"line":2482},[36,8595,2735],{"class":53},[36,8597,8544],{"class":49},[36,8599,8600],{"class":38,"line":2499},[36,8601,8549],{"class":42},[36,8603,8604,8606],{"class":38,"line":2504},[36,8605,2735],{"class":53},[36,8607,8556],{"class":49},[36,8609,8610,8613],{"class":38,"line":2509},[36,8611,8612],{"class":49},"} s3;",[36,8614,8615],{"class":42}," \u002F\u002F创建结构体时就创建了变量\n",[36,8617,8618,8620,8622],{"class":38,"line":2514},[36,8619,904],{"class":53},[36,8621,2723],{"class":2713},[36,8623,2726],{"class":49},[36,8625,8626],{"class":38,"line":2528},[36,8627,2296],{"class":49},[36,8629,8630],{"class":38,"line":2533},[36,8631,8632],{"class":42},"    \u002F\u002F2.通过学生类型创建具体学生\n",[36,8634,8635],{"class":38,"line":3326},[36,8636,8637],{"class":42},"    \u002F\u002F2.1 struct Student s1;\n",[36,8639,8640,8643,8646],{"class":38,"line":3340},[36,8641,8642],{"class":53},"    struct",[36,8644,8645],{"class":2713}," Student",[36,8647,8648],{"class":49}," s1;\n",[36,8650,8651],{"class":38,"line":3348},[36,8652,8653],{"class":42},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[36,8655,8656,8659,8661,8664],{"class":38,"line":3353},[36,8657,8658],{"class":49},"    s1.name",[36,8660,54],{"class":53},[36,8662,8663],{"class":998},"\"张三\"",[36,8665,2040],{"class":49},[36,8667,8668,8671,8673,8675],{"class":38,"line":3359},[36,8669,8670],{"class":49},"    s1.age",[36,8672,54],{"class":53},[36,8674,1532],{"class":60},[36,8676,2040],{"class":49},[36,8678,8679,8682,8684,8686],{"class":38,"line":3365},[36,8680,8681],{"class":49},"    s1.score",[36,8683,54],{"class":53},[36,8685,1144],{"class":60},[36,8687,2040],{"class":49},[36,8689,8690],{"class":38,"line":3370},[36,8691,8692],{"class":42},"    \u002F\u002F输出结果\n",[36,8694,8696,8698,8700,8703,8705,8708,8710,8713,8715],{"class":38,"line":8695},37,[36,8697,2301],{"class":49},[36,8699,1923],{"class":53},[36,8701,8702],{"class":49},"s1.name",[36,8704,1923],{"class":53},[36,8706,8707],{"class":49},"s1.age",[36,8709,1923],{"class":53},[36,8711,8712],{"class":49},"s1.score",[36,8714,1923],{"class":53},[36,8716,1945],{"class":49},[36,8718,8720],{"class":38,"line":8719},38,[36,8721,194],{"emptyLinePlaceholder":193},[36,8723,8725],{"class":38,"line":8724},39,[36,8726,8727],{"class":42},"    \u002F\u002F2.2 struct Student s2={...}\n",[36,8729,8731,8733,8735,8738,8740,8742,8745,8747,8749,8751,8753],{"class":38,"line":8730},40,[36,8732,8642],{"class":53},[36,8734,8645],{"class":2713},[36,8736,8737],{"class":49}," s2",[36,8739,54],{"class":53},[36,8741,1775],{"class":49},[36,8743,8744],{"class":998},"\"王五\"",[36,8746,64],{"class":49},[36,8748,1532],{"class":60},[36,8750,64],{"class":49},[36,8752,1144],{"class":60},[36,8754,4744],{"class":49},[36,8756,8758],{"class":38,"line":8757},41,[36,8759,194],{"emptyLinePlaceholder":193},[36,8761,8763],{"class":38,"line":8762},42,[36,8764,8765],{"class":42},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[36,8767,8769,8772,8774,8776],{"class":38,"line":8768},43,[36,8770,8771],{"class":49},"    s3.name",[36,8773,54],{"class":53},[36,8775,4427],{"class":998},[36,8777,2040],{"class":49},[36,8779,8781,8784,8786,8788],{"class":38,"line":8780},44,[36,8782,8783],{"class":49},"    s3.age",[36,8785,54],{"class":53},[36,8787,1532],{"class":60},[36,8789,2040],{"class":49},[36,8791,8793,8796,8798,8800],{"class":38,"line":8792},45,[36,8794,8795],{"class":49},"    s3.score",[36,8797,54],{"class":53},[36,8799,72],{"class":60},[36,8801,2040],{"class":49},[36,8803,8805],{"class":38,"line":8804},46,[36,8806,2315],{"class":49},[14,8808,8809],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[21,8811,8813],{"id":8812},"_42结构体数组","4.2结构体数组",[14,8815,8816],{},"将自定义的结构体放入到数组中方便维护",[14,8818,8819,8820,8823],{},"语法：struct 结构体名 数组名",[36,8821,8822],{},"元素个数","={ {}，{},...{} };",[26,8825,8827],{"className":889,"code":8826,"language":891,"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,8828,8829,8835,8845,8851,8856,8862,8866,8870,8876,8882,8886,8890,8898,8902,8907,8922,8926,8942,8958,8962,8967,8983,8998,9013,9018,9044,9048,9071,9075],{"__ignoreMap":31},[36,8830,8831,8833],{"class":38,"line":39},[36,8832,2699],{"class":53},[36,8834,2702],{"class":998},[36,8836,8837,8839,8841,8843],{"class":38,"line":46},[36,8838,2707],{"class":53},[36,8840,2710],{"class":53},[36,8842,2714],{"class":2713},[36,8844,2040],{"class":49},[36,8846,8847,8849],{"class":38,"line":78},[36,8848,2699],{"class":53},[36,8850,8496],{"class":998},[36,8852,8853],{"class":38,"line":125},[36,8854,8855],{"class":42},"\u002F\u002F1.定义结构体\n",[36,8857,8858,8860],{"class":38,"line":131},[36,8859,8506],{"class":53},[36,8861,8509],{"class":2713},[36,8863,8864],{"class":38,"line":396},[36,8865,2296],{"class":49},[36,8867,8868],{"class":38,"line":407},[36,8869,8532],{"class":49},[36,8871,8872,8874],{"class":38,"line":2061},[36,8873,2735],{"class":53},[36,8875,8544],{"class":49},[36,8877,8878,8880],{"class":38,"line":2067},[36,8879,2735],{"class":53},[36,8881,8556],{"class":49},[36,8883,8884],{"class":38,"line":2079},[36,8885,194],{"emptyLinePlaceholder":193},[36,8887,8888],{"class":38,"line":2362},[36,8889,4744],{"class":49},[36,8891,8892,8894,8896],{"class":38,"line":2367},[36,8893,904],{"class":53},[36,8895,2723],{"class":2713},[36,8897,2726],{"class":49},[36,8899,8900],{"class":38,"line":2373},[36,8901,2296],{"class":49},[36,8903,8904],{"class":38,"line":2378},[36,8905,8906],{"class":42},"    \u002F\u002F2.创建结构体数组\n",[36,8908,8909,8911,8913,8916,8918,8920],{"class":38,"line":2392},[36,8910,8642],{"class":53},[36,8912,8645],{"class":2713},[36,8914,8915],{"class":49}," stuArray[",[36,8917,181],{"class":60},[36,8919,1819],{"class":49},[36,8921,5656],{"class":53},[36,8923,8924],{"class":38,"line":2397},[36,8925,2780],{"class":49},[36,8927,8928,8930,8932,8934,8936,8938,8940],{"class":38,"line":2403},[36,8929,5665],{"class":49},[36,8931,8663],{"class":998},[36,8933,64],{"class":49},[36,8935,1532],{"class":60},[36,8937,64],{"class":49},[36,8939,67],{"class":60},[36,8941,5678],{"class":49},[36,8943,8944,8946,8948,8950,8952,8954,8956],{"class":38,"line":2424},[36,8945,5665],{"class":49},[36,8947,4427],{"class":998},[36,8949,64],{"class":49},[36,8951,1457],{"class":60},[36,8953,64],{"class":49},[36,8955,1457],{"class":60},[36,8957,2315],{"class":49},[36,8959,8960],{"class":38,"line":2429},[36,8961,2937],{"class":49},[36,8963,8964],{"class":38,"line":2443},[36,8965,8966],{"class":42},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[36,8968,8969,8972,8974,8977,8979,8981],{"class":38,"line":2448},[36,8970,8971],{"class":49},"    stuArray[",[36,8973,61],{"class":60},[36,8975,8976],{"class":49},"].name",[36,8978,54],{"class":53},[36,8980,4450],{"class":998},[36,8982,2040],{"class":49},[36,8984,8985,8987,8989,8992,8994,8996],{"class":38,"line":2477},[36,8986,8971],{"class":49},[36,8988,61],{"class":60},[36,8990,8991],{"class":49},"].age",[36,8993,54],{"class":53},[36,8995,181],{"class":60},[36,8997,2040],{"class":49},[36,8999,9000,9002,9004,9007,9009,9011],{"class":38,"line":2482},[36,9001,8971],{"class":49},[36,9003,61],{"class":60},[36,9005,9006],{"class":49},"].score",[36,9008,54],{"class":53},[36,9010,181],{"class":60},[36,9012,2040],{"class":49},[36,9014,9015],{"class":38,"line":2499},[36,9016,9017],{"class":42},"    \u002F\u002F4.遍历结构体数组\n",[36,9019,9020,9022,9024,9026,9028,9030,9032,9034,9036,9038,9040,9042],{"class":38,"line":2504},[36,9021,3950],{"class":53},[36,9023,2408],{"class":49},[36,9025,904],{"class":53},[36,9027,3781],{"class":49},[36,9029,54],{"class":53},[36,9031,643],{"class":60},[36,9033,3788],{"class":49},[36,9035,1789],{"class":53},[36,9037,181],{"class":60},[36,9039,3788],{"class":49},[36,9041,3042],{"class":53},[36,9043,75],{"class":49},[36,9045,9046],{"class":38,"line":2509},[36,9047,2780],{"class":49},[36,9049,9050,9052,9054,9057,9059,9062,9064,9067,9069],{"class":38,"line":2514},[36,9051,4200],{"class":49},[36,9053,1923],{"class":53},[36,9055,9056],{"class":49},"stuArray[i].name",[36,9058,1923],{"class":53},[36,9060,9061],{"class":49},"stuArray[i].age",[36,9063,1923],{"class":53},[36,9065,9066],{"class":49},"stuArray[i].score",[36,9068,1923],{"class":53},[36,9070,1945],{"class":49},[36,9072,9073],{"class":38,"line":2528},[36,9074,2937],{"class":49},[36,9076,9077],{"class":38,"line":2533},[36,9078,2315],{"class":49},[21,9080,9082],{"id":9081},"_43结构体指针","4.3结构体指针",[14,9084,9085],{},"作用：通过指针访问结构体中的成员",[14,9087,9088],{},"利用操作符->可以通过结构体指针访问结构体属性",[26,9090,9092],{"className":889,"code":9091,"language":891,"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,9093,9094,9100,9110,9116,9120,9126,9130,9134,9140,9146,9150,9158,9162,9167,9192,9197,9212,9217,9240],{"__ignoreMap":31},[36,9095,9096,9098],{"class":38,"line":39},[36,9097,2699],{"class":53},[36,9099,2702],{"class":998},[36,9101,9102,9104,9106,9108],{"class":38,"line":46},[36,9103,2707],{"class":53},[36,9105,2710],{"class":53},[36,9107,2714],{"class":2713},[36,9109,2040],{"class":49},[36,9111,9112,9114],{"class":38,"line":78},[36,9113,2699],{"class":53},[36,9115,8496],{"class":998},[36,9117,9118],{"class":38,"line":125},[36,9119,8855],{"class":42},[36,9121,9122,9124],{"class":38,"line":131},[36,9123,8506],{"class":53},[36,9125,8509],{"class":2713},[36,9127,9128],{"class":38,"line":396},[36,9129,2296],{"class":49},[36,9131,9132],{"class":38,"line":407},[36,9133,8532],{"class":49},[36,9135,9136,9138],{"class":38,"line":2061},[36,9137,2735],{"class":53},[36,9139,8544],{"class":49},[36,9141,9142,9144],{"class":38,"line":2067},[36,9143,2735],{"class":53},[36,9145,8556],{"class":49},[36,9147,9148],{"class":38,"line":2079},[36,9149,4744],{"class":49},[36,9151,9152,9154,9156],{"class":38,"line":2362},[36,9153,904],{"class":53},[36,9155,2723],{"class":2713},[36,9157,2726],{"class":49},[36,9159,9160],{"class":38,"line":2367},[36,9161,2296],{"class":49},[36,9163,9164],{"class":38,"line":2373},[36,9165,9166],{"class":42},"    \u002F\u002F创建学生结构体变量\n",[36,9168,9169,9171,9173,9176,9178,9180,9182,9184,9186,9188,9190],{"class":38,"line":2378},[36,9170,8642],{"class":53},[36,9172,8645],{"class":2713},[36,9174,9175],{"class":49}," s",[36,9177,54],{"class":53},[36,9179,1775],{"class":49},[36,9181,8663],{"class":998},[36,9183,64],{"class":49},[36,9185,1532],{"class":60},[36,9187,64],{"class":49},[36,9189,2472],{"class":60},[36,9191,4744],{"class":49},[36,9193,9194],{"class":38,"line":2392},[36,9195,9196],{"class":42},"    \u002F\u002F通过指针指向结构体变量\n",[36,9198,9199,9201,9203,9205,9207,9209],{"class":38,"line":2397},[36,9200,8642],{"class":53},[36,9202,8645],{"class":2713},[36,9204,7265],{"class":53},[36,9206,14],{"class":49},[36,9208,7086],{"class":53},[36,9210,9211],{"class":49},"s\n",[36,9213,9214],{"class":38,"line":2403},[36,9215,9216],{"class":42},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[36,9218,9219,9221,9223,9226,9228,9231,9233,9236,9238],{"class":38,"line":2424},[36,9220,2301],{"class":49},[36,9222,1923],{"class":53},[36,9224,9225],{"class":49},"p->name",[36,9227,1923],{"class":53},[36,9229,9230],{"class":49},"p->age",[36,9232,1923],{"class":53},[36,9234,9235],{"class":49},"p->score",[36,9237,1923],{"class":53},[36,9239,1945],{"class":49},[36,9241,9242],{"class":38,"line":2429},[36,9243,2315],{"class":49},[21,9245,9247],{"id":9246},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,9249,9250],{},"作用：结构体中的成员可以是另一个结构体",[14,9252,9253],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[26,9255,9257],{"className":889,"code":9256,"language":891,"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,9258,9259,9265,9275,9281,9286,9294,9298,9302,9308,9314,9318,9323,9330,9334,9341,9345,9351,9356,9360,9368,9372,9377,9382,9387,9398,9410,9421,9434,9445,9456],{"__ignoreMap":31},[36,9260,9261,9263],{"class":38,"line":39},[36,9262,2699],{"class":53},[36,9264,2702],{"class":998},[36,9266,9267,9269,9271,9273],{"class":38,"line":46},[36,9268,2707],{"class":53},[36,9270,2710],{"class":53},[36,9272,2714],{"class":2713},[36,9274,2040],{"class":49},[36,9276,9277,9279],{"class":38,"line":78},[36,9278,2699],{"class":53},[36,9280,8496],{"class":998},[36,9282,9283],{"class":38,"line":125},[36,9284,9285],{"class":42},"\u002F\u002F定义学生结构体\n",[36,9287,9288,9290,9292],{"class":38,"line":131},[36,9289,8506],{"class":53},[36,9291,8645],{"class":2713},[36,9293,3423],{"class":49},[36,9295,9296],{"class":38,"line":396},[36,9297,2296],{"class":49},[36,9299,9300],{"class":38,"line":407},[36,9301,8532],{"class":49},[36,9303,9304,9306],{"class":38,"line":2061},[36,9305,2735],{"class":53},[36,9307,8544],{"class":49},[36,9309,9310,9312],{"class":38,"line":2067},[36,9311,2735],{"class":53},[36,9313,8556],{"class":49},[36,9315,9316],{"class":38,"line":2079},[36,9317,2315],{"class":49},[36,9319,9320],{"class":38,"line":2362},[36,9321,9322],{"class":42},"\u002F\u002F定义老师结构体\n",[36,9324,9325,9327],{"class":38,"line":2367},[36,9326,8506],{"class":53},[36,9328,9329],{"class":2713}," Teacher\n",[36,9331,9332],{"class":38,"line":2373},[36,9333,2296],{"class":49},[36,9335,9336,9338],{"class":38,"line":2378},[36,9337,2735],{"class":53},[36,9339,9340],{"class":49}," id;\n",[36,9342,9343],{"class":38,"line":2392},[36,9344,8532],{"class":49},[36,9346,9347,9349],{"class":38,"line":2397},[36,9348,2735],{"class":53},[36,9350,8544],{"class":49},[36,9352,9353],{"class":38,"line":2403},[36,9354,9355],{"class":49},"    Student stu;\n",[36,9357,9358],{"class":38,"line":2424},[36,9359,2315],{"class":49},[36,9361,9362,9364,9366],{"class":38,"line":2429},[36,9363,904],{"class":53},[36,9365,2723],{"class":2713},[36,9367,6725],{"class":49},[36,9369,9370],{"class":38,"line":2443},[36,9371,2296],{"class":49},[36,9373,9374],{"class":38,"line":2448},[36,9375,9376],{"class":42},"    \u002F\u002F结构体嵌套结构体\n",[36,9378,9379],{"class":38,"line":2477},[36,9380,9381],{"class":42},"    \u002F\u002F创建老师\n",[36,9383,9384],{"class":38,"line":2482},[36,9385,9386],{"class":49},"    Teacher t;\n",[36,9388,9389,9392,9394,9396],{"class":38,"line":2499},[36,9390,9391],{"class":49},"    t.id",[36,9393,54],{"class":53},[36,9395,67],{"class":60},[36,9397,2040],{"class":49},[36,9399,9400,9403,9405,9408],{"class":38,"line":2504},[36,9401,9402],{"class":49},"    t.name",[36,9404,54],{"class":53},[36,9406,9407],{"class":998},"\"老王\"",[36,9409,2040],{"class":49},[36,9411,9412,9415,9417,9419],{"class":38,"line":2509},[36,9413,9414],{"class":49},"    t.age",[36,9416,54],{"class":53},[36,9418,1532],{"class":60},[36,9420,2040],{"class":49},[36,9422,9423,9426,9428,9431],{"class":38,"line":2514},[36,9424,9425],{"class":49},"    t.stu.name",[36,9427,54],{"class":53},[36,9429,9430],{"class":998},"\"小王\"",[36,9432,9433],{"class":49},"；\n",[36,9435,9436,9439,9441,9443],{"class":38,"line":2528},[36,9437,9438],{"class":49},"    t.stu.age",[36,9440,54],{"class":53},[36,9442,72],{"class":60},[36,9444,2040],{"class":49},[36,9446,9447,9450,9452,9454],{"class":38,"line":2533},[36,9448,9449],{"class":49},"    t.stu.score",[36,9451,54],{"class":53},[36,9453,1230],{"class":60},[36,9455,2040],{"class":49},[36,9457,9458],{"class":38,"line":3326},[36,9459,2315],{"class":49},[21,9461,9463],{"id":9462},"_45结构体做函数参数","4.5结构体做函数参数",[14,9465,9466],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[26,9468,9470],{"className":889,"code":9469,"language":891,"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,9471,9472,9478,9488,9494,9500,9504,9508,9514,9520,9524,9529,9534,9551,9555,9588,9592,9597,9616,9620,9651,9655,9663,9667,9676,9688,9700,9712,9725,9733,9746,9758,9766],{"__ignoreMap":31},[36,9473,9474,9476],{"class":38,"line":39},[36,9475,2699],{"class":53},[36,9477,2702],{"class":998},[36,9479,9480,9482,9484,9486],{"class":38,"line":46},[36,9481,2707],{"class":53},[36,9483,2710],{"class":53},[36,9485,2714],{"class":2713},[36,9487,2040],{"class":49},[36,9489,9490,9492],{"class":38,"line":78},[36,9491,2699],{"class":53},[36,9493,8496],{"class":998},[36,9495,9496,9498],{"class":38,"line":125},[36,9497,8506],{"class":53},[36,9499,8509],{"class":2713},[36,9501,9502],{"class":38,"line":131},[36,9503,2296],{"class":49},[36,9505,9506],{"class":38,"line":396},[36,9507,8532],{"class":49},[36,9509,9510,9512],{"class":38,"line":407},[36,9511,2735],{"class":53},[36,9513,8544],{"class":49},[36,9515,9516,9518],{"class":38,"line":2061},[36,9517,2735],{"class":53},[36,9519,8556],{"class":49},[36,9521,9522],{"class":38,"line":2067},[36,9523,4744],{"class":49},[36,9525,9526],{"class":38,"line":2079},[36,9527,9528],{"class":42},"\u002F\u002F打印学生信息的函数\n",[36,9530,9531],{"class":38,"line":2362},[36,9532,9533],{"class":42},"\u002F\u002F值传递\n",[36,9535,9536,9538,9541,9543,9545,9547,9549],{"class":38,"line":2367},[36,9537,6111],{"class":53},[36,9539,9540],{"class":2713}," printStudent1",[36,9542,901],{"class":49},[36,9544,8506],{"class":53},[36,9546,8645],{"class":2713},[36,9548,9175],{"class":416},[36,9550,75],{"class":49},[36,9552,9553],{"class":38,"line":2373},[36,9554,2296],{"class":49},[36,9556,9557,9559,9561,9564,9566,9569,9571,9574,9576,9578,9580,9583,9585],{"class":38,"line":2378},[36,9558,7276],{"class":49},[36,9560,1923],{"class":53},[36,9562,9563],{"class":49}," s.name ",[36,9565,1923],{"class":53},[36,9567,9568],{"class":998}," \" \"",[36,9570,2194],{"class":53},[36,9572,9573],{"class":49}," s.age ",[36,9575,1923],{"class":53},[36,9577,9568],{"class":998},[36,9579,2194],{"class":53},[36,9581,9582],{"class":49}," s.score ",[36,9584,1923],{"class":53},[36,9586,9587],{"class":49}," endl;\n",[36,9589,9590],{"class":38,"line":2392},[36,9591,2315],{"class":49},[36,9593,9594],{"class":38,"line":2397},[36,9595,9596],{"class":42},"\u002F\u002F地址传递\n",[36,9598,9599,9601,9604,9606,9608,9610,9612,9614],{"class":38,"line":2403},[36,9600,6111],{"class":53},[36,9602,9603],{"class":2713}," printStudent2",[36,9605,901],{"class":49},[36,9607,8506],{"class":53},[36,9609,8645],{"class":2713},[36,9611,7265],{"class":53},[36,9613,1577],{"class":416},[36,9615,75],{"class":49},[36,9617,9618],{"class":38,"line":2424},[36,9619,2296],{"class":49},[36,9621,9622,9624,9626,9629,9631,9633,9635,9638,9640,9642,9644,9647,9649],{"class":38,"line":2429},[36,9623,7276],{"class":49},[36,9625,1923],{"class":53},[36,9627,9628],{"class":49}," s->name ",[36,9630,1923],{"class":53},[36,9632,9568],{"class":998},[36,9634,2194],{"class":53},[36,9636,9637],{"class":49}," s->age ",[36,9639,1923],{"class":53},[36,9641,9568],{"class":998},[36,9643,2194],{"class":53},[36,9645,9646],{"class":49}," s->score ",[36,9648,1923],{"class":53},[36,9650,9587],{"class":49},[36,9652,9653],{"class":38,"line":2443},[36,9654,2315],{"class":49},[36,9656,9657,9659,9661],{"class":38,"line":2448},[36,9658,904],{"class":53},[36,9660,2723],{"class":2713},[36,9662,2726],{"class":49},[36,9664,9665],{"class":38,"line":2477},[36,9666,2296],{"class":49},[36,9668,9669,9671,9673],{"class":38,"line":2482},[36,9670,8642],{"class":53},[36,9672,8645],{"class":2713},[36,9674,9675],{"class":49}," s;\n",[36,9677,9678,9681,9683,9686],{"class":38,"line":2499},[36,9679,9680],{"class":49},"    s.name ",[36,9682,54],{"class":53},[36,9684,9685],{"class":998}," \"张三\"",[36,9687,2040],{"class":49},[36,9689,9690,9693,9695,9698],{"class":38,"line":2504},[36,9691,9692],{"class":49},"    s.age ",[36,9694,54],{"class":53},[36,9696,9697],{"class":60}," 20",[36,9699,2040],{"class":49},[36,9701,9702,9705,9707,9710],{"class":38,"line":2509},[36,9703,9704],{"class":49},"    s.score ",[36,9706,54],{"class":53},[36,9708,9709],{"class":60}," 85",[36,9711,2040],{"class":49},[36,9713,9714,9716,9718,9721,9723],{"class":38,"line":2514},[36,9715,2301],{"class":49},[36,9717,1923],{"class":53},[36,9719,9720],{"class":998},"\"值传递:\"",[36,9722,1923],{"class":53},[36,9724,1945],{"class":49},[36,9726,9727,9730],{"class":38,"line":2528},[36,9728,9729],{"class":2713},"    printStudent1",[36,9731,9732],{"class":49},"(s);\n",[36,9734,9735,9737,9739,9742,9744],{"class":38,"line":2533},[36,9736,2301],{"class":49},[36,9738,1923],{"class":53},[36,9740,9741],{"class":998},"\"地址传递:\"",[36,9743,1923],{"class":53},[36,9745,1945],{"class":49},[36,9747,9748,9751,9753,9755],{"class":38,"line":3326},[36,9749,9750],{"class":2713},"    printStudent2",[36,9752,901],{"class":49},[36,9754,1239],{"class":53},[36,9756,9757],{"class":49},"s); \n",[36,9759,9760,9762,9764],{"class":38,"line":3340},[36,9761,4839],{"class":53},[36,9763,4842],{"class":60},[36,9765,2040],{"class":49},[36,9767,9768],{"class":38,"line":3348},[36,9769,2315],{"class":49},[14,9771,9772],{},"注意：",[1886,9774,9775,9778],{},[854,9776,9777],{},"1.先定义结构体，不要在函数中写结构体的定义",[854,9779,9780],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[21,9782,9784],{"id":9783},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9786,9787],{},"用const防止误操作",[26,9789,9791],{"className":889,"code":9790,"language":891,"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,9792,9793,9799,9809,9815,9820,9824,9828,9834,9840,9844,9860,9864,9887,9891,9899,9903,9924,9931,9935],{"__ignoreMap":31},[36,9794,9795,9797],{"class":38,"line":39},[36,9796,2699],{"class":53},[36,9798,2702],{"class":998},[36,9800,9801,9803,9805,9807],{"class":38,"line":46},[36,9802,2707],{"class":53},[36,9804,2710],{"class":53},[36,9806,2714],{"class":2713},[36,9808,2040],{"class":49},[36,9810,9811,9813],{"class":38,"line":78},[36,9812,2699],{"class":53},[36,9814,8496],{"class":998},[36,9816,9817],{"class":38,"line":125},[36,9818,9819],{"class":49},"sctuct Student\n",[36,9821,9822],{"class":38,"line":131},[36,9823,2296],{"class":49},[36,9825,9826],{"class":38,"line":396},[36,9827,8532],{"class":49},[36,9829,9830,9832],{"class":38,"line":407},[36,9831,2735],{"class":53},[36,9833,8544],{"class":49},[36,9835,9836,9838],{"class":38,"line":2061},[36,9837,2735],{"class":53},[36,9839,8556],{"class":49},[36,9841,9842],{"class":38,"line":2067},[36,9843,4744],{"class":49},[36,9845,9846,9848,9851,9853,9856,9858],{"class":38,"line":2079},[36,9847,6111],{"class":53},[36,9849,9850],{"class":2713}," printStudents",[36,9852,901],{"class":49},[36,9854,9855],{"class":2713},"student",[36,9857,9175],{"class":416},[36,9859,75],{"class":49},[36,9861,9862],{"class":38,"line":2362},[36,9863,2296],{"class":49},[36,9865,9866,9868,9870,9873,9875,9878,9880,9883,9885],{"class":38,"line":2367},[36,9867,2301],{"class":49},[36,9869,1923],{"class":53},[36,9871,9872],{"class":49},"s.name",[36,9874,1923],{"class":53},[36,9876,9877],{"class":49},"s.age",[36,9879,1923],{"class":53},[36,9881,9882],{"class":49},"s.score",[36,9884,1923],{"class":53},[36,9886,1945],{"class":49},[36,9888,9889],{"class":38,"line":2373},[36,9890,2315],{"class":49},[36,9892,9893,9895,9897],{"class":38,"line":2378},[36,9894,904],{"class":53},[36,9896,2723],{"class":2713},[36,9898,6725],{"class":49},[36,9900,9901],{"class":38,"line":2392},[36,9902,2296],{"class":49},[36,9904,9905,9908,9910,9912,9914,9916,9918,9920,9922],{"class":38,"line":2397},[36,9906,9907],{"class":49},"    Student s",[36,9909,54],{"class":53},[36,9911,1775],{"class":49},[36,9913,8663],{"class":998},[36,9915,64],{"class":49},[36,9917,1532],{"class":60},[36,9919,64],{"class":49},[36,9921,1532],{"class":60},[36,9923,4744],{"class":49},[36,9925,9926,9929],{"class":38,"line":2403},[36,9927,9928],{"class":2713},"    printStudent",[36,9930,9732],{"class":49},[36,9932,9933],{"class":38,"line":2424},[36,9934,194],{"emptyLinePlaceholder":193},[36,9936,9937],{"class":38,"line":2429},[36,9938,2315],{"class":49},[14,9940,9772],{},[1886,9942,9943,9946,9949],{},[854,9944,9945],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[854,9947,9948],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[854,9950,9951],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[26,9953,9955],{"className":889,"code":9954,"language":891,"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,9956,9957,9976,9980,9985,10005],{"__ignoreMap":31},[36,9958,9959,9961,9963,9965,9967,9970,9972,9974],{"class":38,"line":39},[36,9960,6111],{"class":53},[36,9962,9850],{"class":2713},[36,9964,901],{"class":49},[36,9966,7539],{"class":53},[36,9968,9969],{"class":2713}," student",[36,9971,7265],{"class":53},[36,9973,1577],{"class":416},[36,9975,75],{"class":49},[36,9977,9978],{"class":38,"line":46},[36,9979,2296],{"class":49},[36,9981,9982],{"class":38,"line":78},[36,9983,9984],{"class":42},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[36,9986,9987,9989,9991,9993,9995,9997,9999,10001,10003],{"class":38,"line":125},[36,9988,2301],{"class":49},[36,9990,1923],{"class":53},[36,9992,9872],{"class":49},[36,9994,1923],{"class":53},[36,9996,9877],{"class":49},[36,9998,1923],{"class":53},[36,10000,9882],{"class":49},[36,10002,1923],{"class":53},[36,10004,1945],{"class":49},[36,10006,10007],{"class":38,"line":131},[36,10008,2315],{"class":49},[21,10010,10012],{"id":10011},"_47案例","4.7案例",[851,10014,10015],{},[854,10016,10017],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[26,10019,10021],{"className":889,"code":10020,"language":891,"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,10022,10023,10029,10039,10045,10052,10056,10062,10066,10071,10077,10083,10087,10091,10097,10101,10106,10111,10124,10128,10133,10159,10163,10175,10202,10206,10218,10228,10232,10237,10266,10270,10282,10291,10318,10329,10339,10343,10347,10351,10356,10380,10384,10408,10412,10431,10457,10461,10486,10509,10533,10538,10543,10548,10557,10562,10568,10589,10595,10609,10615,10642,10651,10657,10665,10670],{"__ignoreMap":31},[36,10024,10025,10027],{"class":38,"line":39},[36,10026,2699],{"class":53},[36,10028,2702],{"class":998},[36,10030,10031,10033,10035,10037],{"class":38,"line":46},[36,10032,2707],{"class":53},[36,10034,2710],{"class":53},[36,10036,2714],{"class":2713},[36,10038,2040],{"class":49},[36,10040,10041,10043],{"class":38,"line":78},[36,10042,2699],{"class":53},[36,10044,8496],{"class":998},[36,10046,10047,10049],{"class":38,"line":125},[36,10048,2699],{"class":53},[36,10050,10051],{"class":998},"\u003Cctime>\n",[36,10053,10054],{"class":38,"line":131},[36,10055,9285],{"class":42},[36,10057,10058,10060],{"class":38,"line":396},[36,10059,8506],{"class":53},[36,10061,8509],{"class":2713},[36,10063,10064],{"class":38,"line":407},[36,10065,2296],{"class":49},[36,10067,10068],{"class":38,"line":2061},[36,10069,10070],{"class":49},"    string sName;\n",[36,10072,10073,10075],{"class":38,"line":2067},[36,10074,2735],{"class":53},[36,10076,8544],{"class":49},[36,10078,10079,10081],{"class":38,"line":2079},[36,10080,2735],{"class":53},[36,10082,8556],{"class":49},[36,10084,10085],{"class":38,"line":2362},[36,10086,4744],{"class":49},[36,10088,10089],{"class":38,"line":2367},[36,10090,9322],{"class":42},[36,10092,10093,10095],{"class":38,"line":2373},[36,10094,8506],{"class":53},[36,10096,9329],{"class":2713},[36,10098,10099],{"class":38,"line":2378},[36,10100,2296],{"class":49},[36,10102,10103],{"class":38,"line":2392},[36,10104,10105],{"class":49},"    string tName;\n",[36,10107,10108],{"class":38,"line":2397},[36,10109,10110],{"class":42},"    \u002F\u002F学生数组\n",[36,10112,10113,10115,10117,10120,10122],{"class":38,"line":2403},[36,10114,8642],{"class":53},[36,10116,8645],{"class":2713},[36,10118,10119],{"class":49}," sArray[",[36,10121,157],{"class":60},[36,10123,5438],{"class":49},[36,10125,10126],{"class":38,"line":2424},[36,10127,4744],{"class":49},[36,10129,10130],{"class":38,"line":2429},[36,10131,10132],{"class":42},"\u002F\u002F给老师和学生赋值的函数\n",[36,10134,10135,10137,10140,10142,10144,10147,10150,10153,10155,10157],{"class":38,"line":2443},[36,10136,6111],{"class":53},[36,10138,10139],{"class":2713}," allocateSpace",[36,10141,901],{"class":49},[36,10143,8506],{"class":53},[36,10145,10146],{"class":2713}," Teacher",[36,10148,10149],{"class":416}," tArray",[36,10151,10152],{"class":49},"[],",[36,10154,904],{"class":53},[36,10156,8078],{"class":416},[36,10158,75],{"class":49},[36,10160,10161],{"class":38,"line":2448},[36,10162,2296],{"class":49},[36,10164,10165,10168,10170,10173],{"class":38,"line":2477},[36,10166,10167],{"class":49},"    string nameSeed",[36,10169,54],{"class":53},[36,10171,10172],{"class":998},"\"ABCDE\"",[36,10174,2040],{"class":49},[36,10176,10177,10179,10181,10183,10186,10188,10190,10193,10195,10198,10200],{"class":38,"line":2482},[36,10178,3950],{"class":53},[36,10180,2408],{"class":49},[36,10182,904],{"class":53},[36,10184,10185],{"class":49}," i ",[36,10187,54],{"class":53},[36,10189,4842],{"class":60},[36,10191,10192],{"class":49},"; i ",[36,10194,1789],{"class":53},[36,10196,10197],{"class":49}," len; i",[36,10199,3042],{"class":53},[36,10201,75],{"class":49},[36,10203,10204],{"class":38,"line":2499},[36,10205,2780],{"class":49},[36,10207,10208,10211,10213,10216],{"class":38,"line":2504},[36,10209,10210],{"class":49},"        tArray[i].tName ",[36,10212,54],{"class":53},[36,10214,10215],{"class":998}," \"Teacher_\"",[36,10217,2040],{"class":49},[36,10219,10220,10222,10225],{"class":38,"line":2509},[36,10221,10210],{"class":49},[36,10223,10224],{"class":53},"+=",[36,10226,10227],{"class":49},"nameSeed[i];\n",[36,10229,10230],{"class":38,"line":2514},[36,10231,194],{"emptyLinePlaceholder":193},[36,10233,10234],{"class":38,"line":2528},[36,10235,10236],{"class":42},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[36,10238,10239,10241,10243,10245,10248,10250,10252,10255,10257,10259,10262,10264],{"class":38,"line":2533},[36,10240,4152],{"class":53},[36,10242,2408],{"class":49},[36,10244,904],{"class":53},[36,10246,10247],{"class":49}," j ",[36,10249,54],{"class":53},[36,10251,4842],{"class":60},[36,10253,10254],{"class":49},"; j ",[36,10256,1789],{"class":53},[36,10258,2898],{"class":60},[36,10260,10261],{"class":49},"; j",[36,10263,3042],{"class":53},[36,10265,75],{"class":49},[36,10267,10268],{"class":38,"line":3326},[36,10269,3259],{"class":49},[36,10271,10272,10275,10277,10280],{"class":38,"line":3340},[36,10273,10274],{"class":49},"            tArray[i].sArray[j].sName ",[36,10276,54],{"class":53},[36,10278,10279],{"class":998}," \"Student_\"",[36,10281,2040],{"class":49},[36,10283,10284,10286,10288],{"class":38,"line":3348},[36,10285,10274],{"class":49},[36,10287,10224],{"class":53},[36,10289,10290],{"class":49}," nameSeed[j];\n",[36,10292,10293,10296,10299,10301,10303,10305,10307,10309,10311,10313,10315],{"class":38,"line":3353},[36,10294,10295],{"class":53},"            int",[36,10297,10298],{"class":49}," random",[36,10300,54],{"class":53},[36,10302,3173],{"class":2713},[36,10304,3176],{"class":49},[36,10306,1214],{"class":53},[36,10308,1786],{"class":60},[36,10310,1365],{"class":53},[36,10312,1286],{"class":60},[36,10314,952],{"class":49},[36,10316,10317],{"class":42},"\u002F\u002F40~99\n",[36,10319,10320,10323,10325,10327],{"class":38,"line":3359},[36,10321,10322],{"class":49},"            tArray[i].sArray[j].age ",[36,10324,54],{"class":53},[36,10326,9697],{"class":60},[36,10328,2040],{"class":49},[36,10330,10331,10334,10336],{"class":38,"line":3365},[36,10332,10333],{"class":49},"            tArray[i].sArray[j].score ",[36,10335,54],{"class":53},[36,10337,10338],{"class":49}," random;\n",[36,10340,10341],{"class":38,"line":3370},[36,10342,3278],{"class":49},[36,10344,10345],{"class":38,"line":8695},[36,10346,2937],{"class":49},[36,10348,10349],{"class":38,"line":8719},[36,10350,2315],{"class":49},[36,10352,10353],{"class":38,"line":8724},[36,10354,10355],{"class":42},"\u002F\u002F打印所有信息的函数\n",[36,10357,10358,10360,10363,10365,10367,10369,10371,10374,10376,10378],{"class":38,"line":8730},[36,10359,6111],{"class":53},[36,10361,10362],{"class":2713}," printInfo",[36,10364,901],{"class":49},[36,10366,8506],{"class":53},[36,10368,10146],{"class":2713},[36,10370,10149],{"class":416},[36,10372,10373],{"class":49},"[], ",[36,10375,904],{"class":53},[36,10377,8078],{"class":416},[36,10379,75],{"class":49},[36,10381,10382],{"class":38,"line":8757},[36,10383,2296],{"class":49},[36,10385,10386,10388,10390,10392,10394,10396,10398,10400,10402,10404,10406],{"class":38,"line":8762},[36,10387,3950],{"class":53},[36,10389,2408],{"class":49},[36,10391,904],{"class":53},[36,10393,10185],{"class":49},[36,10395,54],{"class":53},[36,10397,4842],{"class":60},[36,10399,10192],{"class":49},[36,10401,1789],{"class":53},[36,10403,10197],{"class":49},[36,10405,3042],{"class":53},[36,10407,75],{"class":49},[36,10409,10410],{"class":38,"line":8768},[36,10411,2780],{"class":49},[36,10413,10414,10417,10419,10422,10424,10427,10429],{"class":38,"line":8780},[36,10415,10416],{"class":49},"        cout ",[36,10418,1923],{"class":53},[36,10420,10421],{"class":998}," \"Teacher: \"",[36,10423,2194],{"class":53},[36,10425,10426],{"class":49}," tArray[i].tName ",[36,10428,1923],{"class":53},[36,10430,9587],{"class":49},[36,10432,10433,10435,10437,10439,10441,10443,10445,10447,10449,10451,10453,10455],{"class":38,"line":8792},[36,10434,4152],{"class":53},[36,10436,2408],{"class":49},[36,10438,904],{"class":53},[36,10440,10247],{"class":49},[36,10442,54],{"class":53},[36,10444,4842],{"class":60},[36,10446,10254],{"class":49},[36,10448,1789],{"class":53},[36,10450,2898],{"class":60},[36,10452,10261],{"class":49},[36,10454,3042],{"class":53},[36,10456,75],{"class":49},[36,10458,10459],{"class":38,"line":8804},[36,10460,3259],{"class":49},[36,10462,10464,10467,10469,10472,10474,10477,10479,10482,10484],{"class":38,"line":10463},47,[36,10465,10466],{"class":49},"            cout ",[36,10468,1923],{"class":53},[36,10470,10471],{"class":998}," \"",[36,10473,1980],{"class":60},[36,10475,10476],{"class":998},"Student: \"",[36,10478,2194],{"class":53},[36,10480,10481],{"class":49}," tArray[i].sArray[j].sName",[36,10483,1923],{"class":53},[36,10485,1945],{"class":49},[36,10487,10489,10491,10493,10495,10497,10500,10502,10505,10507],{"class":38,"line":10488},48,[36,10490,10466],{"class":49},[36,10492,1923],{"class":53},[36,10494,10471],{"class":998},[36,10496,1980],{"class":60},[36,10498,10499],{"class":998},"Age: \"",[36,10501,2194],{"class":53},[36,10503,10504],{"class":49}," tArray[i].sArray[j].age ",[36,10506,1923],{"class":53},[36,10508,9587],{"class":49},[36,10510,10512,10514,10516,10518,10520,10523,10525,10528,10530],{"class":38,"line":10511},49,[36,10513,10466],{"class":49},[36,10515,1923],{"class":53},[36,10517,10471],{"class":998},[36,10519,1980],{"class":60},[36,10521,10522],{"class":998},"Score: \"",[36,10524,2194],{"class":53},[36,10526,10527],{"class":49}," tArray[i].sArray[j].score ",[36,10529,1923],{"class":53},[36,10531,10532],{"class":49}," endl;   \n",[36,10534,10536],{"class":38,"line":10535},50,[36,10537,3278],{"class":49},[36,10539,10541],{"class":38,"line":10540},51,[36,10542,2937],{"class":49},[36,10544,10546],{"class":38,"line":10545},52,[36,10547,2315],{"class":49},[36,10549,10551,10553,10555],{"class":38,"line":10550},53,[36,10552,904],{"class":53},[36,10554,2723],{"class":2713},[36,10556,2726],{"class":49},[36,10558,10560],{"class":38,"line":10559},54,[36,10561,2296],{"class":49},[36,10563,10565],{"class":38,"line":10564},55,[36,10566,10567],{"class":42},"    \u002F\u002F随机数种子\n",[36,10569,10571,10573,10575,10577,10579,10581,10583,10585,10587],{"class":38,"line":10570},56,[36,10572,3123],{"class":2713},[36,10574,3126],{"class":49},[36,10576,3129],{"class":53},[36,10578,3132],{"class":53},[36,10580,1314],{"class":49},[36,10582,3137],{"class":2713},[36,10584,901],{"class":49},[36,10586,3142],{"class":60},[36,10588,3145],{"class":49},[36,10590,10592],{"class":38,"line":10591},57,[36,10593,10594],{"class":42},"    \u002F\u002F1.创建3名老师的数组\n",[36,10596,10598,10600,10602,10605,10607],{"class":38,"line":10597},58,[36,10599,8642],{"class":53},[36,10601,10146],{"class":2713},[36,10603,10604],{"class":49}," tArray[",[36,10606,162],{"class":60},[36,10608,5438],{"class":49},[36,10610,10612],{"class":38,"line":10611},59,[36,10613,10614],{"class":42},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[36,10616,10618,10620,10623,10625,10628,10631,10633,10635,10638,10640],{"class":38,"line":10617},60,[36,10619,2735],{"class":53},[36,10621,10622],{"class":49}," len ",[36,10624,54],{"class":53},[36,10626,10627],{"class":53}," sizeof",[36,10629,10630],{"class":49},"(tArray) ",[36,10632,1466],{"class":53},[36,10634,10627],{"class":53},[36,10636,10637],{"class":49},"(tArray[",[36,10639,643],{"class":60},[36,10641,4605],{"class":49},[36,10643,10645,10648],{"class":38,"line":10644},61,[36,10646,10647],{"class":2713},"    allocateSpace",[36,10649,10650],{"class":49},"(tArray, len);\n",[36,10652,10654],{"class":38,"line":10653},62,[36,10655,10656],{"class":42},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[36,10658,10660,10663],{"class":38,"line":10659},63,[36,10661,10662],{"class":2713},"    printInfo",[36,10664,10650],{"class":49},[36,10666,10668],{"class":38,"line":10667},64,[36,10669,194],{"emptyLinePlaceholder":193},[36,10671,10673],{"class":38,"line":10672},65,[36,10674,2315],{"class":49},[851,10676,10677],{"start":46},[854,10678,10679,10682],{},[1043,10680,10681],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,10684,10685],{},"五名英雄信息如下：",[26,10687,10691],{"className":10688,"code":10689,"language":10690,"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,10692,10693,10711,10728,10745,10762],{"__ignoreMap":31},[36,10694,10695,10697,10700,10702,10704,10706,10709],{"class":38,"line":39},[36,10696,5665],{"class":49},[36,10698,10699],{"class":998},"\"刘备\"",[36,10701,64],{"class":49},[36,10703,648],{"class":60},[36,10705,64],{"class":49},[36,10707,10708],{"class":998},"\"男\"",[36,10710,5678],{"class":49},[36,10712,10713,10715,10718,10720,10722,10724,10726],{"class":38,"line":46},[36,10714,5665],{"class":49},[36,10716,10717],{"class":998},"\"关羽\"",[36,10719,64],{"class":49},[36,10721,1631],{"class":60},[36,10723,64],{"class":49},[36,10725,10708],{"class":998},[36,10727,5678],{"class":49},[36,10729,10730,10732,10735,10737,10739,10741,10743],{"class":38,"line":78},[36,10731,5665],{"class":49},[36,10733,10734],{"class":998},"\"张飞\"",[36,10736,64],{"class":49},[36,10738,72],{"class":60},[36,10740,64],{"class":49},[36,10742,10708],{"class":998},[36,10744,5678],{"class":49},[36,10746,10747,10749,10752,10754,10756,10758,10760],{"class":38,"line":125},[36,10748,5665],{"class":49},[36,10750,10751],{"class":998},"\"赵云\"",[36,10753,64],{"class":49},[36,10755,1606],{"class":60},[36,10757,64],{"class":49},[36,10759,10708],{"class":998},[36,10761,5678],{"class":49},[36,10763,10764,10766,10769,10771,10773,10775,10778],{"class":38,"line":131},[36,10765,5665],{"class":49},[36,10767,10768],{"class":998},"\"貂蝉\"",[36,10770,64],{"class":49},[36,10772,1557],{"class":60},[36,10774,64],{"class":49},[36,10776,10777],{"class":998},"\"女\"",[36,10779,5678],{"class":49},[14,10781,10782],{},"代码：",[26,10784,10786],{"className":889,"code":10785,"language":891,"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,10787,10788,10794,10804,10810,10817,10821,10825,10831,10836,10840,10845,10868,10872,10897,10901,10934,10939,10968,10973,10988,11014,11034,11039,11044,11048,11052,11057,11079,11083,11107,11111,11173,11177,11181,11189,11193,11198,11209,11213,11229,11245,11261,11277,11293,11297,11317,11339,11344,11357,11364,11369,11375,11380,11393,11399],{"__ignoreMap":31},[36,10789,10790,10792],{"class":38,"line":39},[36,10791,2699],{"class":53},[36,10793,2702],{"class":998},[36,10795,10796,10798,10800,10802],{"class":38,"line":46},[36,10797,2707],{"class":53},[36,10799,2710],{"class":53},[36,10801,2714],{"class":2713},[36,10803,2040],{"class":49},[36,10805,10806,10808],{"class":38,"line":78},[36,10807,2699],{"class":53},[36,10809,8496],{"class":998},[36,10811,10812,10814],{"class":38,"line":125},[36,10813,8506],{"class":53},[36,10815,10816],{"class":2713}," Sanguo\n",[36,10818,10819],{"class":38,"line":131},[36,10820,2296],{"class":49},[36,10822,10823],{"class":38,"line":396},[36,10824,8532],{"class":49},[36,10826,10827,10829],{"class":38,"line":407},[36,10828,2735],{"class":53},[36,10830,8544],{"class":49},[36,10832,10833],{"class":38,"line":2061},[36,10834,10835],{"class":49},"    string gender;\n",[36,10837,10838],{"class":38,"line":2067},[36,10839,4744],{"class":49},[36,10841,10842],{"class":38,"line":2079},[36,10843,10844],{"class":42},"\u002F\u002F定义排序函数\n",[36,10846,10847,10849,10851,10853,10856,10858,10860,10862,10864,10866],{"class":38,"line":2362},[36,10848,6111],{"class":53},[36,10850,8063],{"class":2713},[36,10852,901],{"class":49},[36,10854,10855],{"class":2713},"Sanguo",[36,10857,7265],{"class":53},[36,10859,1577],{"class":416},[36,10861,64],{"class":49},[36,10863,904],{"class":53},[36,10865,8078],{"class":416},[36,10867,75],{"class":49},[36,10869,10870],{"class":38,"line":2367},[36,10871,2296],{"class":49},[36,10873,10874,10876,10878,10880,10882,10884,10886,10888,10890,10893,10895],{"class":38,"line":2373},[36,10875,3950],{"class":53},[36,10877,901],{"class":49},[36,10879,904],{"class":53},[36,10881,3781],{"class":49},[36,10883,54],{"class":53},[36,10885,643],{"class":60},[36,10887,3788],{"class":49},[36,10889,1789],{"class":53},[36,10891,10892],{"class":49},"len;i",[36,10894,3042],{"class":53},[36,10896,75],{"class":49},[36,10898,10899],{"class":38,"line":2378},[36,10900,2780],{"class":49},[36,10902,10903,10906,10908,10910,10912,10914,10916,10918,10920,10922,10924,10926,10928,10930,10932],{"class":38,"line":2392},[36,10904,10905],{"class":53},"     for",[36,10907,2408],{"class":49},[36,10909,904],{"class":53},[36,10911,4159],{"class":49},[36,10913,54],{"class":53},[36,10915,643],{"class":60},[36,10917,4166],{"class":49},[36,10919,1789],{"class":53},[36,10921,8105],{"class":49},[36,10923,1414],{"class":53},[36,10925,61],{"class":60},[36,10927,1414],{"class":53},[36,10929,4299],{"class":49},[36,10931,3042],{"class":53},[36,10933,75],{"class":49},[36,10935,10936],{"class":38,"line":2397},[36,10937,10938],{"class":49},"     {\n",[36,10940,10941,10944,10947,10949,10952,10954,10957,10959,10961,10963,10965],{"class":38,"line":2403},[36,10942,10943],{"class":53},"         if",[36,10945,10946],{"class":49}," ((s",[36,10948,1365],{"class":53},[36,10950,10951],{"class":49},"j)->age ",[36,10953,1839],{"class":53},[36,10955,10956],{"class":49}," (s",[36,10958,1365],{"class":53},[36,10960,1351],{"class":49},[36,10962,1365],{"class":53},[36,10964,61],{"class":60},[36,10966,10967],{"class":49},")->age)\n",[36,10969,10970],{"class":38,"line":2424},[36,10971,10972],{"class":49},"         {\n",[36,10974,10975,10978,10980,10983,10985],{"class":38,"line":2429},[36,10976,10977],{"class":49},"             Sanguo temp",[36,10979,7900],{"class":53},[36,10981,10982],{"class":49},"(s",[36,10984,1365],{"class":53},[36,10986,10987],{"class":49},"j);\n",[36,10989,10990,10993,10995,10997,11000,11002,11004,11006,11008,11010,11012],{"class":38,"line":2443},[36,10991,10992],{"class":53},"             *",[36,10994,10982],{"class":49},[36,10996,1365],{"class":53},[36,10998,10999],{"class":49},"j)",[36,11001,7900],{"class":53},[36,11003,10982],{"class":49},[36,11005,1365],{"class":53},[36,11007,1351],{"class":49},[36,11009,1365],{"class":53},[36,11011,61],{"class":60},[36,11013,3468],{"class":49},[36,11015,11016,11018,11020,11022,11024,11026,11028,11030,11032],{"class":38,"line":2448},[36,11017,10992],{"class":53},[36,11019,10982],{"class":49},[36,11021,1365],{"class":53},[36,11023,1351],{"class":49},[36,11025,1365],{"class":53},[36,11027,61],{"class":60},[36,11029,1314],{"class":49},[36,11031,54],{"class":53},[36,11033,5029],{"class":49},[36,11035,11036],{"class":38,"line":2477},[36,11037,11038],{"class":49},"         }\n",[36,11040,11041],{"class":38,"line":2482},[36,11042,11043],{"class":49},"     }\n",[36,11045,11046],{"class":38,"line":2499},[36,11047,2937],{"class":49},[36,11049,11050],{"class":38,"line":2504},[36,11051,2315],{"class":49},[36,11053,11054],{"class":38,"line":2509},[36,11055,11056],{"class":42},"\u002F\u002F定义打印函数\n",[36,11058,11059,11061,11063,11065,11067,11069,11071,11073,11075,11077],{"class":38,"line":2514},[36,11060,6111],{"class":53},[36,11062,10362],{"class":2713},[36,11064,901],{"class":49},[36,11066,10855],{"class":2713},[36,11068,7265],{"class":53},[36,11070,1577],{"class":416},[36,11072,64],{"class":49},[36,11074,904],{"class":53},[36,11076,8078],{"class":416},[36,11078,75],{"class":49},[36,11080,11081],{"class":38,"line":2528},[36,11082,2296],{"class":49},[36,11084,11085,11087,11089,11091,11093,11095,11097,11099,11101,11103,11105],{"class":38,"line":2533},[36,11086,3950],{"class":53},[36,11088,2408],{"class":49},[36,11090,904],{"class":53},[36,11092,3781],{"class":49},[36,11094,54],{"class":53},[36,11096,643],{"class":60},[36,11098,3788],{"class":49},[36,11100,1789],{"class":53},[36,11102,10892],{"class":49},[36,11104,3042],{"class":53},[36,11106,75],{"class":49},[36,11108,11109],{"class":38,"line":3326},[36,11110,2780],{"class":49},[36,11112,11113,11115,11117,11119,11121,11124,11126,11128,11130,11133,11135,11137,11139,11142,11144,11146,11148,11151,11153,11155,11157,11160,11162,11164,11166,11169,11171],{"class":38,"line":3340},[36,11114,4200],{"class":49},[36,11116,1923],{"class":53},[36,11118,1141],{"class":998},[36,11120,1980],{"class":60},[36,11122,11123],{"class":998},"姓名：\"",[36,11125,1923],{"class":53},[36,11127,10982],{"class":49},[36,11129,1365],{"class":53},[36,11131,11132],{"class":49},"i)->name",[36,11134,1923],{"class":53},[36,11136,1141],{"class":998},[36,11138,1980],{"class":60},[36,11140,11141],{"class":998},"年龄：\"",[36,11143,1923],{"class":53},[36,11145,10982],{"class":49},[36,11147,1365],{"class":53},[36,11149,11150],{"class":49},"i)->age",[36,11152,1923],{"class":53},[36,11154,1141],{"class":998},[36,11156,1980],{"class":60},[36,11158,11159],{"class":998},"性别：\"",[36,11161,1923],{"class":53},[36,11163,10982],{"class":49},[36,11165,1365],{"class":53},[36,11167,11168],{"class":49},"i)->gender",[36,11170,1923],{"class":53},[36,11172,1945],{"class":49},[36,11174,11175],{"class":38,"line":3348},[36,11176,2937],{"class":49},[36,11178,11179],{"class":38,"line":3353},[36,11180,2315],{"class":49},[36,11182,11183,11185,11187],{"class":38,"line":3359},[36,11184,904],{"class":53},[36,11186,2723],{"class":2713},[36,11188,2726],{"class":49},[36,11190,11191],{"class":38,"line":3365},[36,11192,2296],{"class":49},[36,11194,11195],{"class":38,"line":3370},[36,11196,11197],{"class":42},"    \u002F\u002F定义结构体变量\n",[36,11199,11200,11203,11205,11207],{"class":38,"line":8695},[36,11201,11202],{"class":49},"    Sanguo s1[",[36,11204,157],{"class":60},[36,11206,1819],{"class":49},[36,11208,5656],{"class":53},[36,11210,11211],{"class":38,"line":8719},[36,11212,2780],{"class":49},[36,11214,11215,11217,11219,11221,11223,11225,11227],{"class":38,"line":8724},[36,11216,5665],{"class":49},[36,11218,10699],{"class":998},[36,11220,64],{"class":49},[36,11222,648],{"class":60},[36,11224,64],{"class":49},[36,11226,10708],{"class":998},[36,11228,5678],{"class":49},[36,11230,11231,11233,11235,11237,11239,11241,11243],{"class":38,"line":8730},[36,11232,5665],{"class":49},[36,11234,10717],{"class":998},[36,11236,64],{"class":49},[36,11238,1631],{"class":60},[36,11240,64],{"class":49},[36,11242,10708],{"class":998},[36,11244,5678],{"class":49},[36,11246,11247,11249,11251,11253,11255,11257,11259],{"class":38,"line":8757},[36,11248,5665],{"class":49},[36,11250,10734],{"class":998},[36,11252,64],{"class":49},[36,11254,72],{"class":60},[36,11256,64],{"class":49},[36,11258,10708],{"class":998},[36,11260,5678],{"class":49},[36,11262,11263,11265,11267,11269,11271,11273,11275],{"class":38,"line":8762},[36,11264,5665],{"class":49},[36,11266,10751],{"class":998},[36,11268,64],{"class":49},[36,11270,1606],{"class":60},[36,11272,64],{"class":49},[36,11274,10708],{"class":998},[36,11276,5678],{"class":49},[36,11278,11279,11281,11283,11285,11287,11289,11291],{"class":38,"line":8768},[36,11280,5665],{"class":49},[36,11282,10768],{"class":998},[36,11284,64],{"class":49},[36,11286,1557],{"class":60},[36,11288,64],{"class":49},[36,11290,10777],{"class":998},[36,11292,5678],{"class":49},[36,11294,11295],{"class":38,"line":8780},[36,11296,5699],{"class":49},[36,11298,11299,11301,11303,11305,11308,11310,11313,11315],{"class":38,"line":8792},[36,11300,2735],{"class":53},[36,11302,8078],{"class":49},[36,11304,4952],{"class":53},[36,11306,11307],{"class":49},"(s1)",[36,11309,4958],{"class":53},[36,11311,11312],{"class":49},"(s1[",[36,11314,643],{"class":60},[36,11316,4605],{"class":49},[36,11318,11319,11322,11324,11327,11329,11332,11335,11337],{"class":38,"line":8804},[36,11320,11321],{"class":49},"    Sanguo ",[36,11323,1339],{"class":53},[36,11325,11326],{"class":49},"s ",[36,11328,54],{"class":53},[36,11330,11331],{"class":53}," &",[36,11333,11334],{"class":49},"s1[",[36,11336,643],{"class":60},[36,11338,5438],{"class":49},[36,11340,11341],{"class":38,"line":10463},[36,11342,11343],{"class":42},"    \u002F\u002F排序前：\n",[36,11345,11346,11348,11350,11353,11355],{"class":38,"line":10488},[36,11347,7276],{"class":49},[36,11349,1923],{"class":53},[36,11351,11352],{"class":998}," \"排序前：\"",[36,11354,2194],{"class":53},[36,11356,9587],{"class":49},[36,11358,11359,11361],{"class":38,"line":10511},[36,11360,10662],{"class":2713},[36,11362,11363],{"class":49},"(s,len);\n",[36,11365,11366],{"class":38,"line":10535},[36,11367,11368],{"class":42},"    \u002F\u002F调用排序函数\n",[36,11370,11371,11373],{"class":38,"line":10540},[36,11372,8345],{"class":2713},[36,11374,11363],{"class":49},[36,11376,11377],{"class":38,"line":10545},[36,11378,11379],{"class":42},"    \u002F\u002F排序后\n",[36,11381,11382,11384,11386,11389,11391],{"class":38,"line":10550},[36,11383,7276],{"class":49},[36,11385,1923],{"class":53},[36,11387,11388],{"class":998}," \"排序后：\"",[36,11390,2194],{"class":53},[36,11392,9587],{"class":49},[36,11394,11395,11397],{"class":38,"line":10559},[36,11396,10662],{"class":2713},[36,11398,11363],{"class":49},[36,11400,11401],{"class":38,"line":10564},[36,11402,2315],{"class":49},[14,11404,11405,11406,11408],{},"注意：使用指针时直接用传首地址**&s",[36,11407,643],{},"**",[807,11410,11411],{},"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":46,"depth":46,"links":11413},[11414,11415,11416,11417,11418,11419,11420],{"id":8450,"depth":46,"text":8451},{"id":8812,"depth":46,"text":8813},{"id":9081,"depth":46,"text":9082},{"id":9246,"depth":46,"text":9247},{"id":9462,"depth":46,"text":9463},{"id":9783,"depth":46,"text":9784},{"id":10011,"depth":46,"text":10012},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8439,"description":8447},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11427,"title":11428,"body":11429,"description":31,"extension":824,"meta":12770,"navigation":193,"path":12771,"seo":12772,"stem":12773,"__hash__":12774},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11430,"toc":12764},[11431,11434,11438,11444,11458,11463,11466,11470,11477,11483,11486,11493,11499,11504,11507,11510,11513,12075,12078,12092,12096,12101,12117,12257,12260,12266,12269,12274,12282,12390,12393,12398,12401,12406,12409,12415,12418,12761],[10,11432,11428],{"id":11433},"_5程序内存模型",[21,11435,11437],{"id":11436},"_51内存分区模型","5.1内存分区模型",[14,11439,11440,11441],{},"C++程序在执行时，将内存大方向划分为",[1043,11442,11443],{},"4个区域",[1886,11445,11446,11449,11452,11455],{},[854,11447,11448],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[854,11450,11451],{},"全局区：存放全局变量和静态变量以及常量",[854,11453,11454],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[854,11456,11457],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,11459,11460],{},[1043,11461,11462],{},"内存四区意义：",[14,11464,11465],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[868,11467,11469],{"id":11468},"_511程序运行前","5.1.1程序运行前",[14,11471,11472,11473,11476],{},"​\t在程序编译后，生成了exe可执行程序，",[1043,11474,11475],{},"未执行该程序前","分为两个区域",[14,11478,11479,11480],{},"​\t",[1043,11481,11482],{},"代码区：",[14,11484,11485],{},"​\t\t存放 CPU 执行的机器指令",[14,11487,11488,11489,11492],{},"​\t\t代码区是",[1043,11490,11491],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,11494,11488,11495,11498],{},[1043,11496,11497],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,11500,11479,11501],{},[1043,11502,11503],{},"全局区：",[14,11505,11506],{},"​\t\t全局变量和静态变量存放在此.",[14,11508,11509],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,11511,11512],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[26,11514,11516],{"className":889,"code":11515,"language":891,"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,11517,11518,11523,11536,11549,11553,11558,11573,11588,11592,11601,11605,11610,11623,11636,11640,11645,11670,11695,11699,11726,11752,11756,11761,11777,11792,11796,11822,11848,11852,11877,11902,11906,11932,11958,11962,11978,11993,12019,12045,12049,12059,12063,12071],{"__ignoreMap":31},[36,11519,11520],{"class":38,"line":39},[36,11521,11522],{"class":42},"\u002F\u002F全局变量\n",[36,11524,11525,11527,11530,11532,11534],{"class":38,"line":46},[36,11526,904],{"class":53},[36,11528,11529],{"class":49}," g_a ",[36,11531,54],{"class":53},[36,11533,2788],{"class":60},[36,11535,2040],{"class":49},[36,11537,11538,11540,11543,11545,11547],{"class":38,"line":78},[36,11539,904],{"class":53},[36,11541,11542],{"class":49}," g_b ",[36,11544,54],{"class":53},[36,11546,2788],{"class":60},[36,11548,2040],{"class":49},[36,11550,11551],{"class":38,"line":125},[36,11552,194],{"emptyLinePlaceholder":193},[36,11554,11555],{"class":38,"line":131},[36,11556,11557],{"class":42},"\u002F\u002F全局常量\n",[36,11559,11560,11562,11564,11567,11569,11571],{"class":38,"line":396},[36,11561,7539],{"class":53},[36,11563,3132],{"class":53},[36,11565,11566],{"class":49}," c_g_a ",[36,11568,54],{"class":53},[36,11570,2788],{"class":60},[36,11572,2040],{"class":49},[36,11574,11575,11577,11579,11582,11584,11586],{"class":38,"line":407},[36,11576,7539],{"class":53},[36,11578,3132],{"class":53},[36,11580,11581],{"class":49}," c_g_b ",[36,11583,54],{"class":53},[36,11585,2788],{"class":60},[36,11587,2040],{"class":49},[36,11589,11590],{"class":38,"line":2061},[36,11591,194],{"emptyLinePlaceholder":193},[36,11593,11594,11596,11598],{"class":38,"line":2067},[36,11595,904],{"class":53},[36,11597,2723],{"class":2713},[36,11599,11600],{"class":49},"() {\n",[36,11602,11603],{"class":38,"line":2079},[36,11604,194],{"emptyLinePlaceholder":193},[36,11606,11607],{"class":38,"line":2362},[36,11608,11609],{"class":42},"    \u002F\u002F局部变量\n",[36,11611,11612,11614,11617,11619,11621],{"class":38,"line":2367},[36,11613,2735],{"class":53},[36,11615,11616],{"class":49}," a ",[36,11618,54],{"class":53},[36,11620,2788],{"class":60},[36,11622,2040],{"class":49},[36,11624,11625,11627,11630,11632,11634],{"class":38,"line":2373},[36,11626,2735],{"class":53},[36,11628,11629],{"class":49}," b ",[36,11631,54],{"class":53},[36,11633,2788],{"class":60},[36,11635,2040],{"class":49},[36,11637,11638],{"class":38,"line":2378},[36,11639,194],{"emptyLinePlaceholder":193},[36,11641,11642],{"class":38,"line":2392},[36,11643,11644],{"class":42},"    \u002F\u002F打印地址\n",[36,11646,11647,11649,11651,11654,11656,11658,11660,11662,11664,11666,11668],{"class":38,"line":2397},[36,11648,7276],{"class":49},[36,11650,1923],{"class":53},[36,11652,11653],{"class":998}," \"局部变量a地址为： \"",[36,11655,2194],{"class":53},[36,11657,2408],{"class":49},[36,11659,904],{"class":53},[36,11661,1314],{"class":49},[36,11663,1239],{"class":53},[36,11665,144],{"class":49},[36,11667,1923],{"class":53},[36,11669,9587],{"class":49},[36,11671,11672,11674,11676,11679,11681,11683,11685,11687,11689,11691,11693],{"class":38,"line":2403},[36,11673,7276],{"class":49},[36,11675,1923],{"class":53},[36,11677,11678],{"class":998}," \"局部变量b地址为： \"",[36,11680,2194],{"class":53},[36,11682,2408],{"class":49},[36,11684,904],{"class":53},[36,11686,1314],{"class":49},[36,11688,1239],{"class":53},[36,11690,170],{"class":49},[36,11692,1923],{"class":53},[36,11694,9587],{"class":49},[36,11696,11697],{"class":38,"line":2424},[36,11698,194],{"emptyLinePlaceholder":193},[36,11700,11701,11703,11705,11708,11710,11713,11715,11717,11719,11722,11724],{"class":38,"line":2429},[36,11702,7276],{"class":49},[36,11704,1923],{"class":53},[36,11706,11707],{"class":998}," \"全局变量g_a地址为： \"",[36,11709,2194],{"class":53},[36,11711,11712],{"class":49},"  (",[36,11714,904],{"class":53},[36,11716,1314],{"class":49},[36,11718,1239],{"class":53},[36,11720,11721],{"class":49},"g_a ",[36,11723,1923],{"class":53},[36,11725,9587],{"class":49},[36,11727,11728,11730,11732,11735,11737,11739,11741,11743,11745,11748,11750],{"class":38,"line":2443},[36,11729,7276],{"class":49},[36,11731,1923],{"class":53},[36,11733,11734],{"class":998}," \"全局变量g_b地址为： \"",[36,11736,2194],{"class":53},[36,11738,11712],{"class":49},[36,11740,904],{"class":53},[36,11742,1314],{"class":49},[36,11744,1239],{"class":53},[36,11746,11747],{"class":49},"g_b ",[36,11749,1923],{"class":53},[36,11751,9587],{"class":49},[36,11753,11754],{"class":38,"line":2448},[36,11755,194],{"emptyLinePlaceholder":193},[36,11757,11758],{"class":38,"line":2477},[36,11759,11760],{"class":42},"    \u002F\u002F静态变量\n",[36,11762,11763,11766,11768,11771,11773,11775],{"class":38,"line":2482},[36,11764,11765],{"class":53},"    static",[36,11767,3132],{"class":53},[36,11769,11770],{"class":49}," s_a ",[36,11772,54],{"class":53},[36,11774,2788],{"class":60},[36,11776,2040],{"class":49},[36,11778,11779,11781,11783,11786,11788,11790],{"class":38,"line":2499},[36,11780,11765],{"class":53},[36,11782,3132],{"class":53},[36,11784,11785],{"class":49}," s_b ",[36,11787,54],{"class":53},[36,11789,2788],{"class":60},[36,11791,2040],{"class":49},[36,11793,11794],{"class":38,"line":2504},[36,11795,194],{"emptyLinePlaceholder":193},[36,11797,11798,11800,11802,11805,11807,11809,11811,11813,11815,11818,11820],{"class":38,"line":2509},[36,11799,7276],{"class":49},[36,11801,1923],{"class":53},[36,11803,11804],{"class":998}," \"静态变量s_a地址为： \"",[36,11806,2194],{"class":53},[36,11808,2408],{"class":49},[36,11810,904],{"class":53},[36,11812,1314],{"class":49},[36,11814,1239],{"class":53},[36,11816,11817],{"class":49},"s_a ",[36,11819,1923],{"class":53},[36,11821,9587],{"class":49},[36,11823,11824,11826,11828,11831,11833,11835,11837,11839,11841,11844,11846],{"class":38,"line":2514},[36,11825,7276],{"class":49},[36,11827,1923],{"class":53},[36,11829,11830],{"class":998}," \"静态变量s_b地址为： \"",[36,11832,2194],{"class":53},[36,11834,2408],{"class":49},[36,11836,904],{"class":53},[36,11838,1314],{"class":49},[36,11840,1239],{"class":53},[36,11842,11843],{"class":49},"s_b ",[36,11845,1923],{"class":53},[36,11847,9587],{"class":49},[36,11849,11850],{"class":38,"line":2528},[36,11851,194],{"emptyLinePlaceholder":193},[36,11853,11854,11856,11858,11861,11863,11865,11867,11869,11871,11873,11875],{"class":38,"line":2533},[36,11855,7276],{"class":49},[36,11857,1923],{"class":53},[36,11859,11860],{"class":998}," \"字符串常量地址为： \"",[36,11862,2194],{"class":53},[36,11864,2408],{"class":49},[36,11866,904],{"class":53},[36,11868,1314],{"class":49},[36,11870,1239],{"class":53},[36,11872,1940],{"class":998},[36,11874,2194],{"class":53},[36,11876,9587],{"class":49},[36,11878,11879,11881,11883,11885,11887,11889,11891,11893,11895,11898,11900],{"class":38,"line":3326},[36,11880,7276],{"class":49},[36,11882,1923],{"class":53},[36,11884,11860],{"class":998},[36,11886,2194],{"class":53},[36,11888,2408],{"class":49},[36,11890,904],{"class":53},[36,11892,1314],{"class":49},[36,11894,1239],{"class":53},[36,11896,11897],{"class":998},"\"hello world1\"",[36,11899,2194],{"class":53},[36,11901,9587],{"class":49},[36,11903,11904],{"class":38,"line":3340},[36,11905,194],{"emptyLinePlaceholder":193},[36,11907,11908,11910,11912,11915,11917,11919,11921,11923,11925,11928,11930],{"class":38,"line":3348},[36,11909,7276],{"class":49},[36,11911,1923],{"class":53},[36,11913,11914],{"class":998}," \"全局常量c_g_a地址为： \"",[36,11916,2194],{"class":53},[36,11918,2408],{"class":49},[36,11920,904],{"class":53},[36,11922,1314],{"class":49},[36,11924,1239],{"class":53},[36,11926,11927],{"class":49},"c_g_a ",[36,11929,1923],{"class":53},[36,11931,9587],{"class":49},[36,11933,11934,11936,11938,11941,11943,11945,11947,11949,11951,11954,11956],{"class":38,"line":3353},[36,11935,7276],{"class":49},[36,11937,1923],{"class":53},[36,11939,11940],{"class":998}," \"全局常量c_g_b地址为： \"",[36,11942,2194],{"class":53},[36,11944,2408],{"class":49},[36,11946,904],{"class":53},[36,11948,1314],{"class":49},[36,11950,1239],{"class":53},[36,11952,11953],{"class":49},"c_g_b ",[36,11955,1923],{"class":53},[36,11957,9587],{"class":49},[36,11959,11960],{"class":38,"line":3359},[36,11961,194],{"emptyLinePlaceholder":193},[36,11963,11964,11967,11969,11972,11974,11976],{"class":38,"line":3365},[36,11965,11966],{"class":53},"    const",[36,11968,3132],{"class":53},[36,11970,11971],{"class":49}," c_l_a ",[36,11973,54],{"class":53},[36,11975,2788],{"class":60},[36,11977,2040],{"class":49},[36,11979,11980,11982,11984,11987,11989,11991],{"class":38,"line":3370},[36,11981,11966],{"class":53},[36,11983,3132],{"class":53},[36,11985,11986],{"class":49}," c_l_b ",[36,11988,54],{"class":53},[36,11990,2788],{"class":60},[36,11992,2040],{"class":49},[36,11994,11995,11997,11999,12002,12004,12006,12008,12010,12012,12015,12017],{"class":38,"line":8695},[36,11996,7276],{"class":49},[36,11998,1923],{"class":53},[36,12000,12001],{"class":998}," \"局部常量c_l_a地址为： \"",[36,12003,2194],{"class":53},[36,12005,2408],{"class":49},[36,12007,904],{"class":53},[36,12009,1314],{"class":49},[36,12011,1239],{"class":53},[36,12013,12014],{"class":49},"c_l_a ",[36,12016,1923],{"class":53},[36,12018,9587],{"class":49},[36,12020,12021,12023,12025,12028,12030,12032,12034,12036,12038,12041,12043],{"class":38,"line":8719},[36,12022,7276],{"class":49},[36,12024,1923],{"class":53},[36,12026,12027],{"class":998}," \"局部常量c_l_b地址为： \"",[36,12029,2194],{"class":53},[36,12031,2408],{"class":49},[36,12033,904],{"class":53},[36,12035,1314],{"class":49},[36,12037,1239],{"class":53},[36,12039,12040],{"class":49},"c_l_b ",[36,12042,1923],{"class":53},[36,12044,9587],{"class":49},[36,12046,12047],{"class":38,"line":8724},[36,12048,194],{"emptyLinePlaceholder":193},[36,12050,12051,12053,12055,12057],{"class":38,"line":8730},[36,12052,3053],{"class":2713},[36,12054,901],{"class":49},[36,12056,3058],{"class":998},[36,12058,3468],{"class":49},[36,12060,12061],{"class":38,"line":8757},[36,12062,194],{"emptyLinePlaceholder":193},[36,12064,12065,12067,12069],{"class":38,"line":8762},[36,12066,4839],{"class":53},[36,12068,4842],{"class":60},[36,12070,2040],{"class":49},[36,12072,12073],{"class":38,"line":8768},[36,12074,2315],{"class":49},[14,12076,12077],{},"总结：",[1886,12079,12080,12083,12086,12089],{},[854,12081,12082],{},"c++中程序运行前分为全局区和代码区",[854,12084,12085],{},"代码区特点是共享和只读",[854,12087,12088],{},"全局区中存放全局变量、静态变量、常量",[854,12090,12091],{},"常量区中存放const修饰的全局常量和字符串常量",[868,12093,12095],{"id":12094},"_512程序运行后","5.1.2程序运行后",[851,12097,12098],{},[854,12099,12100],{},"栈区：",[1886,12102,12103,12110],{},[854,12104,12105,12106,12109],{},"由编译器自动分配释放, 存放",[1043,12107,12108],{},"函数的参数值,局部变量","等",[854,12111,12112,12113,12116],{},"注意事项：",[1043,12114,12115],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[26,12118,12120],{"className":889,"code":12119,"language":891,"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,12121,12122,12133,12137,12152,12164,12168,12172,12180,12185,12200,12218,12235,12245,12253],{"__ignoreMap":31},[36,12123,12124,12126,12128,12131],{"class":38,"line":39},[36,12125,904],{"class":53},[36,12127,7265],{"class":53},[36,12129,12130],{"class":2713}," func",[36,12132,2726],{"class":49},[36,12134,12135],{"class":38,"line":46},[36,12136,2296],{"class":49},[36,12138,12139,12141,12143,12145,12147,12149],{"class":38,"line":78},[36,12140,2735],{"class":53},[36,12142,11616],{"class":49},[36,12144,54],{"class":53},[36,12146,2788],{"class":60},[36,12148,952],{"class":49},[36,12150,12151],{"class":42}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[36,12153,12154,12156,12158,12161],{"class":38,"line":125},[36,12155,4839],{"class":53},[36,12157,11331],{"class":53},[36,12159,12160],{"class":49},"a;",[36,12162,12163],{"class":42}," \u002F\u002F放回局部变量的地址\n",[36,12165,12166],{"class":38,"line":131},[36,12167,2315],{"class":49},[36,12169,12170],{"class":38,"line":396},[36,12171,194],{"emptyLinePlaceholder":193},[36,12173,12174,12176,12178],{"class":38,"line":407},[36,12175,904],{"class":53},[36,12177,2723],{"class":2713},[36,12179,11600],{"class":49},[36,12181,12182],{"class":38,"line":2061},[36,12183,12184],{"class":42},"    \u002F\u002F接受func的返回值\n",[36,12186,12187,12189,12191,12194,12196,12198],{"class":38,"line":2067},[36,12188,2735],{"class":53},[36,12190,7265],{"class":53},[36,12192,12193],{"class":49},"p ",[36,12195,54],{"class":53},[36,12197,12130],{"class":2713},[36,12199,6383],{"class":49},[36,12201,12202,12204,12206,12208,12210,12212,12215],{"class":38,"line":2079},[36,12203,7276],{"class":49},[36,12205,1923],{"class":53},[36,12207,7265],{"class":53},[36,12209,12193],{"class":49},[36,12211,1923],{"class":53},[36,12213,12214],{"class":49}," endl;",[36,12216,12217],{"class":42}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[36,12219,12220,12222,12224,12226,12228,12230,12232],{"class":38,"line":2362},[36,12221,7276],{"class":49},[36,12223,1923],{"class":53},[36,12225,7265],{"class":53},[36,12227,12193],{"class":49},[36,12229,1923],{"class":53},[36,12231,12214],{"class":49},[36,12233,12234],{"class":42}," \u002F\u002F第二次这个数据不再保留\n",[36,12236,12237,12239,12241,12243],{"class":38,"line":2367},[36,12238,3053],{"class":2713},[36,12240,901],{"class":49},[36,12242,3058],{"class":998},[36,12244,3468],{"class":49},[36,12246,12247,12249,12251],{"class":38,"line":2373},[36,12248,4839],{"class":53},[36,12250,4842],{"class":60},[36,12252,2040],{"class":49},[36,12254,12255],{"class":38,"line":2378},[36,12256,2315],{"class":49},[14,12258,12259],{},"输出结果：",[14,12261,12262],{},[2212,12263],{"alt":12264,"src":12265},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,12267,12268],{},"总结：不要返回局部变量的地址",[851,12270,12271],{"start":46},[854,12272,12273],{},"堆区",[1886,12275,12276,12279],{},[854,12277,12278],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[854,12280,12281],{},"在c++中主要利用new在堆区开辟内存",[26,12283,12285],{"className":889,"code":12284,"language":891,"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,12286,12287,12302,12306,12311,12332,12339,12343,12351,12355,12360,12374,12386],{"__ignoreMap":31},[36,12288,12289,12291,12294,12297,12299],{"class":38,"line":39},[36,12290,904],{"class":53},[36,12292,12293],{"class":53},"  *",[36,12295,12296],{"class":2713},"func",[36,12298,3176],{"class":49},[36,12300,12301],{"class":42},"  \u002F\u002F函数返回指针\n",[36,12303,12304],{"class":38,"line":46},[36,12305,2296],{"class":49},[36,12307,12308],{"class":38,"line":78},[36,12309,12310],{"class":42},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[36,12312,12313,12315,12317,12319,12321,12324,12326,12328,12330],{"class":38,"line":125},[36,12314,4896],{"class":53},[36,12316,7265],{"class":53},[36,12318,14],{"class":49},[36,12320,54],{"class":53},[36,12322,12323],{"class":53}," new",[36,12325,3132],{"class":53},[36,12327,901],{"class":49},[36,12329,332],{"class":60},[36,12331,3468],{"class":49},[36,12333,12334,12336],{"class":38,"line":131},[36,12335,5130],{"class":53},[36,12337,12338],{"class":49}," p;\n",[36,12340,12341],{"class":38,"line":396},[36,12342,2315],{"class":49},[36,12344,12345,12347,12349],{"class":38,"line":407},[36,12346,904],{"class":53},[36,12348,2723],{"class":2713},[36,12350,2726],{"class":49},[36,12352,12353],{"class":38,"line":2061},[36,12354,2296],{"class":49},[36,12356,12357],{"class":38,"line":2067},[36,12358,12359],{"class":42},"    \u002F\u002F在堆区开辟数据\n",[36,12361,12362,12364,12366,12368,12370,12372],{"class":38,"line":2079},[36,12363,2735],{"class":53},[36,12365,7265],{"class":53},[36,12367,14],{"class":49},[36,12369,54],{"class":53},[36,12371,12296],{"class":2713},[36,12373,6383],{"class":49},[36,12375,12376,12378,12380,12382,12384],{"class":38,"line":2362},[36,12377,2301],{"class":49},[36,12379,7166],{"class":53},[36,12381,14],{"class":49},[36,12383,1923],{"class":53},[36,12385,1945],{"class":49},[36,12387,12388],{"class":38,"line":2367},[36,12389,2315],{"class":49},[14,12391,12392],{},"图片展示：",[14,12394,12395],{},[2212,12396],{"alt":12264,"src":12397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,12399,12400],{},"堆区内存由程序员管生死！！！",[851,12402,12403],{"start":78},[854,12404,12405],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,12407,12408],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,12410,12411,12412],{},"​语法：",[33,12413,12414],{}," new 数据类型",[14,12416,12417],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[26,12419,12421],{"className":889,"code":12420,"language":891,"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,12422,12423,12428,12438,12442,12447,12452,12474,12478,12486,12490,12504,12516,12528,12540,12545,12550,12561,12565,12570,12578,12582,12587,12609,12635,12639,12657,12661,12687,12691,12703,12707,12712,12717,12725,12729,12733,12741,12745,12751,12757],{"__ignoreMap":31},[36,12424,12425],{"class":38,"line":39},[36,12426,12427],{"class":42},"\u002F\u002F1.new的基本语法\n",[36,12429,12430,12432,12434,12436],{"class":38,"line":46},[36,12431,904],{"class":53},[36,12433,7265],{"class":53},[36,12435,12296],{"class":2713},[36,12437,2726],{"class":49},[36,12439,12440],{"class":38,"line":78},[36,12441,2296],{"class":49},[36,12443,12444],{"class":38,"line":125},[36,12445,12446],{"class":42},"    \u002F\u002F在堆区创建整型数据\n",[36,12448,12449],{"class":38,"line":131},[36,12450,12451],{"class":42},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[36,12453,12454,12456,12458,12460,12463,12465,12467,12469,12471],{"class":38,"line":396},[36,12455,2735],{"class":53},[36,12457,7265],{"class":53},[36,12459,14],{"class":49},[36,12461,12462],{"class":53},"=new",[36,12464,3132],{"class":53},[36,12466,901],{"class":49},[36,12468,332],{"class":60},[36,12470,6713],{"class":49},[36,12472,12473],{"class":42},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[36,12475,12476],{"class":38,"line":407},[36,12477,2315],{"class":49},[36,12479,12480,12482,12484],{"class":38,"line":2061},[36,12481,6111],{"class":53},[36,12483,6335],{"class":2713},[36,12485,2726],{"class":49},[36,12487,12488],{"class":38,"line":2067},[36,12489,2296],{"class":49},[36,12491,12492,12494,12496,12498,12500,12502],{"class":38,"line":2079},[36,12493,2735],{"class":53},[36,12495,7265],{"class":53},[36,12497,14],{"class":49},[36,12499,54],{"class":53},[36,12501,12296],{"class":2713},[36,12503,6383],{"class":49},[36,12505,12506,12508,12510,12512,12514],{"class":38,"line":2362},[36,12507,2301],{"class":49},[36,12509,7166],{"class":53},[36,12511,14],{"class":49},[36,12513,1923],{"class":53},[36,12515,1945],{"class":49},[36,12517,12518,12520,12522,12524,12526],{"class":38,"line":2367},[36,12519,2301],{"class":49},[36,12521,7166],{"class":53},[36,12523,14],{"class":49},[36,12525,1923],{"class":53},[36,12527,1945],{"class":49},[36,12529,12530,12532,12534,12536,12538],{"class":38,"line":2373},[36,12531,2301],{"class":49},[36,12533,7166],{"class":53},[36,12535,14],{"class":49},[36,12537,1923],{"class":53},[36,12539,1945],{"class":49},[36,12541,12542],{"class":38,"line":2378},[36,12543,12544],{"class":42},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[36,12546,12547],{"class":38,"line":2392},[36,12548,12549],{"class":42},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[36,12551,12552,12555,12558],{"class":38,"line":2397},[36,12553,12554],{"class":53},"    delete",[36,12556,12557],{"class":49}," p;",[36,12559,12560],{"class":42},"\u002F\u002F删除这块地址\n",[36,12562,12563],{"class":38,"line":2403},[36,12564,2315],{"class":49},[36,12566,12567],{"class":38,"line":2424},[36,12568,12569],{"class":42},"\u002F\u002F2.在堆区利用new开辟数组\n",[36,12571,12572,12574,12576],{"class":38,"line":2429},[36,12573,6111],{"class":53},[36,12575,6404],{"class":2713},[36,12577,2726],{"class":49},[36,12579,12580],{"class":38,"line":2443},[36,12581,2296],{"class":49},[36,12583,12584],{"class":38,"line":2448},[36,12585,12586],{"class":42},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[36,12588,12589,12591,12593,12595,12597,12599,12601,12603,12606],{"class":38,"line":2477},[36,12590,2735],{"class":53},[36,12592,7265],{"class":53},[36,12594,4629],{"class":49},[36,12596,12462],{"class":53},[36,12598,3132],{"class":53},[36,12600,1769],{"class":49},[36,12602,332],{"class":60},[36,12604,12605],{"class":49},"];",[36,12607,12608],{"class":42},"\u002F\u002F10代表数组有10个元素\n",[36,12610,12611,12613,12615,12617,12619,12621,12623,12625,12627,12629,12631,12633],{"class":38,"line":2482},[36,12612,3950],{"class":53},[36,12614,2408],{"class":49},[36,12616,904],{"class":53},[36,12618,3781],{"class":49},[36,12620,54],{"class":53},[36,12622,643],{"class":60},[36,12624,3788],{"class":49},[36,12626,1789],{"class":53},[36,12628,332],{"class":60},[36,12630,3788],{"class":49},[36,12632,3042],{"class":53},[36,12634,75],{"class":49},[36,12636,12637],{"class":38,"line":2499},[36,12638,2780],{"class":49},[36,12640,12641,12644,12646,12648,12650,12652,12654],{"class":38,"line":2504},[36,12642,12643],{"class":49},"        arr[i]",[36,12645,54],{"class":53},[36,12647,1326],{"class":49},[36,12649,1365],{"class":53},[36,12651,67],{"class":60},[36,12653,952],{"class":49},[36,12655,12656],{"class":42},"\u002F\u002F给10个元素赋值100～109\n",[36,12658,12659],{"class":38,"line":2509},[36,12660,2937],{"class":49},[36,12662,12663,12665,12667,12669,12671,12673,12675,12677,12679,12681,12683,12685],{"class":38,"line":2514},[36,12664,3950],{"class":53},[36,12666,2408],{"class":49},[36,12668,904],{"class":53},[36,12670,3781],{"class":49},[36,12672,54],{"class":53},[36,12674,643],{"class":60},[36,12676,3788],{"class":49},[36,12678,1789],{"class":53},[36,12680,332],{"class":60},[36,12682,3788],{"class":49},[36,12684,3042],{"class":53},[36,12686,75],{"class":49},[36,12688,12689],{"class":38,"line":2528},[36,12690,2780],{"class":49},[36,12692,12693,12695,12697,12699,12701],{"class":38,"line":2533},[36,12694,4200],{"class":49},[36,12696,1923],{"class":53},[36,12698,5103],{"class":49},[36,12700,1923],{"class":53},[36,12702,1945],{"class":49},[36,12704,12705],{"class":38,"line":3326},[36,12706,2937],{"class":49},[36,12708,12709],{"class":38,"line":3340},[36,12710,12711],{"class":42},"    \u002F\u002F释放堆区数组\n",[36,12713,12714],{"class":38,"line":3348},[36,12715,12716],{"class":42},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[36,12718,12719,12722],{"class":38,"line":3353},[36,12720,12721],{"class":53},"    delete[]",[36,12723,12724],{"class":49}," arr;\n",[36,12726,12727],{"class":38,"line":3359},[36,12728,2315],{"class":49},[36,12730,12731],{"class":38,"line":3365},[36,12732,194],{"emptyLinePlaceholder":193},[36,12734,12735,12737,12739],{"class":38,"line":3370},[36,12736,904],{"class":53},[36,12738,2723],{"class":2713},[36,12740,2726],{"class":49},[36,12742,12743],{"class":38,"line":8695},[36,12744,2296],{"class":49},[36,12746,12747,12749],{"class":38,"line":8719},[36,12748,6380],{"class":2713},[36,12750,6383],{"class":49},[36,12752,12753,12755],{"class":38,"line":8724},[36,12754,6449],{"class":2713},[36,12756,6383],{"class":49},[36,12758,12759],{"class":38,"line":8730},[36,12760,2315],{"class":49},[807,12762,12763],{},"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":46,"depth":46,"links":12765},[12766],{"id":11436,"depth":46,"text":11437,"children":12767},[12768,12769],{"id":11468,"depth":78,"text":11469},{"id":12094,"depth":78,"text":12095},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11428,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12776,"title":12777,"body":12778,"description":31,"extension":824,"meta":14258,"navigation":193,"path":14259,"seo":14260,"stem":14261,"__hash__":14262},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12779,"toc":14250},[12780,12783,12787,12790,12793,12962,12966,12971,12988,12993,13145,13149,13152,13155,13548,13552,13555,13560,13563,13875,13879,13885,14045,14047,14055,14059,14062,14069,14247],[10,12781,12777],{"id":12782},"_6引用",[21,12784,12786],{"id":12785},"_61引用基本用法","6.1引用基本用法",[14,12788,12789],{},"引用的本质：给变量起别名",[14,12791,12792],{},"语法：数据类型 &别名=原名",[26,12794,12796],{"className":889,"code":12795,"language":891,"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,12797,12798,12806,12810,12822,12834,12838,12857,12876,12880,12891,12895,12914,12932,12936,12946,12950,12958],{"__ignoreMap":31},[36,12799,12800,12802,12804],{"class":38,"line":39},[36,12801,904],{"class":53},[36,12803,2723],{"class":2713},[36,12805,11600],{"class":49},[36,12807,12808],{"class":38,"line":46},[36,12809,194],{"emptyLinePlaceholder":193},[36,12811,12812,12814,12816,12818,12820],{"class":38,"line":78},[36,12813,2735],{"class":53},[36,12815,11616],{"class":49},[36,12817,54],{"class":53},[36,12819,2788],{"class":60},[36,12821,2040],{"class":49},[36,12823,12824,12826,12828,12830,12832],{"class":38,"line":125},[36,12825,2735],{"class":53},[36,12827,11331],{"class":53},[36,12829,170],{"class":49},[36,12831,54],{"class":53},[36,12833,2182],{"class":49},[36,12835,12836],{"class":38,"line":131},[36,12837,194],{"emptyLinePlaceholder":193},[36,12839,12840,12842,12844,12847,12849,12851,12853,12855],{"class":38,"line":396},[36,12841,7276],{"class":49},[36,12843,1923],{"class":53},[36,12845,12846],{"class":998}," \"a = \"",[36,12848,2194],{"class":53},[36,12850,11616],{"class":49},[36,12852,1923],{"class":53},[36,12854,12214],{"class":49},[36,12856,8015],{"class":42},[36,12858,12859,12861,12863,12866,12868,12870,12872,12874],{"class":38,"line":407},[36,12860,7276],{"class":49},[36,12862,1923],{"class":53},[36,12864,12865],{"class":998}," \"b = \"",[36,12867,2194],{"class":53},[36,12869,11629],{"class":49},[36,12871,1923],{"class":53},[36,12873,12214],{"class":49},[36,12875,8015],{"class":42},[36,12877,12878],{"class":38,"line":2061},[36,12879,194],{"emptyLinePlaceholder":193},[36,12881,12882,12885,12887,12889],{"class":38,"line":2067},[36,12883,12884],{"class":49},"    b ",[36,12886,54],{"class":53},[36,12888,6501],{"class":60},[36,12890,2040],{"class":49},[36,12892,12893],{"class":38,"line":2079},[36,12894,194],{"emptyLinePlaceholder":193},[36,12896,12897,12899,12901,12903,12905,12907,12909,12911],{"class":38,"line":2362},[36,12898,7276],{"class":49},[36,12900,1923],{"class":53},[36,12902,12846],{"class":998},[36,12904,2194],{"class":53},[36,12906,11616],{"class":49},[36,12908,1923],{"class":53},[36,12910,12214],{"class":49},[36,12912,12913],{"class":42},"\u002F\u002F100\n",[36,12915,12916,12918,12920,12922,12924,12926,12928,12930],{"class":38,"line":2367},[36,12917,7276],{"class":49},[36,12919,1923],{"class":53},[36,12921,12865],{"class":998},[36,12923,2194],{"class":53},[36,12925,11629],{"class":49},[36,12927,1923],{"class":53},[36,12929,12214],{"class":49},[36,12931,12913],{"class":42},[36,12933,12934],{"class":38,"line":2373},[36,12935,194],{"emptyLinePlaceholder":193},[36,12937,12938,12940,12942,12944],{"class":38,"line":2378},[36,12939,3053],{"class":2713},[36,12941,901],{"class":49},[36,12943,3058],{"class":998},[36,12945,3468],{"class":49},[36,12947,12948],{"class":38,"line":2392},[36,12949,194],{"emptyLinePlaceholder":193},[36,12951,12952,12954,12956],{"class":38,"line":2397},[36,12953,4839],{"class":53},[36,12955,4842],{"class":60},[36,12957,2040],{"class":49},[36,12959,12960],{"class":38,"line":2403},[36,12961,2315],{"class":49},[21,12963,12965],{"id":12964},"_62引用的注意事项","6.2引用的注意事项",[851,12967,12968],{},[854,12969,12970],{},"引用必须要初始化",[26,12972,12974],{"className":889,"code":12973,"language":891,"meta":31,"style":31},"int &b;\u002F\u002F非常错误！\n",[33,12975,12976],{"__ignoreMap":31},[36,12977,12978,12980,12982,12985],{"class":38,"line":39},[36,12979,904],{"class":53},[36,12981,11331],{"class":53},[36,12983,12984],{"class":49},"b;",[36,12986,12987],{"class":42},"\u002F\u002F非常错误！\n",[851,12989,12990],{"start":46},[854,12991,12992],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[26,12994,12996],{"className":889,"code":12995,"language":891,"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,12997,12998,13006,13018,13030,13038,13054,13067,13085,13103,13123,13133,13141],{"__ignoreMap":31},[36,12999,13000,13002,13004],{"class":38,"line":39},[36,13001,904],{"class":53},[36,13003,2723],{"class":2713},[36,13005,11600],{"class":49},[36,13007,13008,13010,13012,13014,13016],{"class":38,"line":46},[36,13009,2735],{"class":53},[36,13011,11616],{"class":49},[36,13013,54],{"class":53},[36,13015,2788],{"class":60},[36,13017,2040],{"class":49},[36,13019,13020,13022,13024,13026,13028],{"class":38,"line":78},[36,13021,2735],{"class":53},[36,13023,11629],{"class":49},[36,13025,54],{"class":53},[36,13027,9697],{"class":60},[36,13029,2040],{"class":49},[36,13031,13032,13035],{"class":38,"line":125},[36,13033,13034],{"class":42},"    \u002F\u002Fint &c;",[36,13036,13037],{"class":42}," \u002F\u002F错误，引用必须初始化\n",[36,13039,13040,13042,13044,13046,13048,13051],{"class":38,"line":131},[36,13041,2735],{"class":53},[36,13043,11331],{"class":53},[36,13045,3695],{"class":49},[36,13047,54],{"class":53},[36,13049,13050],{"class":49}," a;",[36,13052,13053],{"class":42}," \u002F\u002F一旦初始化后，就不可以更改\n",[36,13055,13056,13059,13061,13064],{"class":38,"line":396},[36,13057,13058],{"class":49},"    c ",[36,13060,54],{"class":53},[36,13062,13063],{"class":49}," b;",[36,13065,13066],{"class":42}," \u002F\u002F这是赋值操作，不是更改引用\n",[36,13068,13069,13071,13073,13075,13077,13079,13081,13083],{"class":38,"line":407},[36,13070,7276],{"class":49},[36,13072,1923],{"class":53},[36,13074,12846],{"class":998},[36,13076,2194],{"class":53},[36,13078,11616],{"class":49},[36,13080,1923],{"class":53},[36,13082,12214],{"class":49},[36,13084,8000],{"class":42},[36,13086,13087,13089,13091,13093,13095,13097,13099,13101],{"class":38,"line":2061},[36,13088,7276],{"class":49},[36,13090,1923],{"class":53},[36,13092,12865],{"class":998},[36,13094,2194],{"class":53},[36,13096,11629],{"class":49},[36,13098,1923],{"class":53},[36,13100,12214],{"class":49},[36,13102,8000],{"class":42},[36,13104,13105,13107,13109,13112,13114,13117,13119,13121],{"class":38,"line":2067},[36,13106,7276],{"class":49},[36,13108,1923],{"class":53},[36,13110,13111],{"class":998}," \"c = \"",[36,13113,2194],{"class":53},[36,13115,13116],{"class":49}," c ",[36,13118,1923],{"class":53},[36,13120,12214],{"class":49},[36,13122,8000],{"class":42},[36,13124,13125,13127,13129,13131],{"class":38,"line":2079},[36,13126,3053],{"class":2713},[36,13128,901],{"class":49},[36,13130,3058],{"class":998},[36,13132,3468],{"class":49},[36,13134,13135,13137,13139],{"class":38,"line":2362},[36,13136,4839],{"class":53},[36,13138,4842],{"class":60},[36,13140,2040],{"class":49},[36,13142,13143],{"class":38,"line":2367},[36,13144,2315],{"class":49},[21,13146,13148],{"id":13147},"_63引用做函数参数","6.3引用做函数参数",[14,13150,13151],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,13153,13154],{},"优点：可以简化指针修改实参",[26,13156,13158],{"className":889,"code":13157,"language":891,"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,13159,13160,13165,13187,13198,13208,13217,13221,13225,13230,13252,13264,13276,13286,13290,13294,13299,13321,13331,13339,13347,13351,13355,13363,13367,13379,13391,13395,13406,13432,13436,13456,13480,13484,13494,13518,13522,13532,13536,13544],{"__ignoreMap":31},[36,13161,13162],{"class":38,"line":39},[36,13163,13164],{"class":42},"\u002F\u002F1. 值传递\n",[36,13166,13167,13169,13172,13174,13176,13178,13180,13182,13184],{"class":38,"line":46},[36,13168,6111],{"class":53},[36,13170,13171],{"class":2713}," mySwap01",[36,13173,901],{"class":49},[36,13175,904],{"class":53},[36,13177,2148],{"class":416},[36,13179,154],{"class":49},[36,13181,904],{"class":53},[36,13183,3582],{"class":416},[36,13185,13186],{"class":49},") {\n",[36,13188,13189,13191,13194,13196],{"class":38,"line":78},[36,13190,2735],{"class":53},[36,13192,13193],{"class":49}," temp ",[36,13195,54],{"class":53},[36,13197,2182],{"class":49},[36,13199,13200,13203,13205],{"class":38,"line":125},[36,13201,13202],{"class":49},"    a ",[36,13204,54],{"class":53},[36,13206,13207],{"class":49}," b;\n",[36,13209,13210,13212,13214],{"class":38,"line":131},[36,13211,12884],{"class":49},[36,13213,54],{"class":53},[36,13215,13216],{"class":49}," temp;\n",[36,13218,13219],{"class":38,"line":396},[36,13220,2315],{"class":49},[36,13222,13223],{"class":38,"line":407},[36,13224,194],{"emptyLinePlaceholder":193},[36,13226,13227],{"class":38,"line":2061},[36,13228,13229],{"class":42},"\u002F\u002F2. 地址传递\n",[36,13231,13232,13234,13237,13239,13242,13244,13246,13248,13250],{"class":38,"line":2067},[36,13233,6111],{"class":53},[36,13235,13236],{"class":2713}," mySwap02",[36,13238,901],{"class":49},[36,13240,13241],{"class":53},"int*",[36,13243,2148],{"class":416},[36,13245,154],{"class":49},[36,13247,13241],{"class":53},[36,13249,3582],{"class":416},[36,13251,13186],{"class":49},[36,13253,13254,13256,13258,13260,13262],{"class":38,"line":2079},[36,13255,2735],{"class":53},[36,13257,13193],{"class":49},[36,13259,54],{"class":53},[36,13261,7265],{"class":53},[36,13263,6944],{"class":49},[36,13265,13266,13268,13270,13272,13274],{"class":38,"line":2362},[36,13267,7150],{"class":53},[36,13269,144],{"class":49},[36,13271,54],{"class":53},[36,13273,7265],{"class":53},[36,13275,6816],{"class":49},[36,13277,13278,13280,13282,13284],{"class":38,"line":2367},[36,13279,7150],{"class":53},[36,13281,170],{"class":49},[36,13283,54],{"class":53},[36,13285,13216],{"class":49},[36,13287,13288],{"class":38,"line":2373},[36,13289,2315],{"class":49},[36,13291,13292],{"class":38,"line":2378},[36,13293,194],{"emptyLinePlaceholder":193},[36,13295,13296],{"class":38,"line":2392},[36,13297,13298],{"class":42},"\u002F\u002F3. 引用传递\n",[36,13300,13301,13303,13306,13308,13311,13313,13315,13317,13319],{"class":38,"line":2397},[36,13302,6111],{"class":53},[36,13304,13305],{"class":2713}," mySwap03",[36,13307,901],{"class":49},[36,13309,13310],{"class":53},"int&",[36,13312,2148],{"class":416},[36,13314,154],{"class":49},[36,13316,13310],{"class":53},[36,13318,3582],{"class":416},[36,13320,13186],{"class":49},[36,13322,13323,13325,13327,13329],{"class":38,"line":2403},[36,13324,2735],{"class":53},[36,13326,13193],{"class":49},[36,13328,54],{"class":53},[36,13330,2182],{"class":49},[36,13332,13333,13335,13337],{"class":38,"line":2424},[36,13334,13202],{"class":49},[36,13336,54],{"class":53},[36,13338,13207],{"class":49},[36,13340,13341,13343,13345],{"class":38,"line":2429},[36,13342,12884],{"class":49},[36,13344,54],{"class":53},[36,13346,13216],{"class":49},[36,13348,13349],{"class":38,"line":2443},[36,13350,2315],{"class":49},[36,13352,13353],{"class":38,"line":2448},[36,13354,194],{"emptyLinePlaceholder":193},[36,13356,13357,13359,13361],{"class":38,"line":2477},[36,13358,904],{"class":53},[36,13360,2723],{"class":2713},[36,13362,11600],{"class":49},[36,13364,13365],{"class":38,"line":2482},[36,13366,194],{"emptyLinePlaceholder":193},[36,13368,13369,13371,13373,13375,13377],{"class":38,"line":2499},[36,13370,2735],{"class":53},[36,13372,11616],{"class":49},[36,13374,54],{"class":53},[36,13376,2788],{"class":60},[36,13378,2040],{"class":49},[36,13380,13381,13383,13385,13387,13389],{"class":38,"line":2504},[36,13382,2735],{"class":53},[36,13384,11629],{"class":49},[36,13386,54],{"class":53},[36,13388,9697],{"class":60},[36,13390,2040],{"class":49},[36,13392,13393],{"class":38,"line":2509},[36,13394,194],{"emptyLinePlaceholder":193},[36,13396,13397,13400,13403],{"class":38,"line":2514},[36,13398,13399],{"class":2713},"    mySwap01",[36,13401,13402],{"class":49},"(a, b);",[36,13404,13405],{"class":42},"\u002F\u002F值传递，形参不会修饰实参\n",[36,13407,13408,13410,13412,13415,13417,13419,13421,13424,13426,13428,13430],{"class":38,"line":2528},[36,13409,7276],{"class":49},[36,13411,1923],{"class":53},[36,13413,13414],{"class":998}," \"a:\"",[36,13416,2194],{"class":53},[36,13418,11616],{"class":49},[36,13420,1923],{"class":53},[36,13422,13423],{"class":998}," \" b:\"",[36,13425,2194],{"class":53},[36,13427,11629],{"class":49},[36,13429,1923],{"class":53},[36,13431,9587],{"class":49},[36,13433,13434],{"class":38,"line":2533},[36,13435,194],{"emptyLinePlaceholder":193},[36,13437,13438,13441,13443,13445,13448,13450,13453],{"class":38,"line":3326},[36,13439,13440],{"class":2713},"    mySwap02",[36,13442,901],{"class":49},[36,13444,1239],{"class":53},[36,13446,13447],{"class":49},"a, ",[36,13449,1239],{"class":53},[36,13451,13452],{"class":49},"b);",[36,13454,13455],{"class":42},"\u002F\u002F地址传递，形参会修饰实参\n",[36,13457,13458,13460,13462,13464,13466,13468,13470,13472,13474,13476,13478],{"class":38,"line":3340},[36,13459,7276],{"class":49},[36,13461,1923],{"class":53},[36,13463,13414],{"class":998},[36,13465,2194],{"class":53},[36,13467,11616],{"class":49},[36,13469,1923],{"class":53},[36,13471,13423],{"class":998},[36,13473,2194],{"class":53},[36,13475,11629],{"class":49},[36,13477,1923],{"class":53},[36,13479,9587],{"class":49},[36,13481,13482],{"class":38,"line":3348},[36,13483,194],{"emptyLinePlaceholder":193},[36,13485,13486,13489,13491],{"class":38,"line":3353},[36,13487,13488],{"class":2713},"    mySwap03",[36,13490,13402],{"class":49},[36,13492,13493],{"class":42},"\u002F\u002F引用传递，形参会修饰实参\n",[36,13495,13496,13498,13500,13502,13504,13506,13508,13510,13512,13514,13516],{"class":38,"line":3359},[36,13497,7276],{"class":49},[36,13499,1923],{"class":53},[36,13501,13414],{"class":998},[36,13503,2194],{"class":53},[36,13505,11616],{"class":49},[36,13507,1923],{"class":53},[36,13509,13423],{"class":998},[36,13511,2194],{"class":53},[36,13513,11629],{"class":49},[36,13515,1923],{"class":53},[36,13517,9587],{"class":49},[36,13519,13520],{"class":38,"line":3365},[36,13521,194],{"emptyLinePlaceholder":193},[36,13523,13524,13526,13528,13530],{"class":38,"line":3370},[36,13525,3053],{"class":2713},[36,13527,901],{"class":49},[36,13529,3058],{"class":998},[36,13531,3468],{"class":49},[36,13533,13534],{"class":38,"line":8695},[36,13535,194],{"emptyLinePlaceholder":193},[36,13537,13538,13540,13542],{"class":38,"line":8719},[36,13539,4839],{"class":53},[36,13541,4842],{"class":60},[36,13543,2040],{"class":49},[36,13545,13546],{"class":38,"line":8724},[36,13547,2315],{"class":49},[21,13549,13551],{"id":13550},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,13553,13554],{},"作用：引用是可以作为函数的返回值存在的",[14,13556,9772,13557],{},[1043,13558,13559],{},"不要返回局部变量引用",[14,13561,13562],{},"用法：函数调用作为左值",[26,13564,13566],{"className":10688,"code":13565,"language":10690,"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,13567,13568,13573,13581,13596,13602,13606,13610,13615,13623,13640,13646,13650,13654,13662,13666,13671,13685,13705,13724,13728,13733,13746,13766,13784,13788,13804,13808,13827,13845,13849,13859,13863,13871],{"__ignoreMap":31},[36,13569,13570],{"class":38,"line":39},[36,13571,13572],{"class":42},"\u002F\u002F返回局部变量引用\n",[36,13574,13575,13577,13579],{"class":38,"line":46},[36,13576,13310],{"class":53},[36,13578,6335],{"class":2713},[36,13580,11600],{"class":49},[36,13582,13583,13585,13587,13589,13591,13593],{"class":38,"line":78},[36,13584,2735],{"class":53},[36,13586,11616],{"class":49},[36,13588,54],{"class":53},[36,13590,2788],{"class":60},[36,13592,952],{"class":49},[36,13594,13595],{"class":42}," \u002F\u002F局部变量\n",[36,13597,13598,13600],{"class":38,"line":125},[36,13599,4839],{"class":53},[36,13601,2182],{"class":49},[36,13603,13604],{"class":38,"line":131},[36,13605,2315],{"class":49},[36,13607,13608],{"class":38,"line":396},[36,13609,194],{"emptyLinePlaceholder":193},[36,13611,13612],{"class":38,"line":407},[36,13613,13614],{"class":42},"\u002F\u002F返回静态变量引用\n",[36,13616,13617,13619,13621],{"class":38,"line":2061},[36,13618,13310],{"class":53},[36,13620,6404],{"class":2713},[36,13622,11600],{"class":49},[36,13624,13625,13627,13629,13631,13633,13635,13637],{"class":38,"line":2067},[36,13626,11765],{"class":53},[36,13628,3132],{"class":53},[36,13630,11616],{"class":49},[36,13632,54],{"class":53},[36,13634,9697],{"class":60},[36,13636,952],{"class":49},[36,13638,13639],{"class":42},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[36,13641,13642,13644],{"class":38,"line":2079},[36,13643,4839],{"class":53},[36,13645,2182],{"class":49},[36,13647,13648],{"class":38,"line":2362},[36,13649,2315],{"class":49},[36,13651,13652],{"class":38,"line":2367},[36,13653,194],{"emptyLinePlaceholder":193},[36,13655,13656,13658,13660],{"class":38,"line":2373},[36,13657,904],{"class":53},[36,13659,2723],{"class":2713},[36,13661,11600],{"class":49},[36,13663,13664],{"class":38,"line":2378},[36,13665,194],{"emptyLinePlaceholder":193},[36,13667,13668],{"class":38,"line":2392},[36,13669,13670],{"class":42},"    \u002F\u002F不能返回局部变量的引用\n",[36,13672,13673,13676,13679,13681,13683],{"class":38,"line":2397},[36,13674,13675],{"class":53},"    int&",[36,13677,13678],{"class":49}," ref ",[36,13680,54],{"class":53},[36,13682,6335],{"class":2713},[36,13684,6383],{"class":49},[36,13686,13687,13689,13691,13694,13696,13698,13700,13702],{"class":38,"line":2403},[36,13688,7276],{"class":49},[36,13690,1923],{"class":53},[36,13692,13693],{"class":998}," \"ref = \"",[36,13695,2194],{"class":53},[36,13697,13678],{"class":49},[36,13699,1923],{"class":53},[36,13701,12214],{"class":49},[36,13703,13704],{"class":42},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[36,13706,13707,13709,13711,13713,13715,13717,13719,13721],{"class":38,"line":2424},[36,13708,7276],{"class":49},[36,13710,1923],{"class":53},[36,13712,13693],{"class":998},[36,13714,2194],{"class":53},[36,13716,13678],{"class":49},[36,13718,1923],{"class":53},[36,13720,12214],{"class":49},[36,13722,13723],{"class":42},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[36,13725,13726],{"class":38,"line":2429},[36,13727,194],{"emptyLinePlaceholder":193},[36,13729,13730],{"class":38,"line":2443},[36,13731,13732],{"class":42},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[36,13734,13735,13737,13740,13742,13744],{"class":38,"line":2448},[36,13736,13675],{"class":53},[36,13738,13739],{"class":49}," ref2 ",[36,13741,54],{"class":53},[36,13743,6404],{"class":2713},[36,13745,6383],{"class":49},[36,13747,13748,13750,13752,13755,13757,13759,13761,13763],{"class":38,"line":2477},[36,13749,7276],{"class":49},[36,13751,1923],{"class":53},[36,13753,13754],{"class":998}," \"ref2 = \"",[36,13756,2194],{"class":53},[36,13758,13739],{"class":49},[36,13760,1923],{"class":53},[36,13762,12214],{"class":49},[36,13764,13765],{"class":42}," \u002F\u002F20\n",[36,13767,13768,13770,13772,13774,13776,13778,13780,13782],{"class":38,"line":2482},[36,13769,7276],{"class":49},[36,13771,1923],{"class":53},[36,13773,13754],{"class":998},[36,13775,2194],{"class":53},[36,13777,13739],{"class":49},[36,13779,1923],{"class":53},[36,13781,12214],{"class":49},[36,13783,13765],{"class":42},[36,13785,13786],{"class":38,"line":2499},[36,13787,194],{"emptyLinePlaceholder":193},[36,13789,13790,13792,13795,13797,13799,13801],{"class":38,"line":2504},[36,13791,6449],{"class":2713},[36,13793,13794],{"class":49},"() ",[36,13796,54],{"class":53},[36,13798,3748],{"class":60},[36,13800,952],{"class":49},[36,13802,13803],{"class":42},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[36,13805,13806],{"class":38,"line":2509},[36,13807,194],{"emptyLinePlaceholder":193},[36,13809,13810,13812,13814,13816,13818,13820,13822,13824],{"class":38,"line":2514},[36,13811,7276],{"class":49},[36,13813,1923],{"class":53},[36,13815,13754],{"class":998},[36,13817,2194],{"class":53},[36,13819,13739],{"class":49},[36,13821,1923],{"class":53},[36,13823,12214],{"class":49},[36,13825,13826],{"class":42}," \u002F\u002F1000\n",[36,13828,13829,13831,13833,13835,13837,13839,13841,13843],{"class":38,"line":2528},[36,13830,7276],{"class":49},[36,13832,1923],{"class":53},[36,13834,13754],{"class":998},[36,13836,2194],{"class":53},[36,13838,13739],{"class":49},[36,13840,1923],{"class":53},[36,13842,12214],{"class":49},[36,13844,13826],{"class":42},[36,13846,13847],{"class":38,"line":2533},[36,13848,194],{"emptyLinePlaceholder":193},[36,13850,13851,13853,13855,13857],{"class":38,"line":3326},[36,13852,3053],{"class":2713},[36,13854,901],{"class":49},[36,13856,3058],{"class":998},[36,13858,3468],{"class":49},[36,13860,13861],{"class":38,"line":3340},[36,13862,194],{"emptyLinePlaceholder":193},[36,13864,13865,13867,13869],{"class":38,"line":3348},[36,13866,4839],{"class":53},[36,13868,4842],{"class":60},[36,13870,2040],{"class":49},[36,13872,13873],{"class":38,"line":3353},[36,13874,2315],{"class":49},[21,13876,13878],{"id":13877},"_65引用的本质","6.5引用的本质",[14,13880,13881,13882],{},"本质：",[1043,13883,13884],{},"引用的本质在c++内部实现是一个指针常量.",[26,13886,13888],{"className":889,"code":13887,"language":891,"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,13889,13890,13895,13911,13925,13929,13938,13950,13955,13960,13971,13984,13988,14004,14021,14025,14033,14041],{"__ignoreMap":31},[36,13891,13892],{"class":38,"line":39},[36,13893,13894],{"class":42},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[36,13896,13897,13899,13901,13903,13905,13908],{"class":38,"line":46},[36,13898,6111],{"class":53},[36,13900,12130],{"class":2713},[36,13902,901],{"class":49},[36,13904,13310],{"class":53},[36,13906,13907],{"class":416}," ref",[36,13909,13910],{"class":49},"){\n",[36,13912,13913,13916,13918,13920,13922],{"class":38,"line":78},[36,13914,13915],{"class":49},"    ref ",[36,13917,54],{"class":53},[36,13919,6501],{"class":60},[36,13921,952],{"class":49},[36,13923,13924],{"class":42}," \u002F\u002F ref是引用，转换为*ref = 100\n",[36,13926,13927],{"class":38,"line":125},[36,13928,2315],{"class":49},[36,13930,13931,13933,13935],{"class":38,"line":131},[36,13932,904],{"class":53},[36,13934,2723],{"class":2713},[36,13936,13937],{"class":49},"(){\n",[36,13939,13940,13942,13944,13946,13948],{"class":38,"line":396},[36,13941,2735],{"class":53},[36,13943,11616],{"class":49},[36,13945,54],{"class":53},[36,13947,2788],{"class":60},[36,13949,2040],{"class":49},[36,13951,13952],{"class":38,"line":407},[36,13953,13954],{"class":49},"    \n",[36,13956,13957],{"class":38,"line":2061},[36,13958,13959],{"class":42},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[36,13961,13962,13964,13966,13968],{"class":38,"line":2067},[36,13963,13675],{"class":53},[36,13965,13678],{"class":49},[36,13967,54],{"class":53},[36,13969,13970],{"class":49}," a; \n",[36,13972,13973,13975,13977,13979,13981],{"class":38,"line":2079},[36,13974,13915],{"class":49},[36,13976,54],{"class":53},[36,13978,9697],{"class":60},[36,13980,952],{"class":49},[36,13982,13983],{"class":42}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[36,13985,13986],{"class":38,"line":2362},[36,13987,13954],{"class":49},[36,13989,13990,13992,13994,13996,13998,14000,14002],{"class":38,"line":2367},[36,13991,7276],{"class":49},[36,13993,1923],{"class":53},[36,13995,13414],{"class":998},[36,13997,2194],{"class":53},[36,13999,11616],{"class":49},[36,14001,1923],{"class":53},[36,14003,9587],{"class":49},[36,14005,14006,14008,14010,14013,14015,14017,14019],{"class":38,"line":2373},[36,14007,7276],{"class":49},[36,14009,1923],{"class":53},[36,14011,14012],{"class":998}," \"ref:\"",[36,14014,2194],{"class":53},[36,14016,13678],{"class":49},[36,14018,1923],{"class":53},[36,14020,9587],{"class":49},[36,14022,14023],{"class":38,"line":2378},[36,14024,13954],{"class":49},[36,14026,14027,14030],{"class":38,"line":2392},[36,14028,14029],{"class":2713},"    func",[36,14031,14032],{"class":49},"(a);\n",[36,14034,14035,14037,14039],{"class":38,"line":2397},[36,14036,4839],{"class":53},[36,14038,4842],{"class":60},[36,14040,2040],{"class":49},[36,14042,14043],{"class":38,"line":2403},[36,14044,2315],{"class":49},[14,14046,12077],{},[851,14048,14049,14052],{},[854,14050,14051],{},"引用的本质，就是一个指针常量",[854,14053,14054],{},"引用一旦初始化，就不可以发生改变",[21,14056,14058],{"id":14057},"_66常量引用","6.6常量引用",[14,14060,14061],{},"作用：常量引用主要用来修饰形参",[14,14063,14064,14065,14068],{},"在函数形参列表中，可以加",[1043,14066,14067],{},"const修饰形参","，防止形参改变实参",[26,14070,14072],{"className":889,"code":14071,"language":891,"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,14073,14074,14079,14084,14103,14108,14121,14125,14129,14137,14141,14146,14151,14165,14169,14177,14189,14193,14198,14210,14217,14221,14231,14235,14243],{"__ignoreMap":31},[36,14075,14076],{"class":38,"line":39},[36,14077,14078],{"class":42},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[36,14080,14081],{"class":38,"line":46},[36,14082,14083],{"class":42},"\u002F\u002F加上const就不能修改实参的\n",[36,14085,14086,14088,14091,14093,14095,14098,14101],{"class":38,"line":78},[36,14087,6111],{"class":53},[36,14089,14090],{"class":2713}," showValue",[36,14092,901],{"class":49},[36,14094,7539],{"class":53},[36,14096,14097],{"class":53}," int&",[36,14099,14100],{"class":416}," v",[36,14102,13186],{"class":49},[36,14104,14105],{"class":38,"line":125},[36,14106,14107],{"class":42},"    \u002F\u002Fv += 100;\n",[36,14109,14110,14112,14114,14117,14119],{"class":38,"line":131},[36,14111,7276],{"class":49},[36,14113,1923],{"class":53},[36,14115,14116],{"class":49}," v ",[36,14118,1923],{"class":53},[36,14120,9587],{"class":49},[36,14122,14123],{"class":38,"line":396},[36,14124,2315],{"class":49},[36,14126,14127],{"class":38,"line":407},[36,14128,194],{"emptyLinePlaceholder":193},[36,14130,14131,14133,14135],{"class":38,"line":2061},[36,14132,904],{"class":53},[36,14134,2723],{"class":2713},[36,14136,11600],{"class":49},[36,14138,14139],{"class":38,"line":2067},[36,14140,194],{"emptyLinePlaceholder":193},[36,14142,14143],{"class":38,"line":2079},[36,14144,14145],{"class":42},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[36,14147,14148],{"class":38,"line":2362},[36,14149,14150],{"class":42},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[36,14152,14153,14155,14157,14159,14161,14163],{"class":38,"line":2367},[36,14154,11966],{"class":53},[36,14156,14097],{"class":53},[36,14158,13678],{"class":49},[36,14160,54],{"class":53},[36,14162,2788],{"class":60},[36,14164,2040],{"class":49},[36,14166,14167],{"class":38,"line":2373},[36,14168,194],{"emptyLinePlaceholder":193},[36,14170,14171,14174],{"class":38,"line":2378},[36,14172,14173],{"class":42},"    \u002F\u002Fref = 100;",[36,14175,14176],{"class":42},"  \u002F\u002F加入const后不可以修改变量\n",[36,14178,14179,14181,14183,14185,14187],{"class":38,"line":2392},[36,14180,7276],{"class":49},[36,14182,1923],{"class":53},[36,14184,13678],{"class":49},[36,14186,1923],{"class":53},[36,14188,9587],{"class":49},[36,14190,14191],{"class":38,"line":2397},[36,14192,194],{"emptyLinePlaceholder":193},[36,14194,14195],{"class":38,"line":2403},[36,14196,14197],{"class":42},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[36,14199,14200,14202,14204,14206,14208],{"class":38,"line":2424},[36,14201,2735],{"class":53},[36,14203,11616],{"class":49},[36,14205,54],{"class":53},[36,14207,2788],{"class":60},[36,14209,2040],{"class":49},[36,14211,14212,14215],{"class":38,"line":2429},[36,14213,14214],{"class":2713},"    showValue",[36,14216,14032],{"class":49},[36,14218,14219],{"class":38,"line":2443},[36,14220,194],{"emptyLinePlaceholder":193},[36,14222,14223,14225,14227,14229],{"class":38,"line":2448},[36,14224,3053],{"class":2713},[36,14226,901],{"class":49},[36,14228,3058],{"class":998},[36,14230,3468],{"class":49},[36,14232,14233],{"class":38,"line":2477},[36,14234,194],{"emptyLinePlaceholder":193},[36,14236,14237,14239,14241],{"class":38,"line":2482},[36,14238,4839],{"class":53},[36,14240,4842],{"class":60},[36,14242,2040],{"class":49},[36,14244,14245],{"class":38,"line":2499},[36,14246,2315],{"class":49},[807,14248,14249],{},"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":46,"depth":46,"links":14251},[14252,14253,14254,14255,14256,14257],{"id":12785,"depth":46,"text":12786},{"id":12964,"depth":46,"text":12965},{"id":13147,"depth":46,"text":13148},{"id":13550,"depth":46,"text":13551},{"id":13877,"depth":46,"text":13878},{"id":14057,"depth":46,"text":14058},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12777,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":14264,"title":14265,"body":14266,"description":31,"extension":824,"meta":15347,"navigation":193,"path":15348,"seo":15349,"stem":15350,"__hash__":15351},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":14267,"toc":15339},[14268,14271,14275,14278,14283,14515,14517,14528,14532,14535,14543,14647,14650,14654,14657,14661,14664,14669,14691,14697,15024,15027,15031,15039,15336],[10,14269,14265],{"id":14270},"_7函数高级部分",[21,14272,14274],{"id":14273},"_71函数默认参数","7.1函数默认参数",[14,14276,14277],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,14279,5929,14280],{},[33,14281,14282],{}," 返回值类型  函数名 （参数= 默认值）{}",[26,14284,14286],{"className":889,"code":14285,"language":891,"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,14287,14288,14323,14338,14342,14346,14351,14356,14385,14405,14415,14419,14423,14431,14435,14463,14485,14489,14499,14503,14511],{"__ignoreMap":31},[36,14289,14290,14292,14294,14296,14298,14300,14302,14304,14306,14309,14311,14313,14315,14317,14319,14321],{"class":38,"line":39},[36,14291,904],{"class":53},[36,14293,12130],{"class":2713},[36,14295,901],{"class":49},[36,14297,904],{"class":53},[36,14299,2148],{"class":416},[36,14301,154],{"class":49},[36,14303,904],{"class":53},[36,14305,3582],{"class":416},[36,14307,14308],{"class":53}," =",[36,14310,2788],{"class":60},[36,14312,154],{"class":49},[36,14314,904],{"class":53},[36,14316,3598],{"class":416},[36,14318,14308],{"class":53},[36,14320,2788],{"class":60},[36,14322,13186],{"class":49},[36,14324,14325,14327,14329,14331,14333,14335],{"class":38,"line":46},[36,14326,4839],{"class":53},[36,14328,11616],{"class":49},[36,14330,1365],{"class":53},[36,14332,11629],{"class":49},[36,14334,1365],{"class":53},[36,14336,14337],{"class":49}," c;\n",[36,14339,14340],{"class":38,"line":78},[36,14341,2315],{"class":49},[36,14343,14344],{"class":38,"line":125},[36,14345,194],{"emptyLinePlaceholder":193},[36,14347,14348],{"class":38,"line":131},[36,14349,14350],{"class":42},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[36,14352,14353],{"class":38,"line":396},[36,14354,14355],{"class":42},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[36,14357,14358,14360,14363,14365,14367,14369,14371,14373,14375,14377,14379,14381,14383],{"class":38,"line":407},[36,14359,904],{"class":53},[36,14361,14362],{"class":2713}," func2",[36,14364,901],{"class":49},[36,14366,904],{"class":53},[36,14368,2148],{"class":416},[36,14370,14308],{"class":53},[36,14372,2788],{"class":60},[36,14374,154],{"class":49},[36,14376,904],{"class":53},[36,14378,3582],{"class":416},[36,14380,14308],{"class":53},[36,14382,2788],{"class":60},[36,14384,3468],{"class":49},[36,14386,14387,14389,14391,14393,14395,14397,14399,14401,14403],{"class":38,"line":2061},[36,14388,904],{"class":53},[36,14390,14362],{"class":2713},[36,14392,901],{"class":49},[36,14394,904],{"class":53},[36,14396,2148],{"class":416},[36,14398,154],{"class":49},[36,14400,904],{"class":53},[36,14402,3582],{"class":416},[36,14404,13186],{"class":49},[36,14406,14407,14409,14411,14413],{"class":38,"line":2067},[36,14408,4839],{"class":53},[36,14410,11616],{"class":49},[36,14412,1365],{"class":53},[36,14414,13207],{"class":49},[36,14416,14417],{"class":38,"line":2079},[36,14418,2315],{"class":49},[36,14420,14421],{"class":38,"line":2362},[36,14422,194],{"emptyLinePlaceholder":193},[36,14424,14425,14427,14429],{"class":38,"line":2367},[36,14426,904],{"class":53},[36,14428,2723],{"class":2713},[36,14430,11600],{"class":49},[36,14432,14433],{"class":38,"line":2373},[36,14434,194],{"emptyLinePlaceholder":193},[36,14436,14437,14439,14441,14444,14446,14448,14450,14452,14454,14456,14459,14461],{"class":38,"line":2378},[36,14438,7276],{"class":49},[36,14440,1923],{"class":53},[36,14442,14443],{"class":998}," \"ret = \"",[36,14445,2194],{"class":53},[36,14447,12130],{"class":2713},[36,14449,901],{"class":49},[36,14451,72],{"class":60},[36,14453,154],{"class":49},[36,14455,72],{"class":60},[36,14457,14458],{"class":49},") ",[36,14460,1923],{"class":53},[36,14462,9587],{"class":49},[36,14464,14465,14467,14469,14471,14473,14475,14477,14479,14481,14483],{"class":38,"line":2392},[36,14466,7276],{"class":49},[36,14468,1923],{"class":53},[36,14470,14443],{"class":998},[36,14472,2194],{"class":53},[36,14474,12130],{"class":2713},[36,14476,901],{"class":49},[36,14478,67],{"class":60},[36,14480,14458],{"class":49},[36,14482,1923],{"class":53},[36,14484,9587],{"class":49},[36,14486,14487],{"class":38,"line":2397},[36,14488,194],{"emptyLinePlaceholder":193},[36,14490,14491,14493,14495,14497],{"class":38,"line":2403},[36,14492,3053],{"class":2713},[36,14494,901],{"class":49},[36,14496,3058],{"class":998},[36,14498,3468],{"class":49},[36,14500,14501],{"class":38,"line":2424},[36,14502,194],{"emptyLinePlaceholder":193},[36,14504,14505,14507,14509],{"class":38,"line":2429},[36,14506,4839],{"class":53},[36,14508,4842],{"class":60},[36,14510,2040],{"class":49},[36,14512,14513],{"class":38,"line":2443},[36,14514,2315],{"class":49},[14,14516,12077],{},[851,14518,14519,14522,14525],{},[854,14520,14521],{},"我传就用我；没传就用你",[854,14523,14524],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[854,14526,14527],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[21,14529,14531],{"id":14530},"_72函数的占位参数","7.2函数的占位参数",[14,14533,14534],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,14536,14537,14539,14540],{},[1043,14538,5929],{}," ",[33,14541,14542],{},"返回值类型 函数名 (数据类型){}",[26,14544,14546],{"className":889,"code":14545,"language":891,"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,14547,14548,14553,14571,14584,14588,14596,14600,14617,14621,14631,14635,14643],{"__ignoreMap":31},[36,14549,14550],{"class":38,"line":39},[36,14551,14552],{"class":42},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[36,14554,14555,14557,14559,14561,14563,14565,14567,14569],{"class":38,"line":46},[36,14556,6111],{"class":53},[36,14558,12130],{"class":2713},[36,14560,901],{"class":49},[36,14562,904],{"class":53},[36,14564,2148],{"class":416},[36,14566,154],{"class":49},[36,14568,904],{"class":53},[36,14570,13186],{"class":49},[36,14572,14573,14575,14577,14580,14582],{"class":38,"line":78},[36,14574,7276],{"class":49},[36,14576,1923],{"class":53},[36,14578,14579],{"class":998}," \"this is func\"",[36,14581,2194],{"class":53},[36,14583,9587],{"class":49},[36,14585,14586],{"class":38,"line":125},[36,14587,2315],{"class":49},[36,14589,14590,14592,14594],{"class":38,"line":131},[36,14591,904],{"class":53},[36,14593,2723],{"class":2713},[36,14595,11600],{"class":49},[36,14597,14598],{"class":38,"line":396},[36,14599,194],{"emptyLinePlaceholder":193},[36,14601,14602,14604,14606,14608,14610,14612,14614],{"class":38,"line":407},[36,14603,14029],{"class":2713},[36,14605,901],{"class":49},[36,14607,332],{"class":60},[36,14609,64],{"class":49},[36,14611,332],{"class":60},[36,14613,6713],{"class":49},[36,14615,14616],{"class":42}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[36,14618,14619],{"class":38,"line":2061},[36,14620,194],{"emptyLinePlaceholder":193},[36,14622,14623,14625,14627,14629],{"class":38,"line":2067},[36,14624,3053],{"class":2713},[36,14626,901],{"class":49},[36,14628,3058],{"class":998},[36,14630,3468],{"class":49},[36,14632,14633],{"class":38,"line":2079},[36,14634,194],{"emptyLinePlaceholder":193},[36,14636,14637,14639,14641],{"class":38,"line":2362},[36,14638,4839],{"class":53},[36,14640,4842],{"class":60},[36,14642,2040],{"class":49},[36,14644,14645],{"class":38,"line":2367},[36,14646,2315],{"class":49},[14,14648,14649],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[21,14651,14653],{"id":14652},"_73函数重载","7.3函数重载",[14,14655,14656],{},"意思是函数名是可以相同的",[868,14658,14660],{"id":14659},"_731基本语法","7.3.1基本语法",[14,14662,14663],{},"作用：函数名可以相同，提高复用性",[14,14665,14666],{},[1043,14667,14668],{},"函数重载满足条件：",[1886,14670,14671,14674,14677],{},[854,14672,14673],{},"同一个作用域下",[854,14675,14676],{},"函数名称相同",[854,14678,14679,14680,14683,14684,14687,14688],{},"函数参数",[1043,14681,14682],{},"类型不同","  或者 ",[1043,14685,14686],{},"个数不同"," 或者 ",[1043,14689,14690],{},"顺序不同",[14,14692,14693,14696],{},[1043,14694,14695],{},"注意:","  函数的返回值不可以作为函数重载的条件",[26,14698,14700],{"className":10688,"code":14699,"language":10690,"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,14701,14702,14707,14715,14719,14732,14736,14750,14754,14767,14771,14786,14790,14803,14807,14828,14832,14845,14849,14869,14873,14886,14890,14894,14899,14904,14909,14914,14919,14923,14927,14935,14939,14945,14955,14965,14979,14994,14998,15008,15012,15020],{"__ignoreMap":31},[36,14703,14704],{"class":38,"line":39},[36,14705,14706],{"class":42},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[36,14708,14709,14711,14713],{"class":38,"line":46},[36,14710,6111],{"class":53},[36,14712,12130],{"class":2713},[36,14714,2726],{"class":49},[36,14716,14717],{"class":38,"line":78},[36,14718,2296],{"class":49},[36,14720,14721,14723,14725,14728,14730],{"class":38,"line":125},[36,14722,7276],{"class":49},[36,14724,1923],{"class":53},[36,14726,14727],{"class":998}," \"func 的调用！\"",[36,14729,2194],{"class":53},[36,14731,9587],{"class":49},[36,14733,14734],{"class":38,"line":131},[36,14735,2315],{"class":49},[36,14737,14738,14740,14742,14744,14746,14748],{"class":38,"line":396},[36,14739,6111],{"class":53},[36,14741,12130],{"class":2713},[36,14743,901],{"class":49},[36,14745,904],{"class":53},[36,14747,2148],{"class":416},[36,14749,75],{"class":49},[36,14751,14752],{"class":38,"line":407},[36,14753,2296],{"class":49},[36,14755,14756,14758,14760,14763,14765],{"class":38,"line":2061},[36,14757,7276],{"class":49},[36,14759,1923],{"class":53},[36,14761,14762],{"class":998}," \"func (int a) 的调用！\"",[36,14764,2194],{"class":53},[36,14766,9587],{"class":49},[36,14768,14769],{"class":38,"line":2067},[36,14770,2315],{"class":49},[36,14772,14773,14775,14777,14779,14782,14784],{"class":38,"line":2079},[36,14774,6111],{"class":53},[36,14776,12130],{"class":2713},[36,14778,901],{"class":49},[36,14780,14781],{"class":53},"double",[36,14783,2148],{"class":416},[36,14785,75],{"class":49},[36,14787,14788],{"class":38,"line":2362},[36,14789,2296],{"class":49},[36,14791,14792,14794,14796,14799,14801],{"class":38,"line":2367},[36,14793,7276],{"class":49},[36,14795,1923],{"class":53},[36,14797,14798],{"class":998}," \"func (double a)的调用！\"",[36,14800,2194],{"class":53},[36,14802,9587],{"class":49},[36,14804,14805],{"class":38,"line":2373},[36,14806,2315],{"class":49},[36,14808,14809,14811,14813,14815,14817,14819,14822,14824,14826],{"class":38,"line":2378},[36,14810,6111],{"class":53},[36,14812,12130],{"class":2713},[36,14814,901],{"class":49},[36,14816,904],{"class":53},[36,14818,2148],{"class":416},[36,14820,14821],{"class":49}," ,",[36,14823,14781],{"class":53},[36,14825,3582],{"class":416},[36,14827,75],{"class":49},[36,14829,14830],{"class":38,"line":2392},[36,14831,2296],{"class":49},[36,14833,14834,14836,14838,14841,14843],{"class":38,"line":2397},[36,14835,7276],{"class":49},[36,14837,1923],{"class":53},[36,14839,14840],{"class":998}," \"func (int a ,double b) 的调用！\"",[36,14842,2194],{"class":53},[36,14844,9587],{"class":49},[36,14846,14847],{"class":38,"line":2403},[36,14848,2315],{"class":49},[36,14850,14851,14853,14855,14857,14859,14861,14863,14865,14867],{"class":38,"line":2424},[36,14852,6111],{"class":53},[36,14854,12130],{"class":2713},[36,14856,901],{"class":49},[36,14858,14781],{"class":53},[36,14860,2148],{"class":416},[36,14862,14821],{"class":49},[36,14864,904],{"class":53},[36,14866,3582],{"class":416},[36,14868,75],{"class":49},[36,14870,14871],{"class":38,"line":2429},[36,14872,2296],{"class":49},[36,14874,14875,14877,14879,14882,14884],{"class":38,"line":2443},[36,14876,7276],{"class":49},[36,14878,1923],{"class":53},[36,14880,14881],{"class":998}," \"func (double a ,int b)的调用！\"",[36,14883,2194],{"class":53},[36,14885,9587],{"class":49},[36,14887,14888],{"class":38,"line":2448},[36,14889,2315],{"class":49},[36,14891,14892],{"class":38,"line":2477},[36,14893,194],{"emptyLinePlaceholder":193},[36,14895,14896],{"class":38,"line":2482},[36,14897,14898],{"class":42},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[36,14900,14901],{"class":38,"line":2499},[36,14902,14903],{"class":42},"\u002F\u002Fint func(double a, int b)\n",[36,14905,14906],{"class":38,"line":2504},[36,14907,14908],{"class":42},"\u002F\u002F{\n",[36,14910,14911],{"class":38,"line":2509},[36,14912,14913],{"class":42},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[36,14915,14916],{"class":38,"line":2514},[36,14917,14918],{"class":42},"\u002F\u002F}\n",[36,14920,14921],{"class":38,"line":2528},[36,14922,194],{"emptyLinePlaceholder":193},[36,14924,14925],{"class":38,"line":2533},[36,14926,194],{"emptyLinePlaceholder":193},[36,14928,14929,14931,14933],{"class":38,"line":3326},[36,14930,904],{"class":53},[36,14932,2723],{"class":2713},[36,14934,11600],{"class":49},[36,14936,14937],{"class":38,"line":3340},[36,14938,194],{"emptyLinePlaceholder":193},[36,14940,14941,14943],{"class":38,"line":3348},[36,14942,14029],{"class":2713},[36,14944,6383],{"class":49},[36,14946,14947,14949,14951,14953],{"class":38,"line":3353},[36,14948,14029],{"class":2713},[36,14950,901],{"class":49},[36,14952,332],{"class":60},[36,14954,3468],{"class":49},[36,14956,14957,14959,14961,14963],{"class":38,"line":3359},[36,14958,14029],{"class":2713},[36,14960,901],{"class":49},[36,14962,946],{"class":60},[36,14964,3468],{"class":49},[36,14966,14967,14969,14971,14973,14975,14977],{"class":38,"line":3365},[36,14968,14029],{"class":2713},[36,14970,901],{"class":49},[36,14972,332],{"class":60},[36,14974,64],{"class":49},[36,14976,946],{"class":60},[36,14978,3468],{"class":49},[36,14980,14981,14983,14985,14987,14990,14992],{"class":38,"line":3370},[36,14982,14029],{"class":2713},[36,14984,901],{"class":49},[36,14986,946],{"class":60},[36,14988,14989],{"class":49}," , ",[36,14991,332],{"class":60},[36,14993,3468],{"class":49},[36,14995,14996],{"class":38,"line":8695},[36,14997,13954],{"class":49},[36,14999,15000,15002,15004,15006],{"class":38,"line":8719},[36,15001,3053],{"class":2713},[36,15003,901],{"class":49},[36,15005,3058],{"class":998},[36,15007,3468],{"class":49},[36,15009,15010],{"class":38,"line":8724},[36,15011,194],{"emptyLinePlaceholder":193},[36,15013,15014,15016,15018],{"class":38,"line":8730},[36,15015,4839],{"class":53},[36,15017,4842],{"class":60},[36,15019,2040],{"class":49},[36,15021,15022],{"class":38,"line":8757},[36,15023,2315],{"class":49},[14,15025,15026],{},"重点：函数返回值不可以作为函数重载条件！",[868,15028,15030],{"id":15029},"_732注意事项","7.3.2注意事项",[1886,15032,15033,15036],{},[854,15034,15035],{},"引用作为重载条件!!!",[854,15037,15038],{},"函数重载碰到函数默认参数",[26,15040,15042],{"className":889,"code":15041,"language":891,"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,15043,15044,15049,15054,15058,15074,15078,15091,15095,15099,15117,15121,15134,15138,15142,15146,15151,15155,15179,15183,15196,15200,15204,15218,15222,15235,15239,15243,15251,15255,15267,15277,15290,15294,15298,15306,15310,15320,15324,15332],{"__ignoreMap":31},[36,15045,15046],{"class":38,"line":39},[36,15047,15048],{"class":42},"\u002F\u002F函数重载注意事项\n",[36,15050,15051],{"class":38,"line":46},[36,15052,15053],{"class":42},"\u002F\u002F1、引用作为重载条件\n",[36,15055,15056],{"class":38,"line":78},[36,15057,194],{"emptyLinePlaceholder":193},[36,15059,15060,15062,15064,15066,15068,15070,15072],{"class":38,"line":125},[36,15061,6111],{"class":53},[36,15063,12130],{"class":2713},[36,15065,901],{"class":49},[36,15067,904],{"class":53},[36,15069,11331],{"class":53},[36,15071,50],{"class":416},[36,15073,75],{"class":49},[36,15075,15076],{"class":38,"line":131},[36,15077,2296],{"class":49},[36,15079,15080,15082,15084,15087,15089],{"class":38,"line":396},[36,15081,7276],{"class":49},[36,15083,1923],{"class":53},[36,15085,15086],{"class":998}," \"func (int &a) 调用 \"",[36,15088,2194],{"class":53},[36,15090,9587],{"class":49},[36,15092,15093],{"class":38,"line":407},[36,15094,2315],{"class":49},[36,15096,15097],{"class":38,"line":2061},[36,15098,194],{"emptyLinePlaceholder":193},[36,15100,15101,15103,15105,15107,15109,15111,15113,15115],{"class":38,"line":2067},[36,15102,6111],{"class":53},[36,15104,12130],{"class":2713},[36,15106,901],{"class":49},[36,15108,7539],{"class":53},[36,15110,3132],{"class":53},[36,15112,11331],{"class":53},[36,15114,50],{"class":416},[36,15116,75],{"class":49},[36,15118,15119],{"class":38,"line":2079},[36,15120,2296],{"class":49},[36,15122,15123,15125,15127,15130,15132],{"class":38,"line":2362},[36,15124,7276],{"class":49},[36,15126,1923],{"class":53},[36,15128,15129],{"class":998}," \"func (const int &a) 调用 \"",[36,15131,2194],{"class":53},[36,15133,9587],{"class":49},[36,15135,15136],{"class":38,"line":2367},[36,15137,2315],{"class":49},[36,15139,15140],{"class":38,"line":2373},[36,15141,194],{"emptyLinePlaceholder":193},[36,15143,15144],{"class":38,"line":2378},[36,15145,194],{"emptyLinePlaceholder":193},[36,15147,15148],{"class":38,"line":2392},[36,15149,15150],{"class":42},"\u002F\u002F2、函数重载碰到函数默认参数\n",[36,15152,15153],{"class":38,"line":2397},[36,15154,194],{"emptyLinePlaceholder":193},[36,15156,15157,15159,15161,15163,15165,15167,15169,15171,15173,15175,15177],{"class":38,"line":2403},[36,15158,6111],{"class":53},[36,15160,14362],{"class":2713},[36,15162,901],{"class":49},[36,15164,904],{"class":53},[36,15166,2148],{"class":416},[36,15168,154],{"class":49},[36,15170,904],{"class":53},[36,15172,3582],{"class":416},[36,15174,14308],{"class":53},[36,15176,2788],{"class":60},[36,15178,75],{"class":49},[36,15180,15181],{"class":38,"line":2424},[36,15182,2296],{"class":49},[36,15184,15185,15187,15189,15192,15194],{"class":38,"line":2429},[36,15186,7276],{"class":49},[36,15188,1923],{"class":53},[36,15190,15191],{"class":998}," \"func2(int a, int b = 10) 调用\"",[36,15193,2194],{"class":53},[36,15195,9587],{"class":49},[36,15197,15198],{"class":38,"line":2443},[36,15199,2315],{"class":49},[36,15201,15202],{"class":38,"line":2448},[36,15203,194],{"emptyLinePlaceholder":193},[36,15205,15206,15208,15210,15212,15214,15216],{"class":38,"line":2477},[36,15207,6111],{"class":53},[36,15209,14362],{"class":2713},[36,15211,901],{"class":49},[36,15213,904],{"class":53},[36,15215,2148],{"class":416},[36,15217,75],{"class":49},[36,15219,15220],{"class":38,"line":2482},[36,15221,2296],{"class":49},[36,15223,15224,15226,15228,15231,15233],{"class":38,"line":2499},[36,15225,7276],{"class":49},[36,15227,1923],{"class":53},[36,15229,15230],{"class":998}," \"func2(int a) 调用\"",[36,15232,2194],{"class":53},[36,15234,9587],{"class":49},[36,15236,15237],{"class":38,"line":2504},[36,15238,2315],{"class":49},[36,15240,15241],{"class":38,"line":2509},[36,15242,194],{"emptyLinePlaceholder":193},[36,15244,15245,15247,15249],{"class":38,"line":2514},[36,15246,904],{"class":53},[36,15248,2723],{"class":2713},[36,15250,11600],{"class":49},[36,15252,15253],{"class":38,"line":2528},[36,15254,13954],{"class":49},[36,15256,15257,15259,15261,15263,15265],{"class":38,"line":2533},[36,15258,2735],{"class":53},[36,15260,11616],{"class":49},[36,15262,54],{"class":53},[36,15264,2788],{"class":60},[36,15266,2040],{"class":49},[36,15268,15269,15271,15274],{"class":38,"line":3326},[36,15270,14029],{"class":2713},[36,15272,15273],{"class":49},"(a);",[36,15275,15276],{"class":42}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[36,15278,15279,15281,15283,15285,15287],{"class":38,"line":3340},[36,15280,14029],{"class":2713},[36,15282,901],{"class":49},[36,15284,332],{"class":60},[36,15286,6713],{"class":49},[36,15288,15289],{"class":42},"\u002F\u002F调用有const   10是个常量\n",[36,15291,15292],{"class":38,"line":3348},[36,15293,194],{"emptyLinePlaceholder":193},[36,15295,15296],{"class":38,"line":3353},[36,15297,194],{"emptyLinePlaceholder":193},[36,15299,15300,15303],{"class":38,"line":3359},[36,15301,15302],{"class":42},"    \u002F\u002Ffunc2(10);",[36,15304,15305],{"class":42}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[36,15307,15308],{"class":38,"line":3365},[36,15309,194],{"emptyLinePlaceholder":193},[36,15311,15312,15314,15316,15318],{"class":38,"line":3370},[36,15313,3053],{"class":2713},[36,15315,901],{"class":49},[36,15317,3058],{"class":998},[36,15319,3468],{"class":49},[36,15321,15322],{"class":38,"line":8695},[36,15323,194],{"emptyLinePlaceholder":193},[36,15325,15326,15328,15330],{"class":38,"line":8719},[36,15327,4839],{"class":53},[36,15329,4842],{"class":60},[36,15331,2040],{"class":49},[36,15333,15334],{"class":38,"line":8724},[36,15335,2315],{"class":49},[807,15337,15338],{},"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":46,"depth":46,"links":15340},[15341,15342,15343],{"id":14273,"depth":46,"text":14274},{"id":14530,"depth":46,"text":14531},{"id":14652,"depth":46,"text":14653,"children":15344},[15345,15346],{"id":14659,"depth":78,"text":14660},{"id":15029,"depth":78,"text":15030},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":14265,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15353,"title":15354,"body":15355,"description":24109,"extension":824,"meta":24110,"navigation":193,"path":24111,"seo":24112,"stem":24113,"__hash__":24114},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15356,"toc":24090},[15357,15360,15366,15373,15378,15381,15384,15387,15391,15395,15398,15401,15409,15414,15417,15424,15429,15588,15591,15844,15847,15850,15853,15858,15861,15864,15875,15880,16116,16120,16130,16133,16141,16288,16292,16295,16298,16302,16747,16751,16759,16767,17679,17686,17691,18319,18322,18325,18328,18447,18450,18537,18540,18666,18669,18763,18766,19119,19123,19131,19135,19142,19145,19148,19159,19165,19170,19182,19190,19210,19218,19235,19421,19424,19428,19431,19434,19437,19440,19443,19446,19449,19909,19915,19919,19922,19933,20520,20523,21012,21016,21019,21022,21025,21028,21031,21039,21435,21439,21442,21445,21892,21895,21898,21903,21906,21911,21914,21918,21921,21923,21929,21932,22238,22248,22289,22293,22296,22298,22331,22334,22641,22643,22658,22661,22684,22693,22699,22702,22706,22709,22712,22717,22728,22733,22741,22746,22876,22879,22882,23057,23062,23274,23278,23281,23395,23400,23639,23643,23647,23650,23653,23658,23763,23766,23769,23772,23776,23887,23890,23893,23898,23950,23953,23956,23961,24007,24010,24015,24083,24085,24088],[10,15358,15354],{"id":15359},"_8类和对象",[14,15361,15362,15363],{},"C++面向对象的三大特性为",[1043,15364,15365],{},"封装、继承、多态",[14,15367,15368,15369,15372],{},"C++认为",[1043,15370,15371],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,15374,15375],{},[1043,15376,15377],{},"例如：",[14,15379,15380],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,15382,15383],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,15385,15386],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[21,15388,15390],{"id":15389},"_81封装","8.1封装",[868,15392,15394],{"id":15393},"_811封装的意义","8.1.1封装的意义",[14,15396,15397],{},"封装是C++面向对象三大特性之一",[14,15399,15400],{},"封装的意义：",[1886,15402,15403,15406],{},[854,15404,15405],{},"将属性和行为作为一个整体，表现生活中的事物",[854,15407,15408],{},"将属性和行为加以权限控制",[14,15410,15411],{},[1043,15412,15413],{},"封装意义一：",[14,15415,15416],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,15418,15419,14539,15421],{},[1043,15420,5929],{},[33,15422,15423],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[851,15425,15426],{},[854,15427,15428],{},"**示例1：**设计一个圆类，求圆的周长",[26,15430,15432],{"className":889,"code":15431,"language":891,"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,15433,15434,15442,15446,15451,15456,15461,15466,15473,15478,15488,15492,15510,15514,15518,15526,15530,15535,15540,15545,15550,15561,15584],{"__ignoreMap":31},[36,15435,15436,15439],{"class":38,"line":39},[36,15437,15438],{"class":53},"class",[36,15440,15441],{"class":2713}," Circle\n",[36,15443,15444],{"class":38,"line":46},[36,15445,2296],{"class":49},[36,15447,15448],{"class":38,"line":78},[36,15449,15450],{"class":42},"    \u002F\u002F访问权限\n",[36,15452,15453],{"class":38,"line":125},[36,15454,15455],{"class":42},"    \u002F\u002F公共权限\n",[36,15457,15458],{"class":38,"line":131},[36,15459,15460],{"class":53},"public:\n",[36,15462,15463],{"class":38,"line":396},[36,15464,15465],{"class":42},"    \u002F\u002F属性\n",[36,15467,15468,15470],{"class":38,"line":407},[36,15469,2735],{"class":53},[36,15471,15472],{"class":49}," m_r;\n",[36,15474,15475],{"class":38,"line":2061},[36,15476,15477],{"class":42},"    \u002F\u002F行为\n",[36,15479,15480,15483,15486],{"class":38,"line":2067},[36,15481,15482],{"class":53},"    double",[36,15484,15485],{"class":2713}," calculateZC",[36,15487,2726],{"class":49},[36,15489,15490],{"class":38,"line":2079},[36,15491,2780],{"class":49},[36,15493,15494,15497,15500,15502,15505,15507],{"class":38,"line":2362},[36,15495,15496],{"class":53},"        return",[36,15498,15499],{"class":60}," 2",[36,15501,1339],{"class":53},[36,15503,15504],{"class":49},"PI",[36,15506,1339],{"class":53},[36,15508,15509],{"class":49},"m_r;\n",[36,15511,15512],{"class":38,"line":2367},[36,15513,2937],{"class":49},[36,15515,15516],{"class":38,"line":2373},[36,15517,4744],{"class":49},[36,15519,15520,15522,15524],{"class":38,"line":2378},[36,15521,904],{"class":53},[36,15523,2723],{"class":2713},[36,15525,2726],{"class":49},[36,15527,15528],{"class":38,"line":2392},[36,15529,2296],{"class":49},[36,15531,15532],{"class":38,"line":2397},[36,15533,15534],{"class":42},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[36,15536,15537],{"class":38,"line":2403},[36,15538,15539],{"class":42},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[36,15541,15542],{"class":38,"line":2424},[36,15543,15544],{"class":49},"    Circle c1;\n",[36,15546,15547],{"class":38,"line":2429},[36,15548,15549],{"class":42},"    \u002F\u002F给圆对象 的属性进行赋值\n",[36,15551,15552,15555,15557,15559],{"class":38,"line":2443},[36,15553,15554],{"class":49},"    c1.m_r",[36,15556,54],{"class":53},[36,15558,332],{"class":60},[36,15560,2040],{"class":49},[36,15562,15563,15565,15567,15570,15572,15575,15578,15580,15582],{"class":38,"line":2448},[36,15564,2301],{"class":49},[36,15566,1923],{"class":53},[36,15568,15569],{"class":998},"\"圆的周长\"",[36,15571,1923],{"class":53},[36,15573,15574],{"class":49},"c1.",[36,15576,15577],{"class":2713},"calculateZC",[36,15579,3176],{"class":49},[36,15581,1923],{"class":53},[36,15583,1945],{"class":49},[36,15585,15586],{"class":38,"line":2477},[36,15587,2315],{"class":49},[14,15589,15590],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[26,15592,15594],{"className":889,"code":15593,"language":891,"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,15595,15596,15602,15612,15618,15624,15628,15632,15637,15644,15649,15667,15671,15681,15685,15690,15706,15710,15720,15724,15729,15737,15741,15773,15777,15781,15789,15793,15798,15803,15817,15831,15840],{"__ignoreMap":31},[36,15597,15598,15600],{"class":38,"line":39},[36,15599,2699],{"class":53},[36,15601,2702],{"class":998},[36,15603,15604,15606,15608,15610],{"class":38,"line":46},[36,15605,2707],{"class":53},[36,15607,2710],{"class":53},[36,15609,2714],{"class":2713},[36,15611,2040],{"class":49},[36,15613,15614,15616],{"class":38,"line":78},[36,15615,2699],{"class":53},[36,15617,8496],{"class":998},[36,15619,15620,15622],{"class":38,"line":125},[36,15621,15438],{"class":53},[36,15623,8509],{"class":2713},[36,15625,15626],{"class":38,"line":131},[36,15627,2296],{"class":49},[36,15629,15630],{"class":38,"line":396},[36,15631,15460],{"class":53},[36,15633,15634],{"class":38,"line":407},[36,15635,15636],{"class":49},"    string m_name;\n",[36,15638,15639,15641],{"class":38,"line":2061},[36,15640,2735],{"class":53},[36,15642,15643],{"class":49}," m_id;\n",[36,15645,15646],{"class":38,"line":2067},[36,15647,15648],{"class":42},"    \u002F\u002F赋值姓名\n",[36,15650,15651,15654,15657,15659,15662,15665],{"class":38,"line":2079},[36,15652,15653],{"class":53},"    void",[36,15655,15656],{"class":2713}," setName",[36,15658,901],{"class":49},[36,15660,15661],{"class":2713},"string",[36,15663,15664],{"class":416}," name",[36,15666,75],{"class":49},[36,15668,15669],{"class":38,"line":2362},[36,15670,2780],{"class":49},[36,15672,15673,15676,15678],{"class":38,"line":2367},[36,15674,15675],{"class":49},"        m_name",[36,15677,54],{"class":53},[36,15679,15680],{"class":49},"name;\n",[36,15682,15683],{"class":38,"line":2373},[36,15684,2937],{"class":49},[36,15686,15687],{"class":38,"line":2378},[36,15688,15689],{"class":42},"    \u002F\u002F赋值学号\n",[36,15691,15692,15694,15697,15699,15701,15704],{"class":38,"line":2392},[36,15693,15653],{"class":53},[36,15695,15696],{"class":2713}," setId",[36,15698,901],{"class":49},[36,15700,904],{"class":53},[36,15702,15703],{"class":416}," id",[36,15705,75],{"class":49},[36,15707,15708],{"class":38,"line":2397},[36,15709,2780],{"class":49},[36,15711,15712,15715,15717],{"class":38,"line":2403},[36,15713,15714],{"class":49},"        m_id",[36,15716,54],{"class":53},[36,15718,15719],{"class":49},"id;\n",[36,15721,15722],{"class":38,"line":2424},[36,15723,2937],{"class":49},[36,15725,15726],{"class":38,"line":2429},[36,15727,15728],{"class":42},"    \u002F\u002F打印学生信息\n",[36,15730,15731,15733,15735],{"class":38,"line":2443},[36,15732,15653],{"class":53},[36,15734,10362],{"class":2713},[36,15736,2726],{"class":49},[36,15738,15739],{"class":38,"line":2448},[36,15740,2780],{"class":49},[36,15742,15743,15745,15747,15750,15752,15755,15757,15759,15761,15764,15766,15769,15771],{"class":38,"line":2477},[36,15744,4200],{"class":49},[36,15746,1923],{"class":53},[36,15748,15749],{"class":998},"\"姓名：\"",[36,15751,1923],{"class":53},[36,15753,15754],{"class":49},"m_name",[36,15756,1923],{"class":53},[36,15758,5108],{"class":998},[36,15760,1923],{"class":53},[36,15762,15763],{"class":998},"\"学号：\"",[36,15765,1923],{"class":53},[36,15767,15768],{"class":49},"m_id",[36,15770,1923],{"class":53},[36,15772,1945],{"class":49},[36,15774,15775],{"class":38,"line":2482},[36,15776,2937],{"class":49},[36,15778,15779],{"class":38,"line":2499},[36,15780,4744],{"class":49},[36,15782,15783,15785,15787],{"class":38,"line":2504},[36,15784,904],{"class":53},[36,15786,2723],{"class":2713},[36,15788,2726],{"class":49},[36,15790,15791],{"class":38,"line":2509},[36,15792,2296],{"class":49},[36,15794,15795],{"class":38,"line":2514},[36,15796,15797],{"class":42},"    \u002F\u002F实例化\n",[36,15799,15800],{"class":38,"line":2528},[36,15801,15802],{"class":49},"    Student s1;\n",[36,15804,15805,15808,15811,15813,15815],{"class":38,"line":2533},[36,15806,15807],{"class":49},"    s1.",[36,15809,15810],{"class":2713},"setName",[36,15812,901],{"class":49},[36,15814,8663],{"class":998},[36,15816,3468],{"class":49},[36,15818,15819,15821,15824,15826,15829],{"class":38,"line":3326},[36,15820,15807],{"class":49},[36,15822,15823],{"class":2713},"setId",[36,15825,901],{"class":49},[36,15827,15828],{"class":60},"123456",[36,15830,3468],{"class":49},[36,15832,15833,15835,15838],{"class":38,"line":3340},[36,15834,15807],{"class":49},[36,15836,15837],{"class":2713},"printInfo",[36,15839,6383],{"class":49},[36,15841,15842],{"class":38,"line":3348},[36,15843,2315],{"class":49},[14,15845,15846],{},"类中的属性和行为统称为成员",[14,15848,15849],{},"属性：成员属性(成员变量)",[14,15851,15852],{},"方法：成员函数(成员方法)",[14,15854,15855],{},[1043,15856,15857],{},"封装意义二：",[14,15859,15860],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15862,15863],{},"访问权限有三种：",[851,15865,15866,15869,15872],{},[854,15867,15868],{},"public        公共权限",[854,15870,15871],{},"protected 保护权限",[854,15873,15874],{},"private      私有权限",[14,15876,15877],{},[1043,15878,15879],{},"示例：",[26,15881,15883],{"className":10688,"code":15882,"language":10690,"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,15884,15885,15890,15895,15900,15905,15909,15916,15920,15925,15929,15934,15938,15943,15948,15953,15957,15962,15967,15974,15978,15982,15990,15994,16005,16017,16029,16033,16037,16041,16049,16053,16058,16070,16078,16086,16090,16100,16104,16112],{"__ignoreMap":31},[36,15886,15887],{"class":38,"line":39},[36,15888,15889],{"class":42},"\u002F\u002F三种权限\n",[36,15891,15892],{"class":38,"line":46},[36,15893,15894],{"class":42},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[36,15896,15897],{"class":38,"line":78},[36,15898,15899],{"class":42},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[36,15901,15902],{"class":38,"line":125},[36,15903,15904],{"class":42},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[36,15906,15907],{"class":38,"line":131},[36,15908,194],{"emptyLinePlaceholder":193},[36,15910,15911,15913],{"class":38,"line":396},[36,15912,15438],{"class":53},[36,15914,15915],{"class":2713}," Person\n",[36,15917,15918],{"class":38,"line":407},[36,15919,2296],{"class":49},[36,15921,15922],{"class":38,"line":2061},[36,15923,15924],{"class":42},"    \u002F\u002F姓名  公共权限\n",[36,15926,15927],{"class":38,"line":2067},[36,15928,15460],{"class":53},[36,15930,15931],{"class":38,"line":2079},[36,15932,15933],{"class":49},"    string m_Name;\n",[36,15935,15936],{"class":38,"line":2362},[36,15937,194],{"emptyLinePlaceholder":193},[36,15939,15940],{"class":38,"line":2367},[36,15941,15942],{"class":42},"    \u002F\u002F汽车  保护权限\n",[36,15944,15945],{"class":38,"line":2373},[36,15946,15947],{"class":53},"protected:\n",[36,15949,15950],{"class":38,"line":2378},[36,15951,15952],{"class":49},"    string m_Car;\n",[36,15954,15955],{"class":38,"line":2392},[36,15956,194],{"emptyLinePlaceholder":193},[36,15958,15959],{"class":38,"line":2397},[36,15960,15961],{"class":42},"    \u002F\u002F银行卡密码  私有权限\n",[36,15963,15964],{"class":38,"line":2403},[36,15965,15966],{"class":53},"private:\n",[36,15968,15969,15971],{"class":38,"line":2424},[36,15970,2735],{"class":53},[36,15972,15973],{"class":49}," m_Password;\n",[36,15975,15976],{"class":38,"line":2429},[36,15977,194],{"emptyLinePlaceholder":193},[36,15979,15980],{"class":38,"line":2443},[36,15981,15460],{"class":53},[36,15983,15984,15986,15988],{"class":38,"line":2448},[36,15985,15653],{"class":53},[36,15987,12130],{"class":2713},[36,15989,2726],{"class":49},[36,15991,15992],{"class":38,"line":2477},[36,15993,2780],{"class":49},[36,15995,15996,15999,16001,16003],{"class":38,"line":2482},[36,15997,15998],{"class":49},"        m_Name ",[36,16000,54],{"class":53},[36,16002,9685],{"class":998},[36,16004,2040],{"class":49},[36,16006,16007,16010,16012,16015],{"class":38,"line":2499},[36,16008,16009],{"class":49},"        m_Car ",[36,16011,54],{"class":53},[36,16013,16014],{"class":998}," \"拖拉机\"",[36,16016,2040],{"class":49},[36,16018,16019,16022,16024,16027],{"class":38,"line":2504},[36,16020,16021],{"class":49},"        m_Password ",[36,16023,54],{"class":53},[36,16025,16026],{"class":60}," 123456",[36,16028,2040],{"class":49},[36,16030,16031],{"class":38,"line":2509},[36,16032,2937],{"class":49},[36,16034,16035],{"class":38,"line":2514},[36,16036,4744],{"class":49},[36,16038,16039],{"class":38,"line":2528},[36,16040,194],{"emptyLinePlaceholder":193},[36,16042,16043,16045,16047],{"class":38,"line":2533},[36,16044,904],{"class":53},[36,16046,2723],{"class":2713},[36,16048,11600],{"class":49},[36,16050,16051],{"class":38,"line":3326},[36,16052,194],{"emptyLinePlaceholder":193},[36,16054,16055],{"class":38,"line":3340},[36,16056,16057],{"class":49},"    Person p;\n",[36,16059,16060,16063,16065,16068],{"class":38,"line":3348},[36,16061,16062],{"class":49},"    p.m_Name ",[36,16064,54],{"class":53},[36,16066,16067],{"class":998}," \"李四\"",[36,16069,2040],{"class":49},[36,16071,16072,16075],{"class":38,"line":3353},[36,16073,16074],{"class":42},"    \u002F\u002Fp.m_Car = \"奔驰\";",[36,16076,16077],{"class":42},"  \u002F\u002F保护权限类外访问不到\n",[36,16079,16080,16083],{"class":38,"line":3359},[36,16081,16082],{"class":42},"    \u002F\u002Fp.m_Password = 123;",[36,16084,16085],{"class":42}," \u002F\u002F私有权限类外访问不到\n",[36,16087,16088],{"class":38,"line":3365},[36,16089,194],{"emptyLinePlaceholder":193},[36,16091,16092,16094,16096,16098],{"class":38,"line":3370},[36,16093,3053],{"class":2713},[36,16095,901],{"class":49},[36,16097,3058],{"class":998},[36,16099,3468],{"class":49},[36,16101,16102],{"class":38,"line":8695},[36,16103,194],{"emptyLinePlaceholder":193},[36,16105,16106,16108,16110],{"class":38,"line":8719},[36,16107,4839],{"class":53},[36,16109,4842],{"class":60},[36,16111,2040],{"class":49},[36,16113,16114],{"class":38,"line":8724},[36,16115,2315],{"class":49},[868,16117,16119],{"id":16118},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,16121,16122,16123,16126,16127],{},"在C++中 struct和class唯一的",[1043,16124,16125],{},"区别","就在于 ",[1043,16128,16129],{},"默认的访问权限不同",[14,16131,16132],{},"区别：",[1886,16134,16135,16138],{},[854,16136,16137],{},"struct 默认权限为公共",[854,16139,16140],{},"class   默认权限为私有",[26,16142,16144],{"className":10688,"code":16143,"language":10690,"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,16145,16146,16153,16157,16167,16171,16175,16182,16186,16196,16200,16204,16212,16216,16221,16235,16239,16244,16258,16262,16272,16276,16284],{"__ignoreMap":31},[36,16147,16148,16150],{"class":38,"line":39},[36,16149,15438],{"class":53},[36,16151,16152],{"class":2713}," C1\n",[36,16154,16155],{"class":38,"line":46},[36,16156,2296],{"class":49},[36,16158,16159,16161,16164],{"class":38,"line":78},[36,16160,2735],{"class":53},[36,16162,16163],{"class":49},"  m_A;",[36,16165,16166],{"class":42}," \u002F\u002F默认是私有权限\n",[36,16168,16169],{"class":38,"line":125},[36,16170,4744],{"class":49},[36,16172,16173],{"class":38,"line":131},[36,16174,194],{"emptyLinePlaceholder":193},[36,16176,16177,16179],{"class":38,"line":396},[36,16178,8506],{"class":53},[36,16180,16181],{"class":2713}," C2\n",[36,16183,16184],{"class":38,"line":407},[36,16185,2296],{"class":49},[36,16187,16188,16190,16193],{"class":38,"line":2061},[36,16189,2735],{"class":53},[36,16191,16192],{"class":49}," m_A;",[36,16194,16195],{"class":42},"  \u002F\u002F默认是公共权限\n",[36,16197,16198],{"class":38,"line":2067},[36,16199,4744],{"class":49},[36,16201,16202],{"class":38,"line":2079},[36,16203,194],{"emptyLinePlaceholder":193},[36,16205,16206,16208,16210],{"class":38,"line":2362},[36,16207,904],{"class":53},[36,16209,2723],{"class":2713},[36,16211,11600],{"class":49},[36,16213,16214],{"class":38,"line":2367},[36,16215,194],{"emptyLinePlaceholder":193},[36,16217,16218],{"class":38,"line":2373},[36,16219,16220],{"class":49},"    C1 c1;\n",[36,16222,16223,16226,16228,16230,16232],{"class":38,"line":2378},[36,16224,16225],{"class":49},"    c1.m_A ",[36,16227,54],{"class":53},[36,16229,2788],{"class":60},[36,16231,952],{"class":49},[36,16233,16234],{"class":42}," \u002F\u002F错误，访问权限是私有\n",[36,16236,16237],{"class":38,"line":2392},[36,16238,194],{"emptyLinePlaceholder":193},[36,16240,16241],{"class":38,"line":2397},[36,16242,16243],{"class":49},"    C2 c2;\n",[36,16245,16246,16249,16251,16253,16255],{"class":38,"line":2403},[36,16247,16248],{"class":49},"    c2.m_A ",[36,16250,54],{"class":53},[36,16252,2788],{"class":60},[36,16254,952],{"class":49},[36,16256,16257],{"class":42}," \u002F\u002F正确，访问权限是公共\n",[36,16259,16260],{"class":38,"line":2424},[36,16261,194],{"emptyLinePlaceholder":193},[36,16263,16264,16266,16268,16270],{"class":38,"line":2429},[36,16265,3053],{"class":2713},[36,16267,901],{"class":49},[36,16269,3058],{"class":998},[36,16271,3468],{"class":49},[36,16273,16274],{"class":38,"line":2443},[36,16275,194],{"emptyLinePlaceholder":193},[36,16277,16278,16280,16282],{"class":38,"line":2448},[36,16279,4839],{"class":53},[36,16281,4842],{"class":60},[36,16283,2040],{"class":49},[36,16285,16286],{"class":38,"line":2477},[36,16287,2315],{"class":49},[868,16289,16291],{"id":16290},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,16293,16294],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,16296,16297],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,16299,16300],{},[1043,16301,15879],{},[26,16303,16305],{"className":10688,"code":16304,"language":10690,"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,16306,16307,16317,16321,16325,16330,16344,16353,16357,16367,16371,16378,16382,16386,16390,16395,16404,16411,16415,16420,16436,16459,16472,16479,16483,16492,16496,16500,16505,16521,16531,16535,16539,16543,16551,16555,16565,16569,16577,16581,16585,16593,16597,16601,16606,16619,16642,16646,16651,16664,16686,16690,16695,16709,16717,16721,16731,16735,16743],{"__ignoreMap":31},[36,16308,16309,16311,16314],{"class":38,"line":39},[36,16310,15438],{"class":53},[36,16312,16313],{"class":2713}," Person",[36,16315,16316],{"class":49}," {\n",[36,16318,16319],{"class":38,"line":46},[36,16320,15460],{"class":53},[36,16322,16323],{"class":38,"line":78},[36,16324,194],{"emptyLinePlaceholder":193},[36,16326,16327],{"class":38,"line":125},[36,16328,16329],{"class":42},"    \u002F\u002F姓名设置可读可写\n",[36,16331,16332,16334,16336,16338,16340,16342],{"class":38,"line":131},[36,16333,15653],{"class":53},[36,16335,15656],{"class":2713},[36,16337,901],{"class":49},[36,16339,15661],{"class":2713},[36,16341,15664],{"class":416},[36,16343,13186],{"class":49},[36,16345,16346,16348,16350],{"class":38,"line":396},[36,16347,15998],{"class":49},[36,16349,54],{"class":53},[36,16351,16352],{"class":49}," name;\n",[36,16354,16355],{"class":38,"line":407},[36,16356,2937],{"class":49},[36,16358,16359,16362,16365],{"class":38,"line":2061},[36,16360,16361],{"class":2713},"    string",[36,16363,16364],{"class":2713}," getName",[36,16366,2726],{"class":49},[36,16368,16369],{"class":38,"line":2067},[36,16370,2780],{"class":49},[36,16372,16373,16375],{"class":38,"line":2079},[36,16374,15496],{"class":53},[36,16376,16377],{"class":49}," m_Name;\n",[36,16379,16380],{"class":38,"line":2362},[36,16381,2937],{"class":49},[36,16383,16384],{"class":38,"line":2367},[36,16385,194],{"emptyLinePlaceholder":193},[36,16387,16388],{"class":38,"line":2373},[36,16389,194],{"emptyLinePlaceholder":193},[36,16391,16392],{"class":38,"line":2378},[36,16393,16394],{"class":42},"    \u002F\u002F获取年龄 \n",[36,16396,16397,16399,16402],{"class":38,"line":2392},[36,16398,2735],{"class":53},[36,16400,16401],{"class":2713}," getAge",[36,16403,11600],{"class":49},[36,16405,16406,16408],{"class":38,"line":2397},[36,16407,15496],{"class":53},[36,16409,16410],{"class":49}," m_Age;\n",[36,16412,16413],{"class":38,"line":2403},[36,16414,2937],{"class":49},[36,16416,16417],{"class":38,"line":2424},[36,16418,16419],{"class":42},"    \u002F\u002F设置年龄\n",[36,16421,16422,16424,16427,16429,16431,16434],{"class":38,"line":2429},[36,16423,15653],{"class":53},[36,16425,16426],{"class":2713}," setAge",[36,16428,901],{"class":49},[36,16430,904],{"class":53},[36,16432,16433],{"class":416}," age",[36,16435,13186],{"class":49},[36,16437,16438,16440,16443,16445,16447,16449,16452,16454,16457],{"class":38,"line":2443},[36,16439,3246],{"class":53},[36,16441,16442],{"class":49}," (age ",[36,16444,1789],{"class":53},[36,16446,4842],{"class":60},[36,16448,4004],{"class":53},[36,16450,16451],{"class":49}," age ",[36,16453,1839],{"class":53},[36,16455,16456],{"class":60}," 150",[36,16458,13186],{"class":49},[36,16460,16461,16463,16465,16468,16470],{"class":38,"line":2448},[36,16462,10466],{"class":49},[36,16464,1923],{"class":53},[36,16466,16467],{"class":998}," \"你个老妖精!\"",[36,16469,2194],{"class":53},[36,16471,9587],{"class":49},[36,16473,16474,16477],{"class":38,"line":2477},[36,16475,16476],{"class":53},"            return",[36,16478,2040],{"class":49},[36,16480,16481],{"class":38,"line":2482},[36,16482,3278],{"class":49},[36,16484,16485,16488,16490],{"class":38,"line":2499},[36,16486,16487],{"class":49},"        m_Age ",[36,16489,54],{"class":53},[36,16491,8544],{"class":49},[36,16493,16494],{"class":38,"line":2504},[36,16495,2937],{"class":49},[36,16497,16498],{"class":38,"line":2509},[36,16499,194],{"emptyLinePlaceholder":193},[36,16501,16502],{"class":38,"line":2514},[36,16503,16504],{"class":42},"    \u002F\u002F情人设置为只写\n",[36,16506,16507,16509,16512,16514,16516,16519],{"class":38,"line":2528},[36,16508,15653],{"class":53},[36,16510,16511],{"class":2713}," setLover",[36,16513,901],{"class":49},[36,16515,15661],{"class":2713},[36,16517,16518],{"class":416}," lover",[36,16520,13186],{"class":49},[36,16522,16523,16526,16528],{"class":38,"line":2533},[36,16524,16525],{"class":49},"        m_Lover ",[36,16527,54],{"class":53},[36,16529,16530],{"class":49}," lover;\n",[36,16532,16533],{"class":38,"line":3326},[36,16534,2937],{"class":49},[36,16536,16537],{"class":38,"line":3340},[36,16538,194],{"emptyLinePlaceholder":193},[36,16540,16541],{"class":38,"line":3348},[36,16542,15966],{"class":53},[36,16544,16545,16548],{"class":38,"line":3353},[36,16546,16547],{"class":49},"    string m_Name;",[36,16549,16550],{"class":42}," \u002F\u002F可读可写  姓名\n",[36,16552,16553],{"class":38,"line":3359},[36,16554,13954],{"class":49},[36,16556,16557,16559,16562],{"class":38,"line":3365},[36,16558,2735],{"class":53},[36,16560,16561],{"class":49}," m_Age;",[36,16563,16564],{"class":42}," \u002F\u002F只读  年龄\n",[36,16566,16567],{"class":38,"line":3370},[36,16568,194],{"emptyLinePlaceholder":193},[36,16570,16571,16574],{"class":38,"line":8695},[36,16572,16573],{"class":49},"    string m_Lover;",[36,16575,16576],{"class":42}," \u002F\u002F只写  情人\n",[36,16578,16579],{"class":38,"line":8719},[36,16580,4744],{"class":49},[36,16582,16583],{"class":38,"line":8724},[36,16584,194],{"emptyLinePlaceholder":193},[36,16586,16587,16589,16591],{"class":38,"line":8730},[36,16588,904],{"class":53},[36,16590,2723],{"class":2713},[36,16592,11600],{"class":49},[36,16594,16595],{"class":38,"line":8757},[36,16596,194],{"emptyLinePlaceholder":193},[36,16598,16599],{"class":38,"line":8762},[36,16600,16057],{"class":49},[36,16602,16603],{"class":38,"line":8768},[36,16604,16605],{"class":42},"    \u002F\u002F姓名设置\n",[36,16607,16608,16611,16613,16615,16617],{"class":38,"line":8780},[36,16609,16610],{"class":49},"    p.",[36,16612,15810],{"class":2713},[36,16614,901],{"class":49},[36,16616,8663],{"class":998},[36,16618,3468],{"class":49},[36,16620,16621,16623,16625,16628,16630,16633,16636,16638,16640],{"class":38,"line":8792},[36,16622,7276],{"class":49},[36,16624,1923],{"class":53},[36,16626,16627],{"class":998}," \"姓名： \"",[36,16629,2194],{"class":53},[36,16631,16632],{"class":49}," p.",[36,16634,16635],{"class":2713},"getName",[36,16637,13794],{"class":49},[36,16639,1923],{"class":53},[36,16641,9587],{"class":49},[36,16643,16644],{"class":38,"line":8804},[36,16645,194],{"emptyLinePlaceholder":193},[36,16647,16648],{"class":38,"line":10463},[36,16649,16650],{"class":42},"    \u002F\u002F年龄设置\n",[36,16652,16653,16655,16658,16660,16662],{"class":38,"line":10488},[36,16654,16610],{"class":49},[36,16656,16657],{"class":2713},"setAge",[36,16659,901],{"class":49},[36,16661,1538],{"class":60},[36,16663,3468],{"class":49},[36,16665,16666,16668,16670,16673,16675,16677,16680,16682,16684],{"class":38,"line":10511},[36,16667,7276],{"class":49},[36,16669,1923],{"class":53},[36,16671,16672],{"class":998}," \"年龄： \"",[36,16674,2194],{"class":53},[36,16676,16632],{"class":49},[36,16678,16679],{"class":2713},"getAge",[36,16681,13794],{"class":49},[36,16683,1923],{"class":53},[36,16685,9587],{"class":49},[36,16687,16688],{"class":38,"line":10535},[36,16689,194],{"emptyLinePlaceholder":193},[36,16691,16692],{"class":38,"line":10540},[36,16693,16694],{"class":42},"    \u002F\u002F情人设置\n",[36,16696,16697,16699,16702,16704,16707],{"class":38,"line":10545},[36,16698,16610],{"class":49},[36,16700,16701],{"class":2713},"setLover",[36,16703,901],{"class":49},[36,16705,16706],{"class":998},"\"苍井\"",[36,16708,3468],{"class":49},[36,16710,16711,16714],{"class":38,"line":10550},[36,16712,16713],{"class":42},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[36,16715,16716],{"class":42},"  \u002F\u002F只写属性，不可以读取\n",[36,16718,16719],{"class":38,"line":10559},[36,16720,194],{"emptyLinePlaceholder":193},[36,16722,16723,16725,16727,16729],{"class":38,"line":10564},[36,16724,3053],{"class":2713},[36,16726,901],{"class":49},[36,16728,3058],{"class":998},[36,16730,3468],{"class":49},[36,16732,16733],{"class":38,"line":10570},[36,16734,194],{"emptyLinePlaceholder":193},[36,16736,16737,16739,16741],{"class":38,"line":10591},[36,16738,4839],{"class":53},[36,16740,4842],{"class":60},[36,16742,2040],{"class":49},[36,16744,16745],{"class":38,"line":10597},[36,16746,2315],{"class":49},[868,16748,16750],{"id":16749},"_814封装案例","8.1.4封装案例",[851,16752,16753],{},[854,16754,16755,16758],{},[1043,16756,16757],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1886,16760,16761,16764],{},[854,16762,16763],{},"求出立方体的面积和体积",[854,16765,16766],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[26,16768,16770],{"className":889,"code":16769,"language":891,"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,16771,16772,16778,16788,16795,16799,16803,16808,16838,16842,16852,16862,16872,16876,16885,16889,16925,16929,16938,16942,16958,16962,16967,16976,16980,16987,16991,17000,17004,17011,17015,17024,17028,17035,17039,17044,17061,17065,17111,17115,17124,17128,17132,17136,17145,17149,17153,17158,17162,17168,17174,17180,17184,17188,17193,17215,17219,17273,17277,17285,17289,17294,17299,17312,17319,17335,17346,17352,17375,17381,17404,17418,17438,17444,17455,17478,17500,17505,17511,17525,17538,17543,17557,17562,17568,17573,17587,17592,17597,17611,17623,17628,17641,17646,17651,17656,17669,17674],{"__ignoreMap":31},[36,16773,16774,16776],{"class":38,"line":39},[36,16775,2699],{"class":53},[36,16777,2702],{"class":998},[36,16779,16780,16782,16784,16786],{"class":38,"line":46},[36,16781,2707],{"class":53},[36,16783,2710],{"class":53},[36,16785,2714],{"class":2713},[36,16787,2040],{"class":49},[36,16789,16790,16792],{"class":38,"line":78},[36,16791,15438],{"class":53},[36,16793,16794],{"class":2713}," Cube\n",[36,16796,16797],{"class":38,"line":125},[36,16798,2296],{"class":49},[36,16800,16801],{"class":38,"line":131},[36,16802,15460],{"class":53},[36,16804,16805],{"class":38,"line":396},[36,16806,16807],{"class":42},"    \u002F\u002F输入长宽高\n",[36,16809,16810,16812,16815,16817,16819,16822,16824,16826,16829,16831,16833,16836],{"class":38,"line":407},[36,16811,15653],{"class":53},[36,16813,16814],{"class":2713}," setLwh",[36,16816,901],{"class":49},[36,16818,904],{"class":53},[36,16820,16821],{"class":416}," l",[36,16823,64],{"class":49},[36,16825,904],{"class":53},[36,16827,16828],{"class":416}," w",[36,16830,64],{"class":49},[36,16832,904],{"class":53},[36,16834,16835],{"class":416}," h",[36,16837,75],{"class":49},[36,16839,16840],{"class":38,"line":2061},[36,16841,2780],{"class":49},[36,16843,16844,16847,16849],{"class":38,"line":2067},[36,16845,16846],{"class":49},"        m_L",[36,16848,54],{"class":53},[36,16850,16851],{"class":49},"l;\n",[36,16853,16854,16857,16859],{"class":38,"line":2079},[36,16855,16856],{"class":49},"        m_W",[36,16858,54],{"class":53},[36,16860,16861],{"class":49},"w;\n",[36,16863,16864,16867,16869],{"class":38,"line":2362},[36,16865,16866],{"class":49},"        m_H",[36,16868,54],{"class":53},[36,16870,16871],{"class":49},"h;\n",[36,16873,16874],{"class":38,"line":2367},[36,16875,2937],{"class":49},[36,16877,16878,16880,16883],{"class":38,"line":2373},[36,16879,2735],{"class":53},[36,16881,16882],{"class":2713}," mianji",[36,16884,2726],{"class":49},[36,16886,16887],{"class":38,"line":2378},[36,16888,2780],{"class":49},[36,16890,16891,16893,16895,16897,16900,16902,16905,16907,16910,16912,16915,16917,16920,16922],{"class":38,"line":2392},[36,16892,15496],{"class":53},[36,16894,15499],{"class":60},[36,16896,1339],{"class":53},[36,16898,16899],{"class":49},"(m_L",[36,16901,1339],{"class":53},[36,16903,16904],{"class":49},"m_W ",[36,16906,1365],{"class":53},[36,16908,16909],{"class":49}," m_L",[36,16911,1339],{"class":53},[36,16913,16914],{"class":49},"m_H ",[36,16916,1365],{"class":53},[36,16918,16919],{"class":49}," m_W",[36,16921,1339],{"class":53},[36,16923,16924],{"class":49},"m_H);\n",[36,16926,16927],{"class":38,"line":2397},[36,16928,2937],{"class":49},[36,16930,16931,16933,16936],{"class":38,"line":2403},[36,16932,2735],{"class":53},[36,16934,16935],{"class":2713}," tiji",[36,16937,2726],{"class":49},[36,16939,16940],{"class":38,"line":2424},[36,16941,2780],{"class":49},[36,16943,16944,16946,16948,16950,16953,16955],{"class":38,"line":2429},[36,16945,15496],{"class":53},[36,16947,16909],{"class":49},[36,16949,1339],{"class":53},[36,16951,16952],{"class":49},"m_W",[36,16954,1339],{"class":53},[36,16956,16957],{"class":49},"m_H;\n",[36,16959,16960],{"class":38,"line":2443},[36,16961,2937],{"class":49},[36,16963,16964],{"class":38,"line":2448},[36,16965,16966],{"class":42},"    \u002F\u002F获取长宽高\n",[36,16968,16969,16971,16974],{"class":38,"line":2477},[36,16970,2735],{"class":53},[36,16972,16973],{"class":2713}," getLength",[36,16975,2726],{"class":49},[36,16977,16978],{"class":38,"line":2482},[36,16979,2780],{"class":49},[36,16981,16982,16984],{"class":38,"line":2499},[36,16983,15496],{"class":53},[36,16985,16986],{"class":49}," m_L;\n",[36,16988,16989],{"class":38,"line":2504},[36,16990,2937],{"class":49},[36,16992,16993,16995,16998],{"class":38,"line":2509},[36,16994,2735],{"class":53},[36,16996,16997],{"class":2713}," getWidth",[36,16999,2726],{"class":49},[36,17001,17002],{"class":38,"line":2514},[36,17003,2780],{"class":49},[36,17005,17006,17008],{"class":38,"line":2528},[36,17007,15496],{"class":53},[36,17009,17010],{"class":49}," m_W;\n",[36,17012,17013],{"class":38,"line":2533},[36,17014,2937],{"class":49},[36,17016,17017,17019,17022],{"class":38,"line":3326},[36,17018,2735],{"class":53},[36,17020,17021],{"class":2713}," getHeight",[36,17023,2726],{"class":49},[36,17025,17026],{"class":38,"line":3340},[36,17027,2780],{"class":49},[36,17029,17030,17032],{"class":38,"line":3348},[36,17031,15496],{"class":53},[36,17033,17034],{"class":49}," m_H;\n",[36,17036,17037],{"class":38,"line":3353},[36,17038,2937],{"class":49},[36,17040,17041],{"class":38,"line":3359},[36,17042,17043],{"class":42},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[36,17045,17046,17049,17052,17054,17057,17059],{"class":38,"line":3365},[36,17047,17048],{"class":53},"    bool",[36,17050,17051],{"class":2713}," isEqual",[36,17053,901],{"class":49},[36,17055,17056],{"class":2713},"Cube",[36,17058,3598],{"class":416},[36,17060,75],{"class":49},[36,17062,17063],{"class":38,"line":3370},[36,17064,2780],{"class":49},[36,17066,17067,17069,17072,17075,17077,17079,17082,17084,17087,17090,17092,17094,17097,17099,17101,17104,17106,17108],{"class":38,"line":8695},[36,17068,3246],{"class":53},[36,17070,17071],{"class":49}," (c.",[36,17073,17074],{"class":2713},"getLength",[36,17076,13794],{"class":49},[36,17078,3698],{"class":53},[36,17080,17081],{"class":49}," m_L ",[36,17083,2465],{"class":53},[36,17085,17086],{"class":49}," c.",[36,17088,17089],{"class":2713},"getWidth",[36,17091,13794],{"class":49},[36,17093,3698],{"class":53},[36,17095,17096],{"class":49}," m_W ",[36,17098,2465],{"class":53},[36,17100,17086],{"class":49},[36,17102,17103],{"class":2713},"getHeight",[36,17105,13794],{"class":49},[36,17107,3698],{"class":53},[36,17109,17110],{"class":49}," m_H)\n",[36,17112,17113],{"class":38,"line":8719},[36,17114,3259],{"class":49},[36,17116,17117,17119,17122],{"class":38,"line":8724},[36,17118,16476],{"class":53},[36,17120,17121],{"class":60}," true",[36,17123,2040],{"class":49},[36,17125,17126],{"class":38,"line":8730},[36,17127,3278],{"class":49},[36,17129,17130],{"class":38,"line":8757},[36,17131,3319],{"class":53},[36,17133,17134],{"class":38,"line":8762},[36,17135,3259],{"class":49},[36,17137,17138,17140,17143],{"class":38,"line":8768},[36,17139,16476],{"class":53},[36,17141,17142],{"class":60}," false",[36,17144,2040],{"class":49},[36,17146,17147],{"class":38,"line":8780},[36,17148,3278],{"class":49},[36,17150,17151],{"class":38,"line":8792},[36,17152,2937],{"class":49},[36,17154,17155],{"class":38,"line":8804},[36,17156,17157],{"class":42},"    \u002F\u002F私有属性\n",[36,17159,17160],{"class":38,"line":10463},[36,17161,15966],{"class":53},[36,17163,17164,17166],{"class":38,"line":10488},[36,17165,2735],{"class":53},[36,17167,16986],{"class":49},[36,17169,17170,17172],{"class":38,"line":10511},[36,17171,2735],{"class":53},[36,17173,17010],{"class":49},[36,17175,17176,17178],{"class":38,"line":10535},[36,17177,2735],{"class":53},[36,17179,17034],{"class":49},[36,17181,17182],{"class":38,"line":10540},[36,17183,194],{"emptyLinePlaceholder":193},[36,17185,17186],{"class":38,"line":10545},[36,17187,4744],{"class":49},[36,17189,17190],{"class":38,"line":10550},[36,17191,17192],{"class":42},"\u002F\u002F全局函数判断两个立方体是否相等\n",[36,17194,17195,17197,17199,17201,17203,17206,17208,17210,17213],{"class":38,"line":10559},[36,17196,2104],{"class":53},[36,17198,17051],{"class":2713},[36,17200,901],{"class":49},[36,17202,17056],{"class":2713},[36,17204,17205],{"class":416}," c1",[36,17207,64],{"class":49},[36,17209,17056],{"class":2713},[36,17211,17212],{"class":416}," c2",[36,17214,75],{"class":49},[36,17216,17217],{"class":38,"line":10564},[36,17218,2296],{"class":49},[36,17220,17221,17223,17226,17228,17230,17232,17235,17237,17240,17242,17244,17246,17248,17250,17252,17254,17256,17258,17260,17262,17264,17266,17268,17270],{"class":38,"line":10570},[36,17222,4839],{"class":53},[36,17224,17225],{"class":49}," (c1.",[36,17227,17074],{"class":2713},[36,17229,13794],{"class":49},[36,17231,3698],{"class":53},[36,17233,17234],{"class":49}," c2.",[36,17236,17074],{"class":2713},[36,17238,17239],{"class":49},"()) ",[36,17241,2465],{"class":53},[36,17243,17225],{"class":49},[36,17245,17089],{"class":2713},[36,17247,13794],{"class":49},[36,17249,3698],{"class":53},[36,17251,17234],{"class":49},[36,17253,17089],{"class":2713},[36,17255,17239],{"class":49},[36,17257,2465],{"class":53},[36,17259,17225],{"class":49},[36,17261,17103],{"class":2713},[36,17263,13794],{"class":49},[36,17265,3698],{"class":53},[36,17267,17234],{"class":49},[36,17269,17103],{"class":2713},[36,17271,17272],{"class":49},"());\n",[36,17274,17275],{"class":38,"line":10591},[36,17276,2315],{"class":49},[36,17278,17279,17281,17283],{"class":38,"line":10597},[36,17280,904],{"class":53},[36,17282,2723],{"class":2713},[36,17284,2726],{"class":49},[36,17286,17287],{"class":38,"line":10611},[36,17288,2296],{"class":49},[36,17290,17291],{"class":38,"line":10617},[36,17292,17293],{"class":49},"    Cube c1;\n",[36,17295,17296],{"class":38,"line":10644},[36,17297,17298],{"class":42},"    \u002F\u002F输入立方体的长宽高\n",[36,17300,17301,17303,17305,17308,17310],{"class":38,"line":10653},[36,17302,2301],{"class":49},[36,17304,1923],{"class":53},[36,17306,17307],{"class":998},"\"请输入第一个立方体的长、宽、高：\"",[36,17309,1923],{"class":53},[36,17311,1945],{"class":49},[36,17313,17314,17316],{"class":38,"line":10659},[36,17315,2735],{"class":53},[36,17317,17318],{"class":49}," l,w,h,l1,w1,h1;\n",[36,17320,17321,17323,17325,17327,17329,17331,17333],{"class":38,"line":10667},[36,17322,2762],{"class":49},[36,17324,2179],{"class":53},[36,17326,1401],{"class":49},[36,17328,2179],{"class":53},[36,17330,1675],{"class":49},[36,17332,2179],{"class":53},[36,17334,16871],{"class":49},[36,17336,17337,17340,17343],{"class":38,"line":10672},[36,17338,17339],{"class":49},"    c1.",[36,17341,17342],{"class":2713},"setLwh",[36,17344,17345],{"class":49},"(l,w,h);\n",[36,17347,17349],{"class":38,"line":17348},66,[36,17350,17351],{"class":42},"    \u002F\u002F面积\n",[36,17353,17355,17357,17359,17362,17364,17366,17369,17371,17373],{"class":38,"line":17354},67,[36,17356,2301],{"class":49},[36,17358,1923],{"class":53},[36,17360,17361],{"class":998},"\"立方体的表面积为：\"",[36,17363,1923],{"class":53},[36,17365,15574],{"class":49},[36,17367,17368],{"class":2713},"mianji",[36,17370,3176],{"class":49},[36,17372,1923],{"class":53},[36,17374,1945],{"class":49},[36,17376,17378],{"class":38,"line":17377},68,[36,17379,17380],{"class":42},"    \u002F\u002F体积\n",[36,17382,17384,17386,17388,17391,17393,17395,17398,17400,17402],{"class":38,"line":17383},69,[36,17385,2301],{"class":49},[36,17387,1923],{"class":53},[36,17389,17390],{"class":998},"\"立方体的体积为：\"",[36,17392,1923],{"class":53},[36,17394,15574],{"class":49},[36,17396,17397],{"class":2713},"tiji",[36,17399,3176],{"class":49},[36,17401,1923],{"class":53},[36,17403,1945],{"class":49},[36,17405,17407,17409,17411,17414,17416],{"class":38,"line":17406},70,[36,17408,2301],{"class":49},[36,17410,1923],{"class":53},[36,17412,17413],{"class":998},"\"请输入第二个立方体的长、宽、高：\"",[36,17415,1923],{"class":53},[36,17417,1945],{"class":49},[36,17419,17421,17423,17425,17428,17430,17433,17435],{"class":38,"line":17420},71,[36,17422,2762],{"class":49},[36,17424,2179],{"class":53},[36,17426,17427],{"class":49},"l1",[36,17429,2179],{"class":53},[36,17431,17432],{"class":49},"w1",[36,17434,2179],{"class":53},[36,17436,17437],{"class":49},"h1;\n",[36,17439,17441],{"class":38,"line":17440},72,[36,17442,17443],{"class":49},"    Cube c2;\n",[36,17445,17447,17450,17452],{"class":38,"line":17446},73,[36,17448,17449],{"class":49},"    c2.",[36,17451,17342],{"class":2713},[36,17453,17454],{"class":49},"(l1,w1,h1);\n",[36,17456,17458,17460,17462,17465,17467,17470,17472,17474,17476],{"class":38,"line":17457},74,[36,17459,2301],{"class":49},[36,17461,1923],{"class":53},[36,17463,17464],{"class":998},"\"第二个立方体的表面积为：\"",[36,17466,1923],{"class":53},[36,17468,17469],{"class":49},"c2.",[36,17471,17368],{"class":2713},[36,17473,3176],{"class":49},[36,17475,1923],{"class":53},[36,17477,1945],{"class":49},[36,17479,17481,17483,17485,17488,17490,17492,17494,17496,17498],{"class":38,"line":17480},75,[36,17482,2301],{"class":49},[36,17484,1923],{"class":53},[36,17486,17487],{"class":998},"\"第二个立方体的体积为：\"",[36,17489,1923],{"class":53},[36,17491,17469],{"class":49},[36,17493,17397],{"class":2713},[36,17495,3176],{"class":49},[36,17497,1923],{"class":53},[36,17499,1945],{"class":49},[36,17501,17503],{"class":38,"line":17502},76,[36,17504,194],{"emptyLinePlaceholder":193},[36,17506,17508],{"class":38,"line":17507},77,[36,17509,17510],{"class":42},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[36,17512,17514,17516,17518,17521,17523],{"class":38,"line":17513},78,[36,17515,2301],{"class":49},[36,17517,1923],{"class":53},[36,17519,17520],{"class":998},"\"内部函数判断结果：\"",[36,17522,1923],{"class":53},[36,17524,1945],{"class":49},[36,17526,17528,17530,17532,17535],{"class":38,"line":17527},79,[36,17529,3850],{"class":53},[36,17531,17225],{"class":49},[36,17533,17534],{"class":2713},"isEqual",[36,17536,17537],{"class":49},"(c2))\n",[36,17539,17541],{"class":38,"line":17540},80,[36,17542,2780],{"class":49},[36,17544,17546,17548,17550,17553,17555],{"class":38,"line":17545},81,[36,17547,4200],{"class":49},[36,17549,1923],{"class":53},[36,17551,17552],{"class":998},"\"两个立方体相等\"",[36,17554,1923],{"class":53},[36,17556,1945],{"class":49},[36,17558,17560],{"class":38,"line":17559},82,[36,17561,2937],{"class":49},[36,17563,17565],{"class":38,"line":17564},83,[36,17566,17567],{"class":53},"    else\n",[36,17569,17571],{"class":38,"line":17570},84,[36,17572,2780],{"class":49},[36,17574,17576,17578,17580,17583,17585],{"class":38,"line":17575},85,[36,17577,4200],{"class":49},[36,17579,1923],{"class":53},[36,17581,17582],{"class":998},"\"两个立方体不相等\"",[36,17584,1923],{"class":53},[36,17586,1945],{"class":49},[36,17588,17590],{"class":38,"line":17589},86,[36,17591,2937],{"class":49},[36,17593,17595],{"class":38,"line":17594},87,[36,17596,194],{"emptyLinePlaceholder":193},[36,17598,17600,17602,17604,17607,17609],{"class":38,"line":17599},88,[36,17601,2301],{"class":49},[36,17603,1923],{"class":53},[36,17605,17606],{"class":998},"\"全局函数判断结果：\"",[36,17608,1923],{"class":53},[36,17610,1945],{"class":49},[36,17612,17614,17616,17618,17620],{"class":38,"line":17613},89,[36,17615,3850],{"class":53},[36,17617,2408],{"class":49},[36,17619,17534],{"class":2713},[36,17621,17622],{"class":49},"(c1, c2))\n",[36,17624,17626],{"class":38,"line":17625},90,[36,17627,2780],{"class":49},[36,17629,17631,17633,17635,17637,17639],{"class":38,"line":17630},91,[36,17632,4200],{"class":49},[36,17634,1923],{"class":53},[36,17636,17552],{"class":998},[36,17638,1923],{"class":53},[36,17640,1945],{"class":49},[36,17642,17644],{"class":38,"line":17643},92,[36,17645,2937],{"class":49},[36,17647,17649],{"class":38,"line":17648},93,[36,17650,17567],{"class":53},[36,17652,17654],{"class":38,"line":17653},94,[36,17655,2780],{"class":49},[36,17657,17659,17661,17663,17665,17667],{"class":38,"line":17658},95,[36,17660,4200],{"class":49},[36,17662,1923],{"class":53},[36,17664,17582],{"class":998},[36,17666,1923],{"class":53},[36,17668,1945],{"class":49},[36,17670,17672],{"class":38,"line":17671},96,[36,17673,2937],{"class":49},[36,17675,17677],{"class":38,"line":17676},97,[36,17678,2315],{"class":49},[851,17680,17681],{"start":46},[854,17682,17683],{},[1043,17684,17685],{},"练习案例2：点和圆的关系",[1886,17687,17688],{},[854,17689,17690],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[26,17692,17694],{"className":889,"code":17693,"language":891,"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,17695,17696,17702,17712,17719,17726,17730,17734,17739,17773,17778,17794,17808,17812,17816,17823,17830,17834,17840,17844,17848,17852,17874,17897,17902,17916,17931,17935,17939,17945,17950,17955,17959,17985,17989,18019,18047,18075,18092,18096,18109,18113,18117,18121,18134,18138,18142,18150,18154,18158,18162,18167,18171,18182,18189,18198,18208,18219,18226,18239,18250,18260,18271,18278,18292,18297,18307,18315],{"__ignoreMap":31},[36,17697,17698,17700],{"class":38,"line":39},[36,17699,2699],{"class":53},[36,17701,2702],{"class":998},[36,17703,17704,17706,17708,17710],{"class":38,"line":46},[36,17705,2707],{"class":53},[36,17707,2710],{"class":53},[36,17709,2714],{"class":2713},[36,17711,2040],{"class":49},[36,17713,17714,17716],{"class":38,"line":78},[36,17715,2699],{"class":53},[36,17717,17718],{"class":998},"\u003Ccmath>\n",[36,17720,17721,17723],{"class":38,"line":125},[36,17722,15438],{"class":53},[36,17724,17725],{"class":2713}," Point\n",[36,17727,17728],{"class":38,"line":131},[36,17729,2296],{"class":49},[36,17731,17732],{"class":38,"line":396},[36,17733,15460],{"class":53},[36,17735,17736],{"class":38,"line":407},[36,17737,17738],{"class":42},"    \u002F\u002F赋值\n",[36,17740,17741,17743,17746,17748,17750,17753,17755,17757,17760,17763,17765,17768,17770],{"class":38,"line":2061},[36,17742,15653],{"class":53},[36,17744,17745],{"class":2713}," setPoint",[36,17747,901],{"class":49},[36,17749,14781],{"class":53},[36,17751,17752],{"class":416}," x",[36,17754,154],{"class":49},[36,17756,14781],{"class":53},[36,17758,17759],{"class":416}," y",[36,17761,17762],{"class":49},") { m_x ",[36,17764,54],{"class":53},[36,17766,17767],{"class":49}," x; m_y ",[36,17769,54],{"class":53},[36,17771,17772],{"class":49}," y; }\n",[36,17774,17775],{"class":38,"line":2067},[36,17776,17777],{"class":42},"    \u002F\u002F获取坐标\n",[36,17779,17780,17782,17785,17788,17791],{"class":38,"line":2079},[36,17781,15482],{"class":53},[36,17783,17784],{"class":2713}," getX",[36,17786,17787],{"class":49},"() { ",[36,17789,17790],{"class":53},"return",[36,17792,17793],{"class":49}," m_x; }\n",[36,17795,17796,17798,17801,17803,17805],{"class":38,"line":2362},[36,17797,15482],{"class":53},[36,17799,17800],{"class":2713}," getY",[36,17802,17787],{"class":49},[36,17804,17790],{"class":53},[36,17806,17807],{"class":49}," m_y; }\n",[36,17809,17810],{"class":38,"line":2367},[36,17811,194],{"emptyLinePlaceholder":193},[36,17813,17814],{"class":38,"line":2373},[36,17815,15966],{"class":53},[36,17817,17818,17820],{"class":38,"line":2378},[36,17819,15482],{"class":53},[36,17821,17822],{"class":49}," m_x;\n",[36,17824,17825,17827],{"class":38,"line":2392},[36,17826,15482],{"class":53},[36,17828,17829],{"class":49}," m_y;\n",[36,17831,17832],{"class":38,"line":2397},[36,17833,4744],{"class":49},[36,17835,17836,17838],{"class":38,"line":2403},[36,17837,15438],{"class":53},[36,17839,15441],{"class":2713},[36,17841,17842],{"class":38,"line":2424},[36,17843,2296],{"class":49},[36,17845,17846],{"class":38,"line":2429},[36,17847,15460],{"class":53},[36,17849,17850],{"class":38,"line":2443},[36,17851,17738],{"class":42},[36,17853,17854,17856,17859,17861,17863,17866,17869,17871],{"class":38,"line":2448},[36,17855,15653],{"class":53},[36,17857,17858],{"class":2713}," setRadius",[36,17860,901],{"class":49},[36,17862,14781],{"class":53},[36,17864,17865],{"class":416}," r",[36,17867,17868],{"class":49},") { m_r ",[36,17870,54],{"class":53},[36,17872,17873],{"class":49}," r; }\n",[36,17875,17876,17878,17881,17883,17886,17889,17892,17894],{"class":38,"line":2477},[36,17877,15653],{"class":53},[36,17879,17880],{"class":2713}," setCenter",[36,17882,901],{"class":49},[36,17884,17885],{"class":2713},"Point",[36,17887,17888],{"class":416}," center",[36,17890,17891],{"class":49},") { m_center ",[36,17893,54],{"class":53},[36,17895,17896],{"class":49}," center; }\n",[36,17898,17899],{"class":38,"line":2482},[36,17900,17901],{"class":42},"    \u002F\u002F获取属性\n",[36,17903,17904,17906,17909,17911,17913],{"class":38,"line":2499},[36,17905,15482],{"class":53},[36,17907,17908],{"class":2713}," getRadius",[36,17910,17787],{"class":49},[36,17912,17790],{"class":53},[36,17914,17915],{"class":49}," m_r; }\n",[36,17917,17918,17921,17924,17926,17928],{"class":38,"line":2504},[36,17919,17920],{"class":2713},"    Point",[36,17922,17923],{"class":2713}," getCenter",[36,17925,17787],{"class":49},[36,17927,17790],{"class":53},[36,17929,17930],{"class":49}," m_center; }\n",[36,17932,17933],{"class":38,"line":2509},[36,17934,194],{"emptyLinePlaceholder":193},[36,17936,17937],{"class":38,"line":2514},[36,17938,15966],{"class":53},[36,17940,17941,17943],{"class":38,"line":2528},[36,17942,15482],{"class":53},[36,17944,15472],{"class":49},[36,17946,17947],{"class":38,"line":2533},[36,17948,17949],{"class":42},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[36,17951,17952],{"class":38,"line":3326},[36,17953,17954],{"class":49},"    Point m_center;\n",[36,17956,17957],{"class":38,"line":3340},[36,17958,4744],{"class":49},[36,17960,17961,17963,17966,17968,17971,17973,17975,17977,17979,17981,17983],{"class":38,"line":3348},[36,17962,6111],{"class":53},[36,17964,17965],{"class":2713}," isInCircle",[36,17967,901],{"class":49},[36,17969,17970],{"class":2713},"Circle",[36,17972,11331],{"class":53},[36,17974,1177],{"class":416},[36,17976,64],{"class":49},[36,17978,17885],{"class":2713},[36,17980,11331],{"class":53},[36,17982,14],{"class":416},[36,17984,75],{"class":49},[36,17986,17987],{"class":38,"line":3353},[36,17988,2296],{"class":49},[36,17990,17991,17993,17996,17998,18000,18003,18006,18009,18011,18013,18015,18017],{"class":38,"line":3359},[36,17992,15482],{"class":53},[36,17994,17995],{"class":49}," dx ",[36,17997,54],{"class":53},[36,17999,17086],{"class":49},[36,18001,18002],{"class":2713},"getCenter",[36,18004,18005],{"class":49},"().",[36,18007,18008],{"class":2713},"getX",[36,18010,13794],{"class":49},[36,18012,1414],{"class":53},[36,18014,16632],{"class":49},[36,18016,18008],{"class":2713},[36,18018,6383],{"class":49},[36,18020,18021,18023,18026,18028,18030,18032,18034,18037,18039,18041,18043,18045],{"class":38,"line":3365},[36,18022,15482],{"class":53},[36,18024,18025],{"class":49}," dy ",[36,18027,54],{"class":53},[36,18029,17086],{"class":49},[36,18031,18002],{"class":2713},[36,18033,18005],{"class":49},[36,18035,18036],{"class":2713},"getY",[36,18038,13794],{"class":49},[36,18040,1414],{"class":53},[36,18042,16632],{"class":49},[36,18044,18036],{"class":2713},[36,18046,6383],{"class":49},[36,18048,18049,18051,18054,18056,18059,18062,18064,18066,18068,18070,18072],{"class":38,"line":3370},[36,18050,15482],{"class":53},[36,18052,18053],{"class":49}," distance ",[36,18055,54],{"class":53},[36,18057,18058],{"class":2713}," sqrt",[36,18060,18061],{"class":49},"(dx ",[36,18063,1339],{"class":53},[36,18065,17995],{"class":49},[36,18067,1365],{"class":53},[36,18069,18025],{"class":49},[36,18071,1339],{"class":53},[36,18073,18074],{"class":49}," dy);\n",[36,18076,18077,18079,18082,18084,18086,18089],{"class":38,"line":8695},[36,18078,3850],{"class":53},[36,18080,18081],{"class":49}," (distance ",[36,18083,1789],{"class":53},[36,18085,17086],{"class":49},[36,18087,18088],{"class":2713},"getRadius",[36,18090,18091],{"class":49},"())\n",[36,18093,18094],{"class":38,"line":8719},[36,18095,2780],{"class":49},[36,18097,18098,18100,18102,18105,18107],{"class":38,"line":8724},[36,18099,10416],{"class":49},[36,18101,1923],{"class":53},[36,18103,18104],{"class":998}," \"点在圆内\"",[36,18106,2194],{"class":53},[36,18108,9587],{"class":49},[36,18110,18111],{"class":38,"line":8730},[36,18112,2937],{"class":49},[36,18114,18115],{"class":38,"line":8757},[36,18116,17567],{"class":53},[36,18118,18119],{"class":38,"line":8762},[36,18120,2780],{"class":49},[36,18122,18123,18125,18127,18130,18132],{"class":38,"line":8768},[36,18124,10416],{"class":49},[36,18126,1923],{"class":53},[36,18128,18129],{"class":998}," \"点在圆外\"",[36,18131,2194],{"class":53},[36,18133,9587],{"class":49},[36,18135,18136],{"class":38,"line":8780},[36,18137,2937],{"class":49},[36,18139,18140],{"class":38,"line":8792},[36,18141,2315],{"class":49},[36,18143,18144,18146,18148],{"class":38,"line":8804},[36,18145,904],{"class":53},[36,18147,2723],{"class":2713},[36,18149,2726],{"class":49},[36,18151,18152],{"class":38,"line":10463},[36,18153,2296],{"class":49},[36,18155,18156],{"class":38,"line":10488},[36,18157,15797],{"class":42},[36,18159,18160],{"class":38,"line":10511},[36,18161,15544],{"class":49},[36,18163,18164],{"class":38,"line":10535},[36,18165,18166],{"class":49},"    Point p1;\n",[36,18168,18169],{"class":38,"line":10540},[36,18170,17738],{"class":42},[36,18172,18173,18175,18177,18180],{"class":38,"line":10545},[36,18174,2301],{"class":49},[36,18176,1923],{"class":53},[36,18178,18179],{"class":998},"\"请输入圆的半径：\"",[36,18181,2040],{"class":49},[36,18183,18184,18186],{"class":38,"line":10550},[36,18185,15482],{"class":53},[36,18187,18188],{"class":49}," r;\n",[36,18190,18191,18193,18195],{"class":38,"line":10559},[36,18192,2762],{"class":49},[36,18194,2179],{"class":53},[36,18196,18197],{"class":49},"r;\n",[36,18199,18200,18202,18205],{"class":38,"line":10564},[36,18201,17339],{"class":49},[36,18203,18204],{"class":2713},"setRadius",[36,18206,18207],{"class":49},"(r);\n",[36,18209,18210,18212,18214,18217],{"class":38,"line":10570},[36,18211,2301],{"class":49},[36,18213,1923],{"class":53},[36,18215,18216],{"class":998},"\"请输入圆心坐标：\"",[36,18218,2040],{"class":49},[36,18220,18221,18223],{"class":38,"line":10591},[36,18222,15482],{"class":53},[36,18224,18225],{"class":49}," x, y;\n",[36,18227,18228,18230,18232,18234,18236],{"class":38,"line":10597},[36,18229,2762],{"class":49},[36,18231,2179],{"class":53},[36,18233,1700],{"class":49},[36,18235,2179],{"class":53},[36,18237,18238],{"class":49},"y;\n",[36,18240,18241,18244,18247],{"class":38,"line":10611},[36,18242,18243],{"class":49},"    p1.",[36,18245,18246],{"class":2713},"setPoint",[36,18248,18249],{"class":49},"(x, y);\n",[36,18251,18252,18254,18257],{"class":38,"line":10617},[36,18253,17339],{"class":49},[36,18255,18256],{"class":2713},"setCenter",[36,18258,18259],{"class":49},"(p1);\n",[36,18261,18262,18264,18266,18269],{"class":38,"line":10644},[36,18263,2301],{"class":49},[36,18265,1923],{"class":53},[36,18267,18268],{"class":998},"\"请输入测试点坐标：\"",[36,18270,2040],{"class":49},[36,18272,18273,18275],{"class":38,"line":10653},[36,18274,15482],{"class":53},[36,18276,18277],{"class":49}," x1, y1;\n",[36,18279,18280,18282,18284,18287,18289],{"class":38,"line":10659},[36,18281,2762],{"class":49},[36,18283,2179],{"class":53},[36,18285,18286],{"class":49},"x1",[36,18288,2179],{"class":53},[36,18290,18291],{"class":49},"y1;\n",[36,18293,18294],{"class":38,"line":10667},[36,18295,18296],{"class":49},"    Point p2;\n",[36,18298,18299,18302,18304],{"class":38,"line":10672},[36,18300,18301],{"class":49},"    p2.",[36,18303,18246],{"class":2713},[36,18305,18306],{"class":49},"(x1, y1);\n",[36,18308,18309,18312],{"class":38,"line":17348},[36,18310,18311],{"class":2713},"    isInCircle",[36,18313,18314],{"class":49},"(c1, p2);\n",[36,18316,18317],{"class":38,"line":17354},[36,18318,2315],{"class":49},[14,18320,18321],{},"在类中可以让另一个类作为本来的成员",[14,18323,18324],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,18326,18327],{},"创建point.h",[26,18329,18331],{"className":889,"code":18330,"language":891,"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,18332,18333,18344,18350,18360,18366,18370,18375,18379,18383,18403,18407,18415,18423,18427,18431,18437,18443],{"__ignoreMap":31},[36,18334,18335,18338,18341],{"class":38,"line":39},[36,18336,18337],{"class":53},"#pragma",[36,18339,18340],{"class":2713}," once",[36,18342,18343],{"class":42}," \u002F\u002F防止头文件重复包含\n",[36,18345,18346,18348],{"class":38,"line":46},[36,18347,2699],{"class":53},[36,18349,2702],{"class":998},[36,18351,18352,18354,18356,18358],{"class":38,"line":78},[36,18353,2707],{"class":53},[36,18355,2710],{"class":53},[36,18357,2714],{"class":2713},[36,18359,2040],{"class":49},[36,18361,18362,18364],{"class":38,"line":125},[36,18363,15438],{"class":53},[36,18365,17725],{"class":2713},[36,18367,18368],{"class":38,"line":131},[36,18369,2296],{"class":49},[36,18371,18372],{"class":38,"line":396},[36,18373,18374],{"class":42},"\u002F\u002F做好声明与变量定义就可以\n",[36,18376,18377],{"class":38,"line":407},[36,18378,15460],{"class":53},[36,18380,18381],{"class":38,"line":2061},[36,18382,17738],{"class":42},[36,18384,18385,18387,18389,18391,18393,18395,18397,18399,18401],{"class":38,"line":2067},[36,18386,15653],{"class":53},[36,18388,17745],{"class":2713},[36,18390,901],{"class":49},[36,18392,14781],{"class":53},[36,18394,17752],{"class":416},[36,18396,154],{"class":49},[36,18398,14781],{"class":53},[36,18400,17759],{"class":416},[36,18402,3468],{"class":49},[36,18404,18405],{"class":38,"line":2079},[36,18406,17777],{"class":42},[36,18408,18409,18411,18413],{"class":38,"line":2362},[36,18410,15482],{"class":53},[36,18412,17784],{"class":2713},[36,18414,6383],{"class":49},[36,18416,18417,18419,18421],{"class":38,"line":2367},[36,18418,15482],{"class":53},[36,18420,17800],{"class":2713},[36,18422,6383],{"class":49},[36,18424,18425],{"class":38,"line":2373},[36,18426,194],{"emptyLinePlaceholder":193},[36,18428,18429],{"class":38,"line":2378},[36,18430,15966],{"class":53},[36,18432,18433,18435],{"class":38,"line":2392},[36,18434,15482],{"class":53},[36,18436,17822],{"class":49},[36,18438,18439,18441],{"class":38,"line":2397},[36,18440,15482],{"class":53},[36,18442,17829],{"class":49},[36,18444,18445],{"class":38,"line":2403},[36,18446,4744],{"class":49},[14,18448,18449],{},"创建point.cpp",[26,18451,18453],{"className":889,"code":18452,"language":891,"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,18454,18455,18462,18467,18501,18505,18521],{"__ignoreMap":31},[36,18456,18457,18459],{"class":38,"line":39},[36,18458,2699],{"class":53},[36,18460,18461],{"class":998},"\u003Cpoint.h>\n",[36,18463,18464],{"class":38,"line":46},[36,18465,18466],{"class":42},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[36,18468,18469,18471,18474,18477,18479,18481,18483,18485,18487,18489,18491,18493,18495,18497,18499],{"class":38,"line":78},[36,18470,15653],{"class":53},[36,18472,18473],{"class":2713}," Point",[36,18475,18476],{"class":49},"::",[36,18478,18246],{"class":2713},[36,18480,901],{"class":49},[36,18482,14781],{"class":53},[36,18484,17752],{"class":416},[36,18486,154],{"class":49},[36,18488,14781],{"class":53},[36,18490,17759],{"class":416},[36,18492,17762],{"class":49},[36,18494,54],{"class":53},[36,18496,17767],{"class":49},[36,18498,54],{"class":53},[36,18500,17772],{"class":49},[36,18502,18503],{"class":38,"line":125},[36,18504,17777],{"class":42},[36,18506,18507,18509,18511,18513,18515,18517,18519],{"class":38,"line":131},[36,18508,15482],{"class":53},[36,18510,18473],{"class":2713},[36,18512,18476],{"class":49},[36,18514,18008],{"class":2713},[36,18516,17787],{"class":49},[36,18518,17790],{"class":53},[36,18520,17793],{"class":49},[36,18522,18523,18525,18527,18529,18531,18533,18535],{"class":38,"line":396},[36,18524,15482],{"class":53},[36,18526,18473],{"class":2713},[36,18528,18476],{"class":49},[36,18530,18036],{"class":2713},[36,18532,17787],{"class":49},[36,18534,17790],{"class":53},[36,18536,17807],{"class":49},[14,18538,18539],{},"创建circle.h",[26,18541,18543],{"className":889,"code":18542,"language":891,"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,18544,18545,18552,18558,18568,18574,18580,18584,18588,18592,18606,18620,18624,18632,18640,18644,18648,18654,18658,18662],{"__ignoreMap":31},[36,18546,18547,18549],{"class":38,"line":39},[36,18548,18337],{"class":53},[36,18550,18551],{"class":2713}," once\n",[36,18553,18554,18556],{"class":38,"line":46},[36,18555,2699],{"class":53},[36,18557,2702],{"class":998},[36,18559,18560,18562,18564,18566],{"class":38,"line":78},[36,18561,2707],{"class":53},[36,18563,2710],{"class":53},[36,18565,2714],{"class":2713},[36,18567,2040],{"class":49},[36,18569,18570,18572],{"class":38,"line":125},[36,18571,2699],{"class":53},[36,18573,18461],{"class":998},[36,18575,18576,18578],{"class":38,"line":131},[36,18577,15438],{"class":53},[36,18579,15441],{"class":2713},[36,18581,18582],{"class":38,"line":396},[36,18583,2296],{"class":49},[36,18585,18586],{"class":38,"line":407},[36,18587,15460],{"class":53},[36,18589,18590],{"class":38,"line":2061},[36,18591,17738],{"class":42},[36,18593,18594,18596,18598,18600,18602,18604],{"class":38,"line":2067},[36,18595,15653],{"class":53},[36,18597,17858],{"class":2713},[36,18599,901],{"class":49},[36,18601,14781],{"class":53},[36,18603,17865],{"class":416},[36,18605,3468],{"class":49},[36,18607,18608,18610,18612,18614,18616,18618],{"class":38,"line":2079},[36,18609,15653],{"class":53},[36,18611,17880],{"class":2713},[36,18613,901],{"class":49},[36,18615,17885],{"class":2713},[36,18617,17888],{"class":416},[36,18619,3468],{"class":49},[36,18621,18622],{"class":38,"line":2362},[36,18623,17901],{"class":42},[36,18625,18626,18628,18630],{"class":38,"line":2367},[36,18627,15482],{"class":53},[36,18629,17908],{"class":2713},[36,18631,6383],{"class":49},[36,18633,18634,18636,18638],{"class":38,"line":2373},[36,18635,17920],{"class":2713},[36,18637,17923],{"class":2713},[36,18639,6383],{"class":49},[36,18641,18642],{"class":38,"line":2378},[36,18643,194],{"emptyLinePlaceholder":193},[36,18645,18646],{"class":38,"line":2392},[36,18647,15966],{"class":53},[36,18649,18650,18652],{"class":38,"line":2397},[36,18651,15482],{"class":53},[36,18653,15472],{"class":49},[36,18655,18656],{"class":38,"line":2403},[36,18657,17949],{"class":42},[36,18659,18660],{"class":38,"line":2424},[36,18661,17954],{"class":49},[36,18663,18664],{"class":38,"line":2429},[36,18665,4744],{"class":49},[14,18667,18668],{},"创建circle.cpp",[26,18670,18672],{"className":889,"code":18671,"language":891,"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,18673,18674,18681,18704,18726,18731,18747],{"__ignoreMap":31},[36,18675,18676,18678],{"class":38,"line":39},[36,18677,2699],{"class":53},[36,18679,18680],{"class":998},"\u003Ccircle.h>\n",[36,18682,18683,18685,18688,18690,18692,18694,18696,18698,18700,18702],{"class":38,"line":46},[36,18684,6111],{"class":53},[36,18686,18687],{"class":2713}," Circle",[36,18689,18476],{"class":49},[36,18691,18204],{"class":2713},[36,18693,901],{"class":49},[36,18695,14781],{"class":53},[36,18697,17865],{"class":416},[36,18699,17868],{"class":49},[36,18701,54],{"class":53},[36,18703,17873],{"class":49},[36,18705,18706,18708,18710,18712,18714,18716,18718,18720,18722,18724],{"class":38,"line":78},[36,18707,6111],{"class":53},[36,18709,18687],{"class":2713},[36,18711,18476],{"class":49},[36,18713,18256],{"class":2713},[36,18715,901],{"class":49},[36,18717,17885],{"class":2713},[36,18719,17888],{"class":416},[36,18721,17891],{"class":49},[36,18723,54],{"class":53},[36,18725,17896],{"class":49},[36,18727,18728],{"class":38,"line":125},[36,18729,18730],{"class":42},"\u002F\u002F获取属性\n",[36,18732,18733,18735,18737,18739,18741,18743,18745],{"class":38,"line":131},[36,18734,14781],{"class":53},[36,18736,18687],{"class":2713},[36,18738,18476],{"class":49},[36,18740,18088],{"class":2713},[36,18742,17787],{"class":49},[36,18744,17790],{"class":53},[36,18746,17915],{"class":49},[36,18748,18749,18751,18753,18755,18757,18759,18761],{"class":38,"line":396},[36,18750,17885],{"class":2713},[36,18752,18687],{"class":2713},[36,18754,18476],{"class":49},[36,18756,18002],{"class":2713},[36,18758,17787],{"class":49},[36,18760,17790],{"class":53},[36,18762,17930],{"class":49},[14,18764,18765],{},"使用封装的类",[26,18767,18769],{"className":889,"code":18768,"language":891,"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,18770,18771,18777,18787,18793,18799,18823,18827,18853,18879,18903,18917,18921,18933,18937,18941,18945,18957,18961,18965,18973,18977,18981,18985,18989,18993,19003,19009,19017,19025,19035,19041,19053,19061,19069,19079,19085,19097,19101,19109,19115],{"__ignoreMap":31},[36,18772,18773,18775],{"class":38,"line":39},[36,18774,2699],{"class":53},[36,18776,2702],{"class":998},[36,18778,18779,18781,18783,18785],{"class":38,"line":46},[36,18780,2707],{"class":53},[36,18782,2710],{"class":53},[36,18784,2714],{"class":2713},[36,18786,2040],{"class":49},[36,18788,18789,18791],{"class":38,"line":78},[36,18790,2699],{"class":53},[36,18792,18680],{"class":998},[36,18794,18795,18797],{"class":38,"line":125},[36,18796,2699],{"class":53},[36,18798,18461],{"class":998},[36,18800,18801,18803,18805,18807,18809,18811,18813,18815,18817,18819,18821],{"class":38,"line":131},[36,18802,6111],{"class":53},[36,18804,17965],{"class":2713},[36,18806,901],{"class":49},[36,18808,17970],{"class":2713},[36,18810,11331],{"class":53},[36,18812,1177],{"class":416},[36,18814,64],{"class":49},[36,18816,17885],{"class":2713},[36,18818,11331],{"class":53},[36,18820,14],{"class":416},[36,18822,75],{"class":49},[36,18824,18825],{"class":38,"line":396},[36,18826,2296],{"class":49},[36,18828,18829,18831,18833,18835,18837,18839,18841,18843,18845,18847,18849,18851],{"class":38,"line":407},[36,18830,15482],{"class":53},[36,18832,17995],{"class":49},[36,18834,54],{"class":53},[36,18836,17086],{"class":49},[36,18838,18002],{"class":2713},[36,18840,18005],{"class":49},[36,18842,18008],{"class":2713},[36,18844,13794],{"class":49},[36,18846,1414],{"class":53},[36,18848,16632],{"class":49},[36,18850,18008],{"class":2713},[36,18852,6383],{"class":49},[36,18854,18855,18857,18859,18861,18863,18865,18867,18869,18871,18873,18875,18877],{"class":38,"line":2061},[36,18856,15482],{"class":53},[36,18858,18025],{"class":49},[36,18860,54],{"class":53},[36,18862,17086],{"class":49},[36,18864,18002],{"class":2713},[36,18866,18005],{"class":49},[36,18868,18036],{"class":2713},[36,18870,13794],{"class":49},[36,18872,1414],{"class":53},[36,18874,16632],{"class":49},[36,18876,18036],{"class":2713},[36,18878,6383],{"class":49},[36,18880,18881,18883,18885,18887,18889,18891,18893,18895,18897,18899,18901],{"class":38,"line":2067},[36,18882,15482],{"class":53},[36,18884,18053],{"class":49},[36,18886,54],{"class":53},[36,18888,18058],{"class":2713},[36,18890,18061],{"class":49},[36,18892,1339],{"class":53},[36,18894,17995],{"class":49},[36,18896,1365],{"class":53},[36,18898,18025],{"class":49},[36,18900,1339],{"class":53},[36,18902,18074],{"class":49},[36,18904,18905,18907,18909,18911,18913,18915],{"class":38,"line":2079},[36,18906,3850],{"class":53},[36,18908,18081],{"class":49},[36,18910,1789],{"class":53},[36,18912,17086],{"class":49},[36,18914,18088],{"class":2713},[36,18916,18091],{"class":49},[36,18918,18919],{"class":38,"line":2362},[36,18920,2780],{"class":49},[36,18922,18923,18925,18927,18929,18931],{"class":38,"line":2367},[36,18924,10416],{"class":49},[36,18926,1923],{"class":53},[36,18928,18104],{"class":998},[36,18930,2194],{"class":53},[36,18932,9587],{"class":49},[36,18934,18935],{"class":38,"line":2373},[36,18936,2937],{"class":49},[36,18938,18939],{"class":38,"line":2378},[36,18940,17567],{"class":53},[36,18942,18943],{"class":38,"line":2392},[36,18944,2780],{"class":49},[36,18946,18947,18949,18951,18953,18955],{"class":38,"line":2397},[36,18948,10416],{"class":49},[36,18950,1923],{"class":53},[36,18952,18129],{"class":998},[36,18954,2194],{"class":53},[36,18956,9587],{"class":49},[36,18958,18959],{"class":38,"line":2403},[36,18960,2937],{"class":49},[36,18962,18963],{"class":38,"line":2424},[36,18964,2315],{"class":49},[36,18966,18967,18969,18971],{"class":38,"line":2429},[36,18968,904],{"class":53},[36,18970,2723],{"class":2713},[36,18972,2726],{"class":49},[36,18974,18975],{"class":38,"line":2443},[36,18976,2296],{"class":49},[36,18978,18979],{"class":38,"line":2448},[36,18980,15797],{"class":42},[36,18982,18983],{"class":38,"line":2477},[36,18984,15544],{"class":49},[36,18986,18987],{"class":38,"line":2482},[36,18988,18166],{"class":49},[36,18990,18991],{"class":38,"line":2499},[36,18992,17738],{"class":42},[36,18994,18995,18997,18999,19001],{"class":38,"line":2504},[36,18996,2301],{"class":49},[36,18998,1923],{"class":53},[36,19000,18179],{"class":998},[36,19002,2040],{"class":49},[36,19004,19005,19007],{"class":38,"line":2509},[36,19006,15482],{"class":53},[36,19008,18188],{"class":49},[36,19010,19011,19013,19015],{"class":38,"line":2514},[36,19012,2762],{"class":49},[36,19014,2179],{"class":53},[36,19016,18197],{"class":49},[36,19018,19019,19021,19023],{"class":38,"line":2528},[36,19020,17339],{"class":49},[36,19022,18204],{"class":2713},[36,19024,18207],{"class":49},[36,19026,19027,19029,19031,19033],{"class":38,"line":2533},[36,19028,2301],{"class":49},[36,19030,1923],{"class":53},[36,19032,18216],{"class":998},[36,19034,2040],{"class":49},[36,19036,19037,19039],{"class":38,"line":3326},[36,19038,15482],{"class":53},[36,19040,18225],{"class":49},[36,19042,19043,19045,19047,19049,19051],{"class":38,"line":3340},[36,19044,2762],{"class":49},[36,19046,2179],{"class":53},[36,19048,1700],{"class":49},[36,19050,2179],{"class":53},[36,19052,18238],{"class":49},[36,19054,19055,19057,19059],{"class":38,"line":3348},[36,19056,18243],{"class":49},[36,19058,18246],{"class":2713},[36,19060,18249],{"class":49},[36,19062,19063,19065,19067],{"class":38,"line":3353},[36,19064,17339],{"class":49},[36,19066,18256],{"class":2713},[36,19068,18259],{"class":49},[36,19070,19071,19073,19075,19077],{"class":38,"line":3359},[36,19072,2301],{"class":49},[36,19074,1923],{"class":53},[36,19076,18268],{"class":998},[36,19078,2040],{"class":49},[36,19080,19081,19083],{"class":38,"line":3365},[36,19082,15482],{"class":53},[36,19084,18277],{"class":49},[36,19086,19087,19089,19091,19093,19095],{"class":38,"line":3370},[36,19088,2762],{"class":49},[36,19090,2179],{"class":53},[36,19092,18286],{"class":49},[36,19094,2179],{"class":53},[36,19096,18291],{"class":49},[36,19098,19099],{"class":38,"line":8695},[36,19100,18296],{"class":49},[36,19102,19103,19105,19107],{"class":38,"line":8719},[36,19104,18301],{"class":49},[36,19106,18246],{"class":2713},[36,19108,18306],{"class":49},[36,19110,19111,19113],{"class":38,"line":8724},[36,19112,18311],{"class":2713},[36,19114,18314],{"class":49},[36,19116,19117],{"class":38,"line":8730},[36,19118,2315],{"class":49},[21,19120,19122],{"id":19121},"_82对象的初始化清理","8.2对象的初始化清理",[1886,19124,19125,19128],{},[854,19126,19127],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[854,19129,19130],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[868,19132,19134],{"id":19133},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,19136,19137,19138,19141],{},"对象的",[1043,19139,19140],{},"初始化和清理","也是两个非常重要的安全问题",[14,19143,19144],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,19146,19147],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,19149,19150,19151,19154,19155,19158],{},"c++利用了",[1043,19152,19153],{},"构造函数","和",[1043,19156,19157],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,19160,19161,19162],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[1043,19163,19164],{},"我们不提供构造和析构，编译器会提供",[14,19166,19167],{},[1043,19168,19169],{},"编译器提供的构造函数和析构函数是空实现。",[1886,19171,19172,19175],{},[854,19173,19174],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[854,19176,19177,19178,19181],{},"析构函数：主要作用在于对象",[1043,19179,19180],{},"销毁前","系统自动调用，执行一些清理工作。",[14,19183,19184,19187],{},[1043,19185,19186],{},"构造函数语法：",[33,19188,19189],{},"类名(){}",[851,19191,19192,19195,19198,19201,19204],{},[854,19193,19194],{},"构造函数，没有返回值也不写void",[854,19196,19197],{},"函数名称与类名相同",[854,19199,19200],{},"构造函数可以有参数，因此可以发生重载",[854,19202,19203],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[854,19205,19206,19207,1314],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[33,19208,19209],{},"Person(){}",[14,19211,19212,14539,19215],{},[1043,19213,19214],{},"析构函数语法：",[33,19216,19217],{},"~类名(){}",[851,19219,19220,19223,19226,19232],{},[854,19221,19222],{},"析构函数，没有返回值也不写void",[854,19224,19225],{},"函数名称与类名相同,在名称前加上符号  ~",[854,19227,19228,19229],{},"析构函数不可以有参数，因此",[1043,19230,19231],{},"不可以发生重载",[854,19233,19234],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[26,19236,19238],{"className":889,"code":19237,"language":891,"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,19239,19240,19246,19250,19254,19259,19266,19270,19283,19287,19292,19299,19303,19316,19320,19324,19328,19332,19340,19344,19352,19356,19360,19368,19372,19377,19381,19388,19392,19405,19409,19417],{"__ignoreMap":31},[36,19241,19242,19244],{"class":38,"line":39},[36,19243,15438],{"class":53},[36,19245,15915],{"class":2713},[36,19247,19248],{"class":38,"line":46},[36,19249,2296],{"class":49},[36,19251,19252],{"class":38,"line":78},[36,19253,15460],{"class":53},[36,19255,19256],{"class":38,"line":125},[36,19257,19258],{"class":42},"    \u002F\u002F构造函数\n",[36,19260,19261,19264],{"class":38,"line":131},[36,19262,19263],{"class":2713},"    Person",[36,19265,2726],{"class":49},[36,19267,19268],{"class":38,"line":396},[36,19269,2780],{"class":49},[36,19271,19272,19274,19276,19279,19281],{"class":38,"line":407},[36,19273,10416],{"class":49},[36,19275,1923],{"class":53},[36,19277,19278],{"class":998}," \"Person的构造函数调用\"",[36,19280,2194],{"class":53},[36,19282,9587],{"class":49},[36,19284,19285],{"class":38,"line":2061},[36,19286,2937],{"class":49},[36,19288,19289],{"class":38,"line":2067},[36,19290,19291],{"class":42},"    \u002F\u002F析构函数\n",[36,19293,19294,19297],{"class":38,"line":2079},[36,19295,19296],{"class":2713},"    ~Person",[36,19298,2726],{"class":49},[36,19300,19301],{"class":38,"line":2362},[36,19302,2780],{"class":49},[36,19304,19305,19307,19309,19312,19314],{"class":38,"line":2367},[36,19306,10416],{"class":49},[36,19308,1923],{"class":53},[36,19310,19311],{"class":998}," \"Person的析构函数调用\"",[36,19313,2194],{"class":53},[36,19315,9587],{"class":49},[36,19317,19318],{"class":38,"line":2373},[36,19319,2937],{"class":49},[36,19321,19322],{"class":38,"line":2378},[36,19323,194],{"emptyLinePlaceholder":193},[36,19325,19326],{"class":38,"line":2392},[36,19327,4744],{"class":49},[36,19329,19330],{"class":38,"line":2397},[36,19331,194],{"emptyLinePlaceholder":193},[36,19333,19334,19336,19338],{"class":38,"line":2403},[36,19335,6111],{"class":53},[36,19337,6335],{"class":2713},[36,19339,2726],{"class":49},[36,19341,19342],{"class":38,"line":2424},[36,19343,2296],{"class":49},[36,19345,19346,19349],{"class":38,"line":2429},[36,19347,19348],{"class":49},"    Person p;",[36,19350,19351],{"class":42},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[36,19353,19354],{"class":38,"line":2443},[36,19355,2315],{"class":49},[36,19357,19358],{"class":38,"line":2448},[36,19359,194],{"emptyLinePlaceholder":193},[36,19361,19362,19364,19366],{"class":38,"line":2477},[36,19363,904],{"class":53},[36,19365,2723],{"class":2713},[36,19367,11600],{"class":49},[36,19369,19370],{"class":38,"line":2482},[36,19371,13954],{"class":49},[36,19373,19374],{"class":38,"line":2499},[36,19375,19376],{"class":42},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[36,19378,19379],{"class":38,"line":2504},[36,19380,194],{"emptyLinePlaceholder":193},[36,19382,19383,19385],{"class":38,"line":2509},[36,19384,19348],{"class":49},[36,19386,19387],{"class":42},"\u002F\u002F只有构造函数\n",[36,19389,19390],{"class":38,"line":2514},[36,19391,194],{"emptyLinePlaceholder":193},[36,19393,19394,19396,19398,19400,19402],{"class":38,"line":2528},[36,19395,3053],{"class":2713},[36,19397,901],{"class":49},[36,19399,3058],{"class":998},[36,19401,6713],{"class":49},[36,19403,19404],{"class":42},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[36,19406,19407],{"class":38,"line":2533},[36,19408,194],{"emptyLinePlaceholder":193},[36,19410,19411,19413,19415],{"class":38,"line":3326},[36,19412,4839],{"class":53},[36,19414,4842],{"class":60},[36,19416,2040],{"class":49},[36,19418,19419],{"class":38,"line":3340},[36,19420,2315],{"class":49},[14,19422,19423],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[868,19425,19427],{"id":19426},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,19429,19430],{},"两种分类方式：",[14,19432,19433],{},"​\t按参数分为： 有参构造和无参构造",[14,19435,19436],{},"​\t按类型分为： 普通构造和拷贝构造",[14,19438,19439],{},"三种调用方式：",[14,19441,19442],{},"​\t括号法",[14,19444,19445],{},"​\t显示法",[14,19447,19448],{},"​\t隐式转换法",[26,19450,19452],{"className":889,"code":19451,"language":891,"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,19453,19454,19460,19470,19475,19480,19485,19490,19494,19502,19506,19510,19514,19520,19524,19537,19541,19553,19557,19566,19579,19583,19587,19593,19597,19610,19614,19619,19635,19639,19644,19653,19666,19670,19676,19680,19685,19693,19697,19702,19706,19714,19718,19723,19728,19733,19738,19743,19747,19752,19757,19762,19767,19771,19776,19781,19797,19809,19814,19818,19823,19828,19833,19837,19842,19856,19869,19873,19881,19885,19891,19897,19905],{"__ignoreMap":31},[36,19455,19456,19458],{"class":38,"line":39},[36,19457,2699],{"class":53},[36,19459,2702],{"class":998},[36,19461,19462,19464,19466,19468],{"class":38,"line":46},[36,19463,2707],{"class":53},[36,19465,2710],{"class":53},[36,19467,2714],{"class":2713},[36,19469,2040],{"class":49},[36,19471,19472],{"class":38,"line":78},[36,19473,19474],{"class":42},"\u002F\u002F1.构造函数的分类及调用\n",[36,19476,19477],{"class":38,"line":125},[36,19478,19479],{"class":42},"\u002F\u002F分类\n",[36,19481,19482],{"class":38,"line":131},[36,19483,19484],{"class":42},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[36,19486,19487],{"class":38,"line":396},[36,19488,19489],{"class":42},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[36,19491,19492],{"class":38,"line":407},[36,19493,194],{"emptyLinePlaceholder":193},[36,19495,19496,19498,19500],{"class":38,"line":2061},[36,19497,15438],{"class":53},[36,19499,16313],{"class":2713},[36,19501,3423],{"class":49},[36,19503,19504],{"class":38,"line":2067},[36,19505,2296],{"class":49},[36,19507,19508],{"class":38,"line":2079},[36,19509,15460],{"class":53},[36,19511,19512],{"class":38,"line":2362},[36,19513,19258],{"class":42},[36,19515,19516,19518],{"class":38,"line":2367},[36,19517,19263],{"class":2713},[36,19519,2726],{"class":49},[36,19521,19522],{"class":38,"line":2373},[36,19523,2780],{"class":49},[36,19525,19526,19528,19530,19533,19535],{"class":38,"line":2378},[36,19527,4200],{"class":49},[36,19529,1923],{"class":53},[36,19531,19532],{"class":998},"\"Person构造函数无参构造\"",[36,19534,1923],{"class":53},[36,19536,1945],{"class":49},[36,19538,19539],{"class":38,"line":2392},[36,19540,2937],{"class":49},[36,19542,19543,19545,19547,19549,19551],{"class":38,"line":2397},[36,19544,19263],{"class":2713},[36,19546,901],{"class":49},[36,19548,904],{"class":53},[36,19550,2148],{"class":416},[36,19552,75],{"class":49},[36,19554,19555],{"class":38,"line":2403},[36,19556,2780],{"class":49},[36,19558,19559,19562,19564],{"class":38,"line":2424},[36,19560,19561],{"class":49},"        age",[36,19563,54],{"class":53},[36,19565,6944],{"class":49},[36,19567,19568,19570,19572,19575,19577],{"class":38,"line":2429},[36,19569,4200],{"class":49},[36,19571,1923],{"class":53},[36,19573,19574],{"class":998},"\"Person构造函数有参构造\"",[36,19576,1923],{"class":53},[36,19578,1945],{"class":49},[36,19580,19581],{"class":38,"line":2443},[36,19582,2937],{"class":49},[36,19584,19585],{"class":38,"line":2448},[36,19586,19291],{"class":42},[36,19588,19589,19591],{"class":38,"line":2477},[36,19590,19296],{"class":2713},[36,19592,2726],{"class":49},[36,19594,19595],{"class":38,"line":2482},[36,19596,2780],{"class":49},[36,19598,19599,19601,19603,19606,19608],{"class":38,"line":2499},[36,19600,4200],{"class":49},[36,19602,1923],{"class":53},[36,19604,19605],{"class":998},"\"Person析构函数被调用\"",[36,19607,1923],{"class":53},[36,19609,1945],{"class":49},[36,19611,19612],{"class":38,"line":2504},[36,19613,2937],{"class":49},[36,19615,19616],{"class":38,"line":2509},[36,19617,19618],{"class":42},"    \u002F\u002F拷贝构造函数\n",[36,19620,19621,19623,19625,19627,19629,19631,19633],{"class":38,"line":2514},[36,19622,19263],{"class":2713},[36,19624,901],{"class":49},[36,19626,7539],{"class":53},[36,19628,16313],{"class":2713},[36,19630,11331],{"class":53},[36,19632,14],{"class":416},[36,19634,75],{"class":49},[36,19636,19637],{"class":38,"line":2528},[36,19638,2780],{"class":49},[36,19640,19641],{"class":38,"line":2533},[36,19642,19643],{"class":42},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[36,19645,19646,19648,19650],{"class":38,"line":3326},[36,19647,19561],{"class":49},[36,19649,54],{"class":53},[36,19651,19652],{"class":49},"p.age;\n",[36,19654,19655,19657,19659,19662,19664],{"class":38,"line":3340},[36,19656,4200],{"class":49},[36,19658,1923],{"class":53},[36,19660,19661],{"class":998},"\"Person拷贝构造函数被调用\"",[36,19663,1923],{"class":53},[36,19665,1945],{"class":49},[36,19667,19668],{"class":38,"line":3348},[36,19669,2937],{"class":49},[36,19671,19672,19674],{"class":38,"line":3353},[36,19673,2735],{"class":53},[36,19675,8544],{"class":49},[36,19677,19678],{"class":38,"line":3359},[36,19679,4744],{"class":49},[36,19681,19682],{"class":38,"line":3365},[36,19683,19684],{"class":42},"\u002F\u002F调用\n",[36,19686,19687,19689,19691],{"class":38,"line":3370},[36,19688,6111],{"class":53},[36,19690,6335],{"class":2713},[36,19692,2726],{"class":49},[36,19694,19695],{"class":38,"line":8695},[36,19696,2296],{"class":49},[36,19698,19699],{"class":38,"line":8719},[36,19700,19701],{"class":42},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[36,19703,19704],{"class":38,"line":8724},[36,19705,2315],{"class":49},[36,19707,19708,19710,19712],{"class":38,"line":8730},[36,19709,6111],{"class":53},[36,19711,6404],{"class":2713},[36,19713,2726],{"class":49},[36,19715,19716],{"class":38,"line":8757},[36,19717,2296],{"class":49},[36,19719,19720],{"class":38,"line":8762},[36,19721,19722],{"class":42},"    \u002F\u002F1.括号法\n",[36,19724,19725],{"class":38,"line":8768},[36,19726,19727],{"class":42},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[36,19729,19730],{"class":38,"line":8780},[36,19731,19732],{"class":42},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[36,19734,19735],{"class":38,"line":8792},[36,19736,19737],{"class":42},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[36,19739,19740],{"class":38,"line":8804},[36,19741,19742],{"class":42},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[36,19744,19745],{"class":38,"line":10463},[36,19746,194],{"emptyLinePlaceholder":193},[36,19748,19749],{"class":38,"line":10488},[36,19750,19751],{"class":42},"    \u002F\u002F注意事项\n",[36,19753,19754],{"class":38,"line":10511},[36,19755,19756],{"class":42},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[36,19758,19759],{"class":38,"line":10535},[36,19760,19761],{"class":42},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[36,19763,19764],{"class":38,"line":10540},[36,19765,19766],{"class":42},"    \u002F\u002F Person p4();\n",[36,19768,19769],{"class":38,"line":10545},[36,19770,194],{"emptyLinePlaceholder":193},[36,19772,19773],{"class":38,"line":10550},[36,19774,19775],{"class":42},"    \u002F\u002F2.显示法\n",[36,19777,19778],{"class":38,"line":10559},[36,19779,19780],{"class":49},"    Person p1;\n",[36,19782,19783,19786,19788,19791,19793,19795],{"class":38,"line":10564},[36,19784,19785],{"class":49},"    Person p2",[36,19787,54],{"class":53},[36,19789,19790],{"class":2713},"Person",[36,19792,901],{"class":49},[36,19794,332],{"class":60},[36,19796,3468],{"class":49},[36,19798,19799,19802,19804,19806],{"class":38,"line":10570},[36,19800,19801],{"class":49},"    Person p3",[36,19803,54],{"class":53},[36,19805,19790],{"class":2713},[36,19807,19808],{"class":49},"(p2);\n",[36,19810,19811],{"class":38,"line":10591},[36,19812,19813],{"class":42},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[36,19815,19816],{"class":38,"line":10597},[36,19817,194],{"emptyLinePlaceholder":193},[36,19819,19820],{"class":38,"line":10611},[36,19821,19822],{"class":42},"    \u002F\u002F 注意事项2\n",[36,19824,19825],{"class":38,"line":10617},[36,19826,19827],{"class":42},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[36,19829,19830],{"class":38,"line":10644},[36,19831,19832],{"class":42},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[36,19834,19835],{"class":38,"line":10653},[36,19836,194],{"emptyLinePlaceholder":193},[36,19838,19839],{"class":38,"line":10659},[36,19840,19841],{"class":42},"    \u002F\u002F3.隐士转换法\n",[36,19843,19844,19847,19849,19851,19853],{"class":38,"line":10667},[36,19845,19846],{"class":49},"    Person p4",[36,19848,54],{"class":53},[36,19850,332],{"class":60},[36,19852,952],{"class":49},[36,19854,19855],{"class":42},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[36,19857,19858,19861,19863,19866],{"class":38,"line":10672},[36,19859,19860],{"class":49},"    Person p5",[36,19862,54],{"class":53},[36,19864,19865],{"class":49},"p4;",[36,19867,19868],{"class":42}," \u002F\u002F 这里会调用拷贝构造函数\n",[36,19870,19871],{"class":38,"line":17348},[36,19872,2315],{"class":49},[36,19874,19875,19877,19879],{"class":38,"line":17354},[36,19876,904],{"class":53},[36,19878,2723],{"class":2713},[36,19880,2726],{"class":49},[36,19882,19883],{"class":38,"line":17377},[36,19884,2296],{"class":49},[36,19886,19887,19889],{"class":38,"line":17383},[36,19888,6380],{"class":2713},[36,19890,6383],{"class":49},[36,19892,19893,19895],{"class":38,"line":17406},[36,19894,6449],{"class":2713},[36,19896,6383],{"class":49},[36,19898,19899,19901,19903],{"class":38,"line":17420},[36,19900,4839],{"class":53},[36,19902,4842],{"class":60},[36,19904,2040],{"class":49},[36,19906,19907],{"class":38,"line":17440},[36,19908,2315],{"class":49},[14,19910,19911,19914],{},[1043,19912,19913],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[868,19916,19918],{"id":19917},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19920,19921],{},"C++中拷贝构造函数调用时机通常有三种情况",[1886,19923,19924,19927,19930],{},[854,19925,19926],{},"使用一个已经创建完毕的对象来初始化一个新对象",[854,19928,19929],{},"值传递的方式给函数参数传值",[854,19931,19932],{},"以值方式返回局部对象",[26,19934,19936],{"className":889,"code":19935,"language":891,"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,19937,19938,19944,19954,19958,19963,19967,19972,19977,19982,19988,19992,19996,20002,20006,20019,20023,20028,20040,20044,20052,20065,20069,20073,20089,20093,20102,20115,20119,20125,20129,20141,20145,20151,20155,20159,20167,20171,20184,20192,20210,20214,20219,20224,20239,20243,20256,20260,20268,20272,20276,20284,20288,20293,20302,20306,20310,20335,20345,20349,20357,20361,20372,20397,20401,20405,20409,20417,20421,20426,20431,20438,20443,20448,20453,20458,20462,20467,20471,20476,20480,20485,20490,20494,20498,20503,20508,20516],{"__ignoreMap":31},[36,19939,19940,19942],{"class":38,"line":39},[36,19941,2699],{"class":53},[36,19943,2702],{"class":998},[36,19945,19946,19948,19950,19952],{"class":38,"line":46},[36,19947,2707],{"class":53},[36,19949,2710],{"class":53},[36,19951,2714],{"class":2713},[36,19953,2040],{"class":49},[36,19955,19956],{"class":38,"line":78},[36,19957,194],{"emptyLinePlaceholder":193},[36,19959,19960],{"class":38,"line":125},[36,19961,19962],{"class":42},"\u002F\u002F拷贝构造函数调用时机\n",[36,19964,19965],{"class":38,"line":131},[36,19966,194],{"emptyLinePlaceholder":193},[36,19968,19969],{"class":38,"line":396},[36,19970,19971],{"class":42},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[36,19973,19974],{"class":38,"line":407},[36,19975,19976],{"class":42},"\u002F\u002F2.值传递的方式给函数参数传值\n",[36,19978,19979],{"class":38,"line":2061},[36,19980,19981],{"class":42},"\u002F\u002F3.以值方式返回局部对象\n",[36,19983,19984,19986],{"class":38,"line":2067},[36,19985,15438],{"class":53},[36,19987,15915],{"class":2713},[36,19989,19990],{"class":38,"line":2079},[36,19991,2296],{"class":49},[36,19993,19994],{"class":38,"line":2362},[36,19995,15460],{"class":53},[36,19997,19998,20000],{"class":38,"line":2367},[36,19999,19263],{"class":2713},[36,20001,2726],{"class":49},[36,20003,20004],{"class":38,"line":2373},[36,20005,2780],{"class":49},[36,20007,20008,20010,20012,20015,20017],{"class":38,"line":2378},[36,20009,10416],{"class":49},[36,20011,1923],{"class":53},[36,20013,20014],{"class":998}," \"Person的默认构造函数调用\"",[36,20016,2194],{"class":53},[36,20018,9587],{"class":49},[36,20020,20021],{"class":38,"line":2392},[36,20022,2937],{"class":49},[36,20024,20025],{"class":38,"line":2397},[36,20026,20027],{"class":42},"    \u002F\u002F有参构造\n",[36,20029,20030,20032,20034,20036,20038],{"class":38,"line":2403},[36,20031,19263],{"class":2713},[36,20033,901],{"class":49},[36,20035,904],{"class":53},[36,20037,16433],{"class":416},[36,20039,75],{"class":49},[36,20041,20042],{"class":38,"line":2424},[36,20043,2780],{"class":49},[36,20045,20046,20048,20050],{"class":38,"line":2429},[36,20047,16487],{"class":49},[36,20049,54],{"class":53},[36,20051,8544],{"class":49},[36,20053,20054,20056,20058,20061,20063],{"class":38,"line":2443},[36,20055,10416],{"class":49},[36,20057,1923],{"class":53},[36,20059,20060],{"class":998}," \"Person的有参构造函数调用\"",[36,20062,2194],{"class":53},[36,20064,9587],{"class":49},[36,20066,20067],{"class":38,"line":2448},[36,20068,2937],{"class":49},[36,20070,20071],{"class":38,"line":2477},[36,20072,19618],{"class":42},[36,20074,20075,20077,20079,20081,20083,20085,20087],{"class":38,"line":2482},[36,20076,19263],{"class":2713},[36,20078,901],{"class":49},[36,20080,7539],{"class":53},[36,20082,16313],{"class":2713},[36,20084,11331],{"class":53},[36,20086,14],{"class":416},[36,20088,75],{"class":49},[36,20090,20091],{"class":38,"line":2499},[36,20092,2780],{"class":49},[36,20094,20095,20097,20099],{"class":38,"line":2504},[36,20096,16487],{"class":49},[36,20098,54],{"class":53},[36,20100,20101],{"class":49}," p.m_Age;\n",[36,20103,20104,20106,20108,20111,20113],{"class":38,"line":2509},[36,20105,10416],{"class":49},[36,20107,1923],{"class":53},[36,20109,20110],{"class":998}," \"Person的拷贝构造函数调用\"",[36,20112,2194],{"class":53},[36,20114,9587],{"class":49},[36,20116,20117],{"class":38,"line":2514},[36,20118,2937],{"class":49},[36,20120,20121,20123],{"class":38,"line":2528},[36,20122,19296],{"class":2713},[36,20124,2726],{"class":49},[36,20126,20127],{"class":38,"line":2533},[36,20128,2780],{"class":49},[36,20130,20131,20133,20135,20137,20139],{"class":38,"line":3326},[36,20132,10416],{"class":49},[36,20134,1923],{"class":53},[36,20136,19311],{"class":998},[36,20138,2194],{"class":53},[36,20140,9587],{"class":49},[36,20142,20143],{"class":38,"line":3340},[36,20144,2937],{"class":49},[36,20146,20147,20149],{"class":38,"line":3348},[36,20148,2735],{"class":53},[36,20150,16410],{"class":49},[36,20152,20153],{"class":38,"line":3353},[36,20154,4744],{"class":49},[36,20156,20157],{"class":38,"line":3359},[36,20158,19971],{"class":42},[36,20160,20161,20163,20165],{"class":38,"line":3365},[36,20162,6111],{"class":53},[36,20164,6335],{"class":2713},[36,20166,2726],{"class":49},[36,20168,20169],{"class":38,"line":3370},[36,20170,2296],{"class":49},[36,20172,20173,20176,20178,20180,20182],{"class":38,"line":8695},[36,20174,20175],{"class":49},"    Person ",[36,20177,7877],{"class":2713},[36,20179,901],{"class":49},[36,20181,72],{"class":60},[36,20183,3468],{"class":49},[36,20185,20186,20188,20190],{"class":38,"line":8719},[36,20187,20175],{"class":49},[36,20189,7780],{"class":2713},[36,20191,18259],{"class":49},[36,20193,20194,20196,20198,20201,20203,20206,20208],{"class":38,"line":8724},[36,20195,2301],{"class":49},[36,20197,1923],{"class":53},[36,20199,20200],{"class":998},"\"P2的年龄为：\"",[36,20202,1923],{"class":53},[36,20204,20205],{"class":49},"p2.m_Age",[36,20207,1923],{"class":53},[36,20209,1945],{"class":49},[36,20211,20212],{"class":38,"line":8730},[36,20213,2315],{"class":49},[36,20215,20216],{"class":38,"line":8757},[36,20217,20218],{"class":42},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[36,20220,20221],{"class":38,"line":8762},[36,20222,20223],{"class":42},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[36,20225,20226,20228,20231,20233,20235,20237],{"class":38,"line":8768},[36,20227,6111],{"class":53},[36,20229,20230],{"class":2713}," doWork",[36,20232,901],{"class":49},[36,20234,19790],{"class":2713},[36,20236,7572],{"class":416},[36,20238,75],{"class":49},[36,20240,20241],{"class":38,"line":8780},[36,20242,2296],{"class":49},[36,20244,20245,20247,20249,20252,20254],{"class":38,"line":8792},[36,20246,7276],{"class":49},[36,20248,1923],{"class":53},[36,20250,20251],{"class":998}," \"doWork函数调用\"",[36,20253,2194],{"class":53},[36,20255,9587],{"class":49},[36,20257,20258],{"class":38,"line":8804},[36,20259,2315],{"class":49},[36,20261,20262,20264,20266],{"class":38,"line":10463},[36,20263,6111],{"class":53},[36,20265,6404],{"class":2713},[36,20267,2726],{"class":49},[36,20269,20270],{"class":38,"line":10488},[36,20271,2296],{"class":49},[36,20273,20274],{"class":38,"line":10511},[36,20275,16057],{"class":49},[36,20277,20278,20281],{"class":38,"line":10535},[36,20279,20280],{"class":2713},"    doWork",[36,20282,20283],{"class":49},"(p);\n",[36,20285,20286],{"class":38,"line":10540},[36,20287,2315],{"class":49},[36,20289,20290],{"class":38,"line":10545},[36,20291,20292],{"class":42},"\u002F\u002F 3.以值方式返回局部对象\n",[36,20294,20295,20297,20300],{"class":38,"line":10550},[36,20296,19790],{"class":2713},[36,20298,20299],{"class":2713}," doWork2",[36,20301,2726],{"class":49},[36,20303,20304],{"class":38,"line":10559},[36,20305,2296],{"class":49},[36,20307,20308],{"class":38,"line":10564},[36,20309,19780],{"class":49},[36,20311,20312,20314,20316,20318,20320,20322,20324,20326,20328,20330,20332],{"class":38,"line":10570},[36,20313,2301],{"class":49},[36,20315,1923],{"class":53},[36,20317,901],{"class":49},[36,20319,904],{"class":53},[36,20321,7265],{"class":53},[36,20323,1314],{"class":49},[36,20325,1239],{"class":53},[36,20327,7877],{"class":49},[36,20329,1923],{"class":53},[36,20331,1988],{"class":49},[36,20333,20334],{"class":42},"\u002F\u002F打印p1的地址\n",[36,20336,20337,20339,20342],{"class":38,"line":10591},[36,20338,4839],{"class":53},[36,20340,20341],{"class":49}," p1;",[36,20343,20344],{"class":42},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[36,20346,20347],{"class":38,"line":10597},[36,20348,2315],{"class":49},[36,20350,20351,20353,20355],{"class":38,"line":10611},[36,20352,6111],{"class":53},[36,20354,6476],{"class":2713},[36,20356,2726],{"class":49},[36,20358,20359],{"class":38,"line":10617},[36,20360,2296],{"class":49},[36,20362,20363,20366,20368,20370],{"class":38,"line":10644},[36,20364,20365],{"class":49},"    Person p ",[36,20367,54],{"class":53},[36,20369,20299],{"class":2713},[36,20371,6383],{"class":49},[36,20373,20374,20376,20378,20380,20382,20384,20386,20388,20390,20392,20394],{"class":38,"line":10653},[36,20375,2301],{"class":49},[36,20377,1923],{"class":53},[36,20379,901],{"class":49},[36,20381,904],{"class":53},[36,20383,7265],{"class":53},[36,20385,1314],{"class":49},[36,20387,1239],{"class":53},[36,20389,14],{"class":49},[36,20391,1923],{"class":53},[36,20393,1988],{"class":49},[36,20395,20396],{"class":42},"\u002F\u002F打印p的地址\n",[36,20398,20399],{"class":38,"line":10659},[36,20400,2315],{"class":49},[36,20402,20403],{"class":38,"line":10667},[36,20404,194],{"emptyLinePlaceholder":193},[36,20406,20407],{"class":38,"line":10672},[36,20408,194],{"emptyLinePlaceholder":193},[36,20410,20411,20413,20415],{"class":38,"line":17348},[36,20412,904],{"class":53},[36,20414,2723],{"class":2713},[36,20416,2726],{"class":49},[36,20418,20419],{"class":38,"line":17354},[36,20420,2296],{"class":49},[36,20422,20423],{"class":38,"line":17377},[36,20424,20425],{"class":42},"    \u002F\u002F test01();\n",[36,20427,20428],{"class":38,"line":17383},[36,20429,20430],{"class":42},"    \u002F\u002F test02();\n",[36,20432,20433,20436],{"class":38,"line":17406},[36,20434,20435],{"class":2713},"    test03",[36,20437,6383],{"class":49},[36,20439,20440],{"class":38,"line":17420},[36,20441,20442],{"class":42},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[36,20444,20445],{"class":38,"line":17440},[36,20446,20447],{"class":42},"\u002F\u002F 输出结果如下：\n",[36,20449,20450],{"class":38,"line":17446},[36,20451,20452],{"class":42},"\u002F\u002F Person的默认构造函数调用\n",[36,20454,20455],{"class":38,"line":17457},[36,20456,20457],{"class":42},"\u002F\u002F 0x7fffffffceec\n",[36,20459,20460],{"class":38,"line":17480},[36,20461,20457],{"class":42},[36,20463,20464],{"class":38,"line":17502},[36,20465,20466],{"class":42},"\u002F\u002F Person的析构函数调用\n",[36,20468,20469],{"class":38,"line":17507},[36,20470,194],{"emptyLinePlaceholder":193},[36,20472,20473],{"class":38,"line":17513},[36,20474,20475],{"class":42},"\u002F\u002F 之前的输出结果如下：\n",[36,20477,20478],{"class":38,"line":17527},[36,20479,20452],{"class":42},[36,20481,20482],{"class":38,"line":17540},[36,20483,20484],{"class":42},"\u002F\u002F 地址\n",[36,20486,20487],{"class":38,"line":17545},[36,20488,20489],{"class":42},"\u002F\u002F Person的拷贝构造函数调用\n",[36,20491,20492],{"class":38,"line":17559},[36,20493,20466],{"class":42},[36,20495,20496],{"class":38,"line":17564},[36,20497,20484],{"class":42},[36,20499,20500],{"class":38,"line":17570},[36,20501,20502],{"class":42},"\u002F\u002F (这两次输出的地址也是不同的) \n",[36,20504,20505],{"class":38,"line":17575},[36,20506,20507],{"class":42},"\u002F\u002F Person的析构函数调用     \n",[36,20509,20510,20512,20514],{"class":38,"line":17589},[36,20511,4839],{"class":53},[36,20513,4842],{"class":60},[36,20515,2040],{"class":49},[36,20517,20518],{"class":38,"line":17594},[36,20519,2315],{"class":49},[14,20521,20522],{},"简化版理解",[26,20524,20526],{"className":889,"code":20525,"language":891,"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,20527,20528,20536,20540,20546,20559,20570,20574,20586,20599,20607,20611,20627,20640,20649,20653,20658,20664,20677,20681,20685,20692,20696,20700,20705,20713,20717,20733,20746,20759,20763,20768,20776,20780,20784,20789,20794,20810,20818,20825,20831,20835,20839,20844,20852,20856,20860,20883,20890,20894,20898,20906,20910,20920,20942,20946,20950,20954,20962,20966,20971,20976,20982,20986,20996,21000,21008],{"__ignoreMap":31},[36,20529,20530,20532,20534],{"class":38,"line":39},[36,20531,15438],{"class":53},[36,20533,16313],{"class":2713},[36,20535,16316],{"class":49},[36,20537,20538],{"class":38,"line":46},[36,20539,15460],{"class":53},[36,20541,20542,20544],{"class":38,"line":78},[36,20543,19263],{"class":2713},[36,20545,11600],{"class":49},[36,20547,20548,20550,20552,20555,20557],{"class":38,"line":125},[36,20549,10416],{"class":49},[36,20551,1923],{"class":53},[36,20553,20554],{"class":998}," \"无参构造函数!\"",[36,20556,2194],{"class":53},[36,20558,9587],{"class":49},[36,20560,20561,20564,20566,20568],{"class":38,"line":131},[36,20562,20563],{"class":49},"        mAge ",[36,20565,54],{"class":53},[36,20567,4842],{"class":60},[36,20569,2040],{"class":49},[36,20571,20572],{"class":38,"line":396},[36,20573,2937],{"class":49},[36,20575,20576,20578,20580,20582,20584],{"class":38,"line":407},[36,20577,19263],{"class":2713},[36,20579,901],{"class":49},[36,20581,904],{"class":53},[36,20583,16433],{"class":416},[36,20585,13186],{"class":49},[36,20587,20588,20590,20592,20595,20597],{"class":38,"line":2061},[36,20589,10416],{"class":49},[36,20591,1923],{"class":53},[36,20593,20594],{"class":998}," \"有参构造函数!\"",[36,20596,2194],{"class":53},[36,20598,9587],{"class":49},[36,20600,20601,20603,20605],{"class":38,"line":2067},[36,20602,20563],{"class":49},[36,20604,54],{"class":53},[36,20606,8544],{"class":49},[36,20608,20609],{"class":38,"line":2079},[36,20610,2937],{"class":49},[36,20612,20613,20615,20617,20619,20621,20623,20625],{"class":38,"line":2362},[36,20614,19263],{"class":2713},[36,20616,901],{"class":49},[36,20618,7539],{"class":53},[36,20620,16313],{"class":2713},[36,20622,1239],{"class":53},[36,20624,7572],{"class":416},[36,20626,13186],{"class":49},[36,20628,20629,20631,20633,20636,20638],{"class":38,"line":2367},[36,20630,10416],{"class":49},[36,20632,1923],{"class":53},[36,20634,20635],{"class":998}," \"拷贝构造函数!\"",[36,20637,2194],{"class":53},[36,20639,9587],{"class":49},[36,20641,20642,20644,20646],{"class":38,"line":2373},[36,20643,20563],{"class":49},[36,20645,54],{"class":53},[36,20647,20648],{"class":49}," p.mAge;\n",[36,20650,20651],{"class":38,"line":2378},[36,20652,2937],{"class":49},[36,20654,20655],{"class":38,"line":2392},[36,20656,20657],{"class":42},"    \u002F\u002F析构函数在释放内存之前调用\n",[36,20659,20660,20662],{"class":38,"line":2397},[36,20661,19296],{"class":2713},[36,20663,11600],{"class":49},[36,20665,20666,20668,20670,20673,20675],{"class":38,"line":2403},[36,20667,10416],{"class":49},[36,20669,1923],{"class":53},[36,20671,20672],{"class":998}," \"析构函数!\"",[36,20674,2194],{"class":53},[36,20676,9587],{"class":49},[36,20678,20679],{"class":38,"line":2424},[36,20680,2937],{"class":49},[36,20682,20683],{"class":38,"line":2429},[36,20684,15460],{"class":53},[36,20686,20687,20689],{"class":38,"line":2443},[36,20688,2735],{"class":53},[36,20690,20691],{"class":49}," mAge;\n",[36,20693,20694],{"class":38,"line":2448},[36,20695,4744],{"class":49},[36,20697,20698],{"class":38,"line":2477},[36,20699,194],{"emptyLinePlaceholder":193},[36,20701,20702],{"class":38,"line":2482},[36,20703,20704],{"class":42},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[36,20706,20707,20709,20711],{"class":38,"line":2499},[36,20708,6111],{"class":53},[36,20710,6335],{"class":2713},[36,20712,11600],{"class":49},[36,20714,20715],{"class":38,"line":2504},[36,20716,194],{"emptyLinePlaceholder":193},[36,20718,20719,20721,20724,20726,20728,20730],{"class":38,"line":2509},[36,20720,20175],{"class":49},[36,20722,20723],{"class":2713},"man",[36,20725,901],{"class":49},[36,20727,67],{"class":60},[36,20729,6713],{"class":49},[36,20731,20732],{"class":42}," \u002F\u002Fp对象已经创建完毕\n",[36,20734,20735,20737,20740,20743],{"class":38,"line":2514},[36,20736,20175],{"class":49},[36,20738,20739],{"class":2713},"newman",[36,20741,20742],{"class":49},"(man);",[36,20744,20745],{"class":42}," \u002F\u002F调用拷贝构造函数\n",[36,20747,20748,20751,20753,20756],{"class":38,"line":2528},[36,20749,20750],{"class":49},"    Person newman2 ",[36,20752,54],{"class":53},[36,20754,20755],{"class":49}," man;",[36,20757,20758],{"class":42}," \u002F\u002F拷贝构造\n",[36,20760,20761],{"class":38,"line":2533},[36,20762,194],{"emptyLinePlaceholder":193},[36,20764,20765],{"class":38,"line":3326},[36,20766,20767],{"class":42},"    \u002F\u002FPerson newman3;\n",[36,20769,20770,20773],{"class":38,"line":3340},[36,20771,20772],{"class":42},"    \u002F\u002Fnewman3 = man;",[36,20774,20775],{"class":42}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[36,20777,20778],{"class":38,"line":3348},[36,20779,2315],{"class":49},[36,20781,20782],{"class":38,"line":3353},[36,20783,194],{"emptyLinePlaceholder":193},[36,20785,20786],{"class":38,"line":3359},[36,20787,20788],{"class":42},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[36,20790,20791],{"class":38,"line":3365},[36,20792,20793],{"class":42},"\u002F\u002F相当于Person p1 = p;\n",[36,20795,20796,20798,20800,20802,20804,20807],{"class":38,"line":3370},[36,20797,6111],{"class":53},[36,20799,20230],{"class":2713},[36,20801,901],{"class":49},[36,20803,19790],{"class":2713},[36,20805,20806],{"class":416}," p1",[36,20808,20809],{"class":49},") {}\n",[36,20811,20812,20814,20816],{"class":38,"line":8695},[36,20813,6111],{"class":53},[36,20815,6404],{"class":2713},[36,20817,11600],{"class":49},[36,20819,20820,20822],{"class":38,"line":8719},[36,20821,19348],{"class":49},[36,20823,20824],{"class":42}," \u002F\u002F无参构造函数\n",[36,20826,20827,20829],{"class":38,"line":8724},[36,20828,20280],{"class":2713},[36,20830,20283],{"class":49},[36,20832,20833],{"class":38,"line":8730},[36,20834,2315],{"class":49},[36,20836,20837],{"class":38,"line":8757},[36,20838,194],{"emptyLinePlaceholder":193},[36,20840,20841],{"class":38,"line":8762},[36,20842,20843],{"class":42},"\u002F\u002F3. 以值方式返回局部对象\n",[36,20845,20846,20848,20850],{"class":38,"line":8768},[36,20847,19790],{"class":2713},[36,20849,20299],{"class":2713},[36,20851,2726],{"class":49},[36,20853,20854],{"class":38,"line":8780},[36,20855,2296],{"class":49},[36,20857,20858],{"class":38,"line":8792},[36,20859,19780],{"class":49},[36,20861,20862,20864,20866,20868,20870,20872,20874,20876,20879,20881],{"class":38,"line":8804},[36,20863,7276],{"class":49},[36,20865,1923],{"class":53},[36,20867,2408],{"class":49},[36,20869,904],{"class":53},[36,20871,7265],{"class":53},[36,20873,1314],{"class":49},[36,20875,1239],{"class":53},[36,20877,20878],{"class":49},"p1 ",[36,20880,1923],{"class":53},[36,20882,9587],{"class":49},[36,20884,20885,20887],{"class":38,"line":10463},[36,20886,4839],{"class":53},[36,20888,20889],{"class":49}," p1;\n",[36,20891,20892],{"class":38,"line":10488},[36,20893,2315],{"class":49},[36,20895,20896],{"class":38,"line":10511},[36,20897,194],{"emptyLinePlaceholder":193},[36,20899,20900,20902,20904],{"class":38,"line":10535},[36,20901,6111],{"class":53},[36,20903,6476],{"class":2713},[36,20905,2726],{"class":49},[36,20907,20908],{"class":38,"line":10540},[36,20909,2296],{"class":49},[36,20911,20912,20914,20916,20918],{"class":38,"line":10545},[36,20913,20365],{"class":49},[36,20915,54],{"class":53},[36,20917,20299],{"class":2713},[36,20919,6383],{"class":49},[36,20921,20922,20924,20926,20928,20930,20932,20934,20936,20938,20940],{"class":38,"line":10550},[36,20923,7276],{"class":49},[36,20925,1923],{"class":53},[36,20927,2408],{"class":49},[36,20929,904],{"class":53},[36,20931,7265],{"class":53},[36,20933,1314],{"class":49},[36,20935,1239],{"class":53},[36,20937,12193],{"class":49},[36,20939,1923],{"class":53},[36,20941,9587],{"class":49},[36,20943,20944],{"class":38,"line":10559},[36,20945,2315],{"class":49},[36,20947,20948],{"class":38,"line":10564},[36,20949,194],{"emptyLinePlaceholder":193},[36,20951,20952],{"class":38,"line":10570},[36,20953,194],{"emptyLinePlaceholder":193},[36,20955,20956,20958,20960],{"class":38,"line":10591},[36,20957,904],{"class":53},[36,20959,2723],{"class":2713},[36,20961,11600],{"class":49},[36,20963,20964],{"class":38,"line":10597},[36,20965,194],{"emptyLinePlaceholder":193},[36,20967,20968],{"class":38,"line":10611},[36,20969,20970],{"class":42},"    \u002F\u002Ftest01();\n",[36,20972,20973],{"class":38,"line":10617},[36,20974,20975],{"class":42},"    \u002F\u002Ftest02();\n",[36,20977,20978,20980],{"class":38,"line":10644},[36,20979,20435],{"class":2713},[36,20981,6383],{"class":49},[36,20983,20984],{"class":38,"line":10653},[36,20985,194],{"emptyLinePlaceholder":193},[36,20987,20988,20990,20992,20994],{"class":38,"line":10659},[36,20989,3053],{"class":2713},[36,20991,901],{"class":49},[36,20993,3058],{"class":998},[36,20995,3468],{"class":49},[36,20997,20998],{"class":38,"line":10667},[36,20999,194],{"emptyLinePlaceholder":193},[36,21001,21002,21004,21006],{"class":38,"line":10672},[36,21003,4839],{"class":53},[36,21005,4842],{"class":60},[36,21007,2040],{"class":49},[36,21009,21010],{"class":38,"line":17348},[36,21011,2315],{"class":49},[868,21013,21015],{"id":21014},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,21017,21018],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,21020,21021],{},"1．默认构造函数(无参，函数体为空)",[14,21023,21024],{},"2．默认析构函数(无参，函数体为空)",[14,21026,21027],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,21029,21030],{},"构造函数调用规则如下：",[1886,21032,21033,21036],{},[854,21034,21035],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[854,21037,21038],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[26,21040,21042],{"className":889,"code":21041,"language":891,"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,21043,21044,21052,21056,21061,21067,21079,21083,21088,21100,21109,21121,21125,21129,21145,21154,21166,21170,21174,21180,21192,21196,21200,21206,21210,21214,21222,21226,21238,21243,21251,21255,21273,21277,21281,21289,21293,21298,21306,21321,21334,21338,21343,21350,21366,21379,21383,21387,21395,21399,21405,21409,21419,21423,21431],{"__ignoreMap":31},[36,21045,21046,21048,21050],{"class":38,"line":39},[36,21047,15438],{"class":53},[36,21049,16313],{"class":2713},[36,21051,16316],{"class":49},[36,21053,21054],{"class":38,"line":46},[36,21055,15460],{"class":53},[36,21057,21058],{"class":38,"line":78},[36,21059,21060],{"class":42},"    \u002F\u002F无参（默认）构造函数\n",[36,21062,21063,21065],{"class":38,"line":125},[36,21064,19263],{"class":2713},[36,21066,11600],{"class":49},[36,21068,21069,21071,21073,21075,21077],{"class":38,"line":131},[36,21070,10416],{"class":49},[36,21072,1923],{"class":53},[36,21074,20554],{"class":998},[36,21076,2194],{"class":53},[36,21078,9587],{"class":49},[36,21080,21081],{"class":38,"line":396},[36,21082,2937],{"class":49},[36,21084,21085],{"class":38,"line":407},[36,21086,21087],{"class":42},"    \u002F\u002F有参构造函数\n",[36,21089,21090,21092,21094,21096,21098],{"class":38,"line":2061},[36,21091,19263],{"class":2713},[36,21093,901],{"class":49},[36,21095,904],{"class":53},[36,21097,2148],{"class":416},[36,21099,13186],{"class":49},[36,21101,21102,21105,21107],{"class":38,"line":2067},[36,21103,21104],{"class":49},"        age ",[36,21106,54],{"class":53},[36,21108,2182],{"class":49},[36,21110,21111,21113,21115,21117,21119],{"class":38,"line":2079},[36,21112,10416],{"class":49},[36,21114,1923],{"class":53},[36,21116,20594],{"class":998},[36,21118,2194],{"class":53},[36,21120,9587],{"class":49},[36,21122,21123],{"class":38,"line":2362},[36,21124,2937],{"class":49},[36,21126,21127],{"class":38,"line":2367},[36,21128,19618],{"class":42},[36,21130,21131,21133,21135,21137,21139,21141,21143],{"class":38,"line":2373},[36,21132,19263],{"class":2713},[36,21134,901],{"class":49},[36,21136,7539],{"class":53},[36,21138,16313],{"class":2713},[36,21140,1239],{"class":53},[36,21142,7572],{"class":416},[36,21144,13186],{"class":49},[36,21146,21147,21149,21151],{"class":38,"line":2378},[36,21148,21104],{"class":49},[36,21150,54],{"class":53},[36,21152,21153],{"class":49}," p.age;\n",[36,21155,21156,21158,21160,21162,21164],{"class":38,"line":2392},[36,21157,10416],{"class":49},[36,21159,1923],{"class":53},[36,21161,20635],{"class":998},[36,21163,2194],{"class":53},[36,21165,9587],{"class":49},[36,21167,21168],{"class":38,"line":2397},[36,21169,2937],{"class":49},[36,21171,21172],{"class":38,"line":2403},[36,21173,19291],{"class":42},[36,21175,21176,21178],{"class":38,"line":2424},[36,21177,19296],{"class":2713},[36,21179,11600],{"class":49},[36,21181,21182,21184,21186,21188,21190],{"class":38,"line":2429},[36,21183,10416],{"class":49},[36,21185,1923],{"class":53},[36,21187,20672],{"class":998},[36,21189,2194],{"class":53},[36,21191,9587],{"class":49},[36,21193,21194],{"class":38,"line":2443},[36,21195,2937],{"class":49},[36,21197,21198],{"class":38,"line":2448},[36,21199,15460],{"class":53},[36,21201,21202,21204],{"class":38,"line":2477},[36,21203,2735],{"class":53},[36,21205,8544],{"class":49},[36,21207,21208],{"class":38,"line":2482},[36,21209,4744],{"class":49},[36,21211,21212],{"class":38,"line":2499},[36,21213,194],{"emptyLinePlaceholder":193},[36,21215,21216,21218,21220],{"class":38,"line":2504},[36,21217,6111],{"class":53},[36,21219,6335],{"class":2713},[36,21221,2726],{"class":49},[36,21223,21224],{"class":38,"line":2509},[36,21225,2296],{"class":49},[36,21227,21228,21230,21232,21234,21236],{"class":38,"line":2514},[36,21229,20175],{"class":49},[36,21231,7877],{"class":2713},[36,21233,901],{"class":49},[36,21235,1532],{"class":60},[36,21237,3468],{"class":49},[36,21239,21240],{"class":38,"line":2528},[36,21241,21242],{"class":42},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[36,21244,21245,21247,21249],{"class":38,"line":2533},[36,21246,20175],{"class":49},[36,21248,7780],{"class":2713},[36,21250,18259],{"class":49},[36,21252,21253],{"class":38,"line":3326},[36,21254,194],{"emptyLinePlaceholder":193},[36,21256,21257,21259,21261,21264,21266,21269,21271],{"class":38,"line":3340},[36,21258,7276],{"class":49},[36,21260,1923],{"class":53},[36,21262,21263],{"class":998}," \"p2的年龄为： \"",[36,21265,2194],{"class":53},[36,21267,21268],{"class":49}," p2.age ",[36,21270,1923],{"class":53},[36,21272,9587],{"class":49},[36,21274,21275],{"class":38,"line":3348},[36,21276,2315],{"class":49},[36,21278,21279],{"class":38,"line":3353},[36,21280,194],{"emptyLinePlaceholder":193},[36,21282,21283,21285,21287],{"class":38,"line":3359},[36,21284,6111],{"class":53},[36,21286,6404],{"class":2713},[36,21288,2726],{"class":49},[36,21290,21291],{"class":38,"line":3365},[36,21292,2296],{"class":49},[36,21294,21295],{"class":38,"line":3370},[36,21296,21297],{"class":42},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[36,21299,21300,21303],{"class":38,"line":8695},[36,21301,21302],{"class":49},"    Person p1;",[36,21304,21305],{"class":42}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[36,21307,21308,21310,21312,21314,21316,21318],{"class":38,"line":8719},[36,21309,20175],{"class":49},[36,21311,7780],{"class":2713},[36,21313,901],{"class":49},[36,21315,332],{"class":60},[36,21317,6713],{"class":49},[36,21319,21320],{"class":42}," \u002F\u002F用户提供的有参\n",[36,21322,21323,21325,21328,21331],{"class":38,"line":8724},[36,21324,20175],{"class":49},[36,21326,21327],{"class":2713},"p3",[36,21329,21330],{"class":49},"(p2);",[36,21332,21333],{"class":42}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[36,21335,21336],{"class":38,"line":8730},[36,21337,194],{"emptyLinePlaceholder":193},[36,21339,21340],{"class":38,"line":8757},[36,21341,21342],{"class":42},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[36,21344,21345,21348],{"class":38,"line":8762},[36,21346,21347],{"class":49},"    Person p4;",[36,21349,21305],{"class":42},[36,21351,21352,21354,21357,21359,21361,21363],{"class":38,"line":8768},[36,21353,20175],{"class":49},[36,21355,21356],{"class":2713},"p5",[36,21358,901],{"class":49},[36,21360,332],{"class":60},[36,21362,6713],{"class":49},[36,21364,21365],{"class":42}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[36,21367,21368,21370,21373,21376],{"class":38,"line":8780},[36,21369,20175],{"class":49},[36,21371,21372],{"class":2713},"p6",[36,21374,21375],{"class":49},"(p5);",[36,21377,21378],{"class":42}," \u002F\u002F用户自己提供拷贝构造\n",[36,21380,21381],{"class":38,"line":8792},[36,21382,2315],{"class":49},[36,21384,21385],{"class":38,"line":8804},[36,21386,194],{"emptyLinePlaceholder":193},[36,21388,21389,21391,21393],{"class":38,"line":10463},[36,21390,904],{"class":53},[36,21392,2723],{"class":2713},[36,21394,11600],{"class":49},[36,21396,21397],{"class":38,"line":10488},[36,21398,194],{"emptyLinePlaceholder":193},[36,21400,21401,21403],{"class":38,"line":10511},[36,21402,6380],{"class":2713},[36,21404,6383],{"class":49},[36,21406,21407],{"class":38,"line":10535},[36,21408,194],{"emptyLinePlaceholder":193},[36,21410,21411,21413,21415,21417],{"class":38,"line":10540},[36,21412,3053],{"class":2713},[36,21414,901],{"class":49},[36,21416,3058],{"class":998},[36,21418,3468],{"class":49},[36,21420,21421],{"class":38,"line":10545},[36,21422,194],{"emptyLinePlaceholder":193},[36,21424,21425,21427,21429],{"class":38,"line":10550},[36,21426,4839],{"class":53},[36,21428,4842],{"class":60},[36,21430,2040],{"class":49},[36,21432,21433],{"class":38,"line":10559},[36,21434,2315],{"class":49},[868,21436,21438],{"id":21437},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,21440,21441],{},"浅拷贝：简单的赋值拷贝操作",[14,21443,21444],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[26,21446,21448],{"className":889,"code":21447,"language":891,"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,21449,21450,21456,21466,21472,21476,21480,21485,21491,21495,21508,21512,21516,21523,21527,21537,21552,21565,21569,21574,21579,21595,21599,21612,21617,21622,21627,21636,21641,21656,21660,21664,21668,21674,21678,21683,21698,21702,21713,21727,21731,21740,21744,21750,21762,21766,21774,21778,21795,21826,21834,21862,21866,21870,21878,21882,21888],{"__ignoreMap":31},[36,21451,21452,21454],{"class":38,"line":39},[36,21453,2699],{"class":53},[36,21455,2702],{"class":998},[36,21457,21458,21460,21462,21464],{"class":38,"line":46},[36,21459,2707],{"class":53},[36,21461,2710],{"class":53},[36,21463,2714],{"class":2713},[36,21465,2040],{"class":49},[36,21467,21468,21470],{"class":38,"line":78},[36,21469,15438],{"class":53},[36,21471,15915],{"class":2713},[36,21473,21474],{"class":38,"line":125},[36,21475,2296],{"class":49},[36,21477,21478],{"class":38,"line":131},[36,21479,15460],{"class":53},[36,21481,21482],{"class":38,"line":396},[36,21483,21484],{"class":42},"    \u002F\u002F默认构造函数\n",[36,21486,21487,21489],{"class":38,"line":407},[36,21488,19263],{"class":2713},[36,21490,2726],{"class":49},[36,21492,21493],{"class":38,"line":2061},[36,21494,2780],{"class":49},[36,21496,21497,21499,21501,21504,21506],{"class":38,"line":2067},[36,21498,4200],{"class":49},[36,21500,1923],{"class":53},[36,21502,21503],{"class":998},"\"默认构造函数\"",[36,21505,1923],{"class":53},[36,21507,1945],{"class":49},[36,21509,21510],{"class":38,"line":2079},[36,21511,2937],{"class":49},[36,21513,21514],{"class":38,"line":2362},[36,21515,21087],{"class":42},[36,21517,21518,21520],{"class":38,"line":2367},[36,21519,19296],{"class":2713},[36,21521,21522],{"class":49},"(int age,int height)\n",[36,21524,21525],{"class":38,"line":2373},[36,21526,2780],{"class":49},[36,21528,21529,21532,21534],{"class":38,"line":2378},[36,21530,21531],{"class":49},"        m_Age",[36,21533,54],{"class":53},[36,21535,21536],{"class":49},"age;\n",[36,21538,21539,21542,21544,21546,21549],{"class":38,"line":2392},[36,21540,21541],{"class":49},"        m_Height",[36,21543,12462],{"class":53},[36,21545,3132],{"class":53},[36,21547,21548],{"class":49},"(height);",[36,21550,21551],{"class":42},"\u002F\u002F放到堆区\n",[36,21553,21554,21556,21558,21561,21563],{"class":38,"line":2397},[36,21555,4200],{"class":49},[36,21557,1923],{"class":53},[36,21559,21560],{"class":998},"\"有参构造函数\"",[36,21562,1923],{"class":53},[36,21564,1945],{"class":49},[36,21566,21567],{"class":38,"line":2403},[36,21568,2937],{"class":49},[36,21570,21571],{"class":38,"line":2424},[36,21572,21573],{"class":42},"    \u002F\u002F深拷贝解决上述问题\n",[36,21575,21576],{"class":38,"line":2429},[36,21577,21578],{"class":42},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[36,21580,21581,21583,21585,21587,21589,21591,21593],{"class":38,"line":2443},[36,21582,19263],{"class":2713},[36,21584,901],{"class":49},[36,21586,7539],{"class":53},[36,21588,16313],{"class":2713},[36,21590,11331],{"class":53},[36,21592,14],{"class":416},[36,21594,75],{"class":49},[36,21596,21597],{"class":38,"line":2448},[36,21598,2780],{"class":49},[36,21600,21601,21603,21605,21608,21610],{"class":38,"line":2477},[36,21602,4200],{"class":49},[36,21604,1923],{"class":53},[36,21606,21607],{"class":998},"\"拷贝构造函数\"",[36,21609,1923],{"class":53},[36,21611,1945],{"class":49},[36,21613,21614],{"class":38,"line":2482},[36,21615,21616],{"class":42},"        \u002F\u002F编译器默认的写如下注释部分\n",[36,21618,21619],{"class":38,"line":2499},[36,21620,21621],{"class":42},"        \u002F\u002Fm_Age=p.m_Age;\n",[36,21623,21624],{"class":38,"line":2504},[36,21625,21626],{"class":42},"        \u002F\u002Fm_Height=p.m_Height;\n",[36,21628,21629,21631,21633],{"class":38,"line":2509},[36,21630,21531],{"class":49},[36,21632,54],{"class":53},[36,21634,21635],{"class":49},"p.m_Age;\n",[36,21637,21638],{"class":38,"line":2514},[36,21639,21640],{"class":42},"        \u002F\u002F深拷贝操作\n",[36,21642,21643,21645,21647,21649,21651,21653],{"class":38,"line":2528},[36,21644,21541],{"class":49},[36,21646,12462],{"class":53},[36,21648,3132],{"class":53},[36,21650,901],{"class":49},[36,21652,1339],{"class":53},[36,21654,21655],{"class":49},"p.m_Height);\n",[36,21657,21658],{"class":38,"line":2533},[36,21659,2937],{"class":49},[36,21661,21662],{"class":38,"line":3326},[36,21663,194],{"emptyLinePlaceholder":193},[36,21665,21666],{"class":38,"line":3340},[36,21667,19291],{"class":42},[36,21669,21670,21672],{"class":38,"line":3348},[36,21671,19296],{"class":2713},[36,21673,2726],{"class":49},[36,21675,21676],{"class":38,"line":3353},[36,21677,2780],{"class":49},[36,21679,21680],{"class":38,"line":3359},[36,21681,21682],{"class":42},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[36,21684,21685,21687,21690,21693,21696],{"class":38,"line":3365},[36,21686,3246],{"class":53},[36,21688,21689],{"class":49},"(m_Height ",[36,21691,21692],{"class":53},"!=",[36,21694,21695],{"class":60}," NULL",[36,21697,75],{"class":49},[36,21699,21700],{"class":38,"line":3370},[36,21701,3259],{"class":49},[36,21703,21704,21707,21710],{"class":38,"line":8695},[36,21705,21706],{"class":53},"            delete",[36,21708,21709],{"class":49}," m_Height;",[36,21711,21712],{"class":42}," \u002F\u002F释放堆区内存\n",[36,21714,21715,21718,21720,21722,21724],{"class":38,"line":8719},[36,21716,21717],{"class":49},"            m_Height",[36,21719,54],{"class":53},[36,21721,3142],{"class":60},[36,21723,952],{"class":49},[36,21725,21726],{"class":42}," \u002F\u002F防止野指针\n",[36,21728,21729],{"class":38,"line":8724},[36,21730,3278],{"class":49},[36,21732,21733,21735,21737],{"class":38,"line":8730},[36,21734,4200],{"class":49},[36,21736,1923],{"class":53},[36,21738,21739],{"class":998},"\"Person的析构函数调用\"\n",[36,21741,21742],{"class":38,"line":8757},[36,21743,2937],{"class":49},[36,21745,21746,21748],{"class":38,"line":8762},[36,21747,2735],{"class":53},[36,21749,16410],{"class":49},[36,21751,21752,21754,21756,21759],{"class":38,"line":8768},[36,21753,2735],{"class":53},[36,21755,7265],{"class":53},[36,21757,21758],{"class":49},"m_Height;",[36,21760,21761],{"class":42}," \u002F\u002F定义一个指针，指向身高\n",[36,21763,21764],{"class":38,"line":8780},[36,21765,4744],{"class":49},[36,21767,21768,21770,21772],{"class":38,"line":8792},[36,21769,6111],{"class":53},[36,21771,6335],{"class":2713},[36,21773,2726],{"class":49},[36,21775,21776],{"class":38,"line":8804},[36,21777,2296],{"class":49},[36,21779,21780,21782,21784,21786,21788,21790,21793],{"class":38,"line":10463},[36,21781,20175],{"class":49},[36,21783,7877],{"class":2713},[36,21785,901],{"class":49},[36,21787,1532],{"class":60},[36,21789,64],{"class":49},[36,21791,21792],{"class":60},"160",[36,21794,3468],{"class":49},[36,21796,21797,21799,21801,21804,21806,21809,21811,21814,21816,21819,21821,21823],{"class":38,"line":10488},[36,21798,2301],{"class":49},[36,21800,1923],{"class":53},[36,21802,21803],{"class":998},"\"p1的年龄为:\"",[36,21805,1923],{"class":53},[36,21807,21808],{"class":49},"p1.m_Age",[36,21810,1923],{"class":53},[36,21812,21813],{"class":998},"\"身高为：\"",[36,21815,7166],{"class":53},[36,21817,21818],{"class":49},"p1.m_Height",[36,21820,1923],{"class":53},[36,21822,1988],{"class":49},[36,21824,21825],{"class":42},"  \u002F\u002F18\n",[36,21827,21828,21830,21832],{"class":38,"line":10511},[36,21829,20175],{"class":49},[36,21831,7780],{"class":2713},[36,21833,18259],{"class":49},[36,21835,21836,21838,21840,21843,21845,21847,21849,21851,21853,21856,21858,21860],{"class":38,"line":10535},[36,21837,2301],{"class":49},[36,21839,1923],{"class":53},[36,21841,21842],{"class":998},"\"p2的年龄为：\"",[36,21844,1923],{"class":53},[36,21846,20205],{"class":49},[36,21848,1923],{"class":53},[36,21850,21813],{"class":998},[36,21852,7166],{"class":53},[36,21854,21855],{"class":49},"p2.m_Height",[36,21857,1923],{"class":53},[36,21859,1988],{"class":49},[36,21861,21825],{"class":42},[36,21863,21864],{"class":38,"line":10540},[36,21865,13954],{"class":49},[36,21867,21868],{"class":38,"line":10545},[36,21869,2315],{"class":49},[36,21871,21872,21874,21876],{"class":38,"line":10550},[36,21873,904],{"class":53},[36,21875,2723],{"class":2713},[36,21877,2726],{"class":49},[36,21879,21880],{"class":38,"line":10559},[36,21881,2296],{"class":49},[36,21883,21884,21886],{"class":38,"line":10564},[36,21885,6380],{"class":2713},[36,21887,6383],{"class":49},[36,21889,21890],{"class":38,"line":10570},[36,21891,2315],{"class":49},[14,21893,21894],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21896,21897],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21899,21900],{},[2212,21901],{"alt":31,"src":21902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21904,21905],{},"浅拷贝问题要使用深拷贝来解决",[14,21907,21908],{},[2212,21909],{"alt":31,"src":21910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21912,21913],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[868,21915,21917],{"id":21916},"_826初始化列表","8.2.6初始化列表",[14,21919,21920],{},"作用：初始化属性",[14,21922,5929],{},[26,21924,21927],{"className":21925,"code":21926,"language":5935},[5933],"构造函数():属性1(值1),属性2(值2).....{}\n",[33,21928,21926],{"__ignoreMap":31},[14,21930,21931],{},"例子",[26,21933,21935],{"className":889,"code":21934,"language":891,"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,21936,21937,21943,21953,21959,21963,21968,21972,21977,21982,21987,21992,21997,22002,22006,22011,22016,22059,22068,22086,22104,22122,22126,22130,22137,22144,22151,22155,22159,22167,22171,22175,22195,22204,22208,22212,22222,22226,22234],{"__ignoreMap":31},[36,21938,21939,21941],{"class":38,"line":39},[36,21940,2699],{"class":53},[36,21942,2702],{"class":998},[36,21944,21945,21947,21949,21951],{"class":38,"line":46},[36,21946,2707],{"class":53},[36,21948,2710],{"class":53},[36,21950,2714],{"class":2713},[36,21952,2040],{"class":49},[36,21954,21955,21957],{"class":38,"line":78},[36,21956,15438],{"class":53},[36,21958,15915],{"class":2713},[36,21960,21961],{"class":38,"line":125},[36,21962,2296],{"class":49},[36,21964,21965],{"class":38,"line":131},[36,21966,21967],{"class":53},"    public:\n",[36,21969,21970],{"class":38,"line":396},[36,21971,194],{"emptyLinePlaceholder":193},[36,21973,21974],{"class":38,"line":407},[36,21975,21976],{"class":42},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[36,21978,21979],{"class":38,"line":2061},[36,21980,21981],{"class":42},"    \u002F\u002FPerson(int a, int b, int c) {\n",[36,21983,21984],{"class":38,"line":2067},[36,21985,21986],{"class":42},"    \u002F\u002F  m_A = a;\n",[36,21988,21989],{"class":38,"line":2079},[36,21990,21991],{"class":42},"    \u002F\u002F  m_B = b;\n",[36,21993,21994],{"class":38,"line":2362},[36,21995,21996],{"class":42},"    \u002F\u002F  m_C = c;\n",[36,21998,21999],{"class":38,"line":2367},[36,22000,22001],{"class":42},"    \u002F\u002F}\n",[36,22003,22004],{"class":38,"line":2373},[36,22005,194],{"emptyLinePlaceholder":193},[36,22007,22008],{"class":38,"line":2378},[36,22009,22010],{"class":42},"    \u002F\u002F初始化列表方式初始化\n",[36,22012,22013],{"class":38,"line":2392},[36,22014,22015],{"class":42},"    \u002F\u002F使用有参构造函数\n",[36,22017,22018,22020,22022,22024,22026,22028,22030,22032,22034,22036,22038,22041,22044,22047,22050,22053,22056],{"class":38,"line":2397},[36,22019,19263],{"class":2713},[36,22021,901],{"class":49},[36,22023,904],{"class":53},[36,22025,2148],{"class":416},[36,22027,154],{"class":49},[36,22029,904],{"class":53},[36,22031,3582],{"class":416},[36,22033,154],{"class":49},[36,22035,904],{"class":53},[36,22037,3598],{"class":416},[36,22039,22040],{"class":49},") :",[36,22042,22043],{"class":2713},"m_A",[36,22045,22046],{"class":49},"(a), ",[36,22048,22049],{"class":2713},"m_B",[36,22051,22052],{"class":49},"(b), ",[36,22054,22055],{"class":2713},"m_C",[36,22057,22058],{"class":49},"(c) {}\n",[36,22060,22061,22063,22066],{"class":38,"line":2403},[36,22062,15653],{"class":53},[36,22064,22065],{"class":2713}," PrintPerson",[36,22067,11600],{"class":49},[36,22069,22070,22072,22074,22077,22079,22082,22084],{"class":38,"line":2424},[36,22071,10416],{"class":49},[36,22073,1923],{"class":53},[36,22075,22076],{"class":998}," \"mA:\"",[36,22078,2194],{"class":53},[36,22080,22081],{"class":49}," m_A ",[36,22083,1923],{"class":53},[36,22085,9587],{"class":49},[36,22087,22088,22090,22092,22095,22097,22100,22102],{"class":38,"line":2429},[36,22089,10416],{"class":49},[36,22091,1923],{"class":53},[36,22093,22094],{"class":998}," \"mB:\"",[36,22096,2194],{"class":53},[36,22098,22099],{"class":49}," m_B ",[36,22101,1923],{"class":53},[36,22103,9587],{"class":49},[36,22105,22106,22108,22110,22113,22115,22118,22120],{"class":38,"line":2443},[36,22107,10416],{"class":49},[36,22109,1923],{"class":53},[36,22111,22112],{"class":998}," \"mC:\"",[36,22114,2194],{"class":53},[36,22116,22117],{"class":49}," m_C ",[36,22119,1923],{"class":53},[36,22121,9587],{"class":49},[36,22123,22124],{"class":38,"line":2448},[36,22125,2937],{"class":49},[36,22127,22128],{"class":38,"line":2477},[36,22129,15966],{"class":53},[36,22131,22132,22134],{"class":38,"line":2482},[36,22133,2735],{"class":53},[36,22135,22136],{"class":49}," m_A;\n",[36,22138,22139,22141],{"class":38,"line":2499},[36,22140,2735],{"class":53},[36,22142,22143],{"class":49}," m_B;\n",[36,22145,22146,22148],{"class":38,"line":2504},[36,22147,2735],{"class":53},[36,22149,22150],{"class":49}," m_C;\n",[36,22152,22153],{"class":38,"line":2509},[36,22154,4744],{"class":49},[36,22156,22157],{"class":38,"line":2514},[36,22158,194],{"emptyLinePlaceholder":193},[36,22160,22161,22163,22165],{"class":38,"line":2528},[36,22162,904],{"class":53},[36,22164,2723],{"class":2713},[36,22166,6725],{"class":49},[36,22168,22169],{"class":38,"line":2533},[36,22170,2296],{"class":49},[36,22172,22173],{"class":38,"line":3326},[36,22174,194],{"emptyLinePlaceholder":193},[36,22176,22177,22179,22181,22183,22185,22187,22189,22191,22193],{"class":38,"line":3340},[36,22178,20175],{"class":49},[36,22180,14],{"class":2713},[36,22182,901],{"class":49},[36,22184,61],{"class":60},[36,22186,154],{"class":49},[36,22188,181],{"class":60},[36,22190,154],{"class":49},[36,22192,162],{"class":60},[36,22194,3468],{"class":49},[36,22196,22197,22199,22202],{"class":38,"line":3348},[36,22198,16610],{"class":49},[36,22200,22201],{"class":2713},"PrintPerson",[36,22203,6383],{"class":49},[36,22205,22206],{"class":38,"line":3353},[36,22207,194],{"emptyLinePlaceholder":193},[36,22209,22210],{"class":38,"line":3359},[36,22211,194],{"emptyLinePlaceholder":193},[36,22213,22214,22216,22218,22220],{"class":38,"line":3365},[36,22215,3053],{"class":2713},[36,22217,901],{"class":49},[36,22219,3058],{"class":998},[36,22221,3468],{"class":49},[36,22223,22224],{"class":38,"line":3370},[36,22225,194],{"emptyLinePlaceholder":193},[36,22227,22228,22230,22232],{"class":38,"line":8695},[36,22229,4839],{"class":53},[36,22231,4842],{"class":60},[36,22233,2040],{"class":49},[36,22235,22236],{"class":38,"line":8719},[36,22237,2315],{"class":49},[14,22239,22240,22241,22244,22245],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[1043,22242,22243],{},"参数名就是定义的对象属性","，",[1043,22246,22247],{},"属性后面的值为有参构造函数的形参",[26,22249,22251],{"className":889,"code":22250,"language":891,"meta":31,"style":31},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[33,22252,22253],{"__ignoreMap":31},[36,22254,22255,22257,22259,22261,22264,22266,22269,22271,22274,22276,22279,22281,22284,22286],{"class":38,"line":39},[36,22256,19790],{"class":2713},[36,22258,901],{"class":49},[36,22260,904],{"class":53},[36,22262,22263],{"class":49}," a.",[36,22265,904],{"class":53},[36,22267,22268],{"class":49}," b,",[36,22270,904],{"class":53},[36,22272,22273],{"class":49}," b):",[36,22275,22043],{"class":2713},[36,22277,22278],{"class":49},"(a),",[36,22280,22049],{"class":2713},[36,22282,22283],{"class":49},"(c),",[36,22285,22055],{"class":2713},[36,22287,22288],{"class":49},"(b) {}\n",[868,22290,22292],{"id":22291},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,22294,22295],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,22297,15377],{},[26,22299,22301],{"className":889,"code":22300,"language":891,"meta":31,"style":31},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[33,22302,22303,22308,22313,22317,22322,22326],{"__ignoreMap":31},[36,22304,22305],{"class":38,"line":39},[36,22306,22307],{"class":49},"A{};\n",[36,22309,22310],{"class":38,"line":46},[36,22311,22312],{"class":49},"B\n",[36,22314,22315],{"class":38,"line":78},[36,22316,2296],{"class":49},[36,22318,22319],{"class":38,"line":125},[36,22320,22321],{"class":49},"    A a;\n",[36,22323,22324],{"class":38,"line":131},[36,22325,2315],{"class":49},[36,22327,22328],{"class":38,"line":396},[36,22329,22330],{"class":42},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,22332,22333],{},"案例",[26,22335,22337],{"className":889,"code":22336,"language":891,"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,22338,22339,22344,22351,22355,22360,22365,22379,22383,22393,22404,22408,22415,22419,22432,22436,22441,22446,22450,22456,22460,22464,22468,22499,22503,22514,22518,22524,22528,22541,22545,22549,22553,22558,22563,22567,22575,22579,22596,22615,22619,22627,22631,22637],{"__ignoreMap":31},[36,22340,22341],{"class":38,"line":39},[36,22342,22343],{"class":42},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[36,22345,22346,22348],{"class":38,"line":46},[36,22347,15438],{"class":53},[36,22349,22350],{"class":2713}," Phone\n",[36,22352,22353],{"class":38,"line":78},[36,22354,2296],{"class":49},[36,22356,22357],{"class":38,"line":125},[36,22358,22359],{"class":49},"public：\n",[36,22361,22362],{"class":38,"line":131},[36,22363,22364],{"class":42},"    \u002F\u002F 赋值(构造函数)\n",[36,22366,22367,22370,22372,22374,22377],{"class":38,"line":396},[36,22368,22369],{"class":2713},"    Phone",[36,22371,901],{"class":49},[36,22373,15661],{"class":2713},[36,22375,22376],{"class":416}," pName",[36,22378,75],{"class":49},[36,22380,22381],{"class":38,"line":407},[36,22382,2780],{"class":49},[36,22384,22385,22388,22390],{"class":38,"line":2061},[36,22386,22387],{"class":49},"        m_pName",[36,22389,54],{"class":53},[36,22391,22392],{"class":49},"pName;\n",[36,22394,22395,22397,22399,22402],{"class":38,"line":2067},[36,22396,4200],{"class":49},[36,22398,1923],{"class":53},[36,22400,22401],{"class":998},"\"Phone的构造函数调用\"",[36,22403,2040],{"class":49},[36,22405,22406],{"class":38,"line":2079},[36,22407,2937],{"class":49},[36,22409,22410,22413],{"class":38,"line":2362},[36,22411,22412],{"class":2713},"    ~Phone",[36,22414,2726],{"class":49},[36,22416,22417],{"class":38,"line":2367},[36,22418,2780],{"class":49},[36,22420,22421,22423,22425,22428,22430],{"class":38,"line":2373},[36,22422,4200],{"class":49},[36,22424,1923],{"class":53},[36,22426,22427],{"class":998},"\"Phone析构函数调用\"",[36,22429,1923],{"class":53},[36,22431,1945],{"class":49},[36,22433,22434],{"class":38,"line":2378},[36,22435,2937],{"class":49},[36,22437,22438],{"class":38,"line":2392},[36,22439,22440],{"class":42},"    \u002F\u002F\n",[36,22442,22443],{"class":38,"line":2397},[36,22444,22445],{"class":49},"    string m_PName;\n",[36,22447,22448],{"class":38,"line":2403},[36,22449,4744],{"class":49},[36,22451,22452,22454],{"class":38,"line":2424},[36,22453,15438],{"class":53},[36,22455,15915],{"class":2713},[36,22457,22458],{"class":38,"line":2429},[36,22459,2296],{"class":49},[36,22461,22462],{"class":38,"line":2443},[36,22463,15460],{"class":53},[36,22465,22466],{"class":38,"line":2448},[36,22467,17738],{"class":42},[36,22469,22470,22472,22474,22476,22478,22480,22482,22485,22488,22490,22493,22496],{"class":38,"line":2477},[36,22471,19263],{"class":2713},[36,22473,901],{"class":49},[36,22475,15661],{"class":2713},[36,22477,15664],{"class":416},[36,22479,64],{"class":49},[36,22481,15661],{"class":2713},[36,22483,22484],{"class":416}," pname",[36,22486,22487],{"class":49},"):",[36,22489,15754],{"class":2713},[36,22491,22492],{"class":49},"(name),m_phone.",[36,22494,22495],{"class":2713},"m_PName",[36,22497,22498],{"class":49},"(pname) \n",[36,22500,22501],{"class":38,"line":2482},[36,22502,2780],{"class":49},[36,22504,22505,22507,22509,22512],{"class":38,"line":2499},[36,22506,4200],{"class":49},[36,22508,1923],{"class":53},[36,22510,22511],{"class":998},"\"Person的构造函数调用\"",[36,22513,2040],{"class":49},[36,22515,22516],{"class":38,"line":2504},[36,22517,2937],{"class":49},[36,22519,22520,22522],{"class":38,"line":2509},[36,22521,19296],{"class":2713},[36,22523,2726],{"class":49},[36,22525,22526],{"class":38,"line":2514},[36,22527,2780],{"class":49},[36,22529,22530,22532,22534,22537,22539],{"class":38,"line":2528},[36,22531,4200],{"class":49},[36,22533,1923],{"class":53},[36,22535,22536],{"class":998},"\"Person析构函数调用\"",[36,22538,1923],{"class":53},[36,22540,1945],{"class":49},[36,22542,22543],{"class":38,"line":2533},[36,22544,2937],{"class":49},[36,22546,22547],{"class":38,"line":3326},[36,22548,8527],{"class":42},[36,22550,22551],{"class":38,"line":3340},[36,22552,15636],{"class":49},[36,22554,22555],{"class":38,"line":3348},[36,22556,22557],{"class":42},"    \u002F\u002F手机\n",[36,22559,22560],{"class":38,"line":3353},[36,22561,22562],{"class":49},"    Phone m_Phone;\n",[36,22564,22565],{"class":38,"line":3359},[36,22566,4744],{"class":49},[36,22568,22569,22571,22573],{"class":38,"line":3365},[36,22570,6111],{"class":53},[36,22572,6335],{"class":2713},[36,22574,2726],{"class":49},[36,22576,22577],{"class":38,"line":3370},[36,22578,2296],{"class":49},[36,22580,22581,22583,22585,22587,22589,22591,22594],{"class":38,"line":8695},[36,22582,20175],{"class":49},[36,22584,14],{"class":2713},[36,22586,901],{"class":49},[36,22588,8663],{"class":998},[36,22590,64],{"class":49},[36,22592,22593],{"class":998},"\"安卓\"",[36,22595,3468],{"class":49},[36,22597,22598,22600,22602,22605,22607,22610,22612],{"class":38,"line":8719},[36,22599,2301],{"class":49},[36,22601,1923],{"class":53},[36,22603,22604],{"class":49},"p.Name",[36,22606,1923],{"class":53},[36,22608,22609],{"class":998},"\"拿着：\"",[36,22611,1923],{"class":53},[36,22613,22614],{"class":49},"p.m_phone.m_PName;\n",[36,22616,22617],{"class":38,"line":8724},[36,22618,2315],{"class":49},[36,22620,22621,22623,22625],{"class":38,"line":8730},[36,22622,904],{"class":53},[36,22624,2723],{"class":2713},[36,22626,2726],{"class":49},[36,22628,22629],{"class":38,"line":8757},[36,22630,2296],{"class":49},[36,22632,22633,22635],{"class":38,"line":8762},[36,22634,6380],{"class":2713},[36,22636,6383],{"class":49},[36,22638,22639],{"class":38,"line":8768},[36,22640,2315],{"class":49},[14,22642,9772],{},[26,22644,22646],{"className":889,"code":22645,"language":891,"meta":31,"style":31},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[33,22647,22648,22653],{"__ignoreMap":31},[36,22649,22650],{"class":38,"line":39},[36,22651,22652],{"class":42},"    \u002F\u002F不需要写这个：\n",[36,22654,22655],{"class":38,"line":46},[36,22656,22657],{"class":42},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,22659,22660],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[26,22662,22664],{"className":889,"code":22663,"language":891,"meta":31,"style":31},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[33,22665,22666],{"__ignoreMap":31},[36,22667,22668,22670,22673,22675,22678,22681],{"class":38,"line":39},[36,22669,19790],{"class":2713},[36,22671,22672],{"class":49},"(string name.string pname):",[36,22674,15754],{"class":2713},[36,22676,22677],{"class":49},"(name),",[36,22679,22680],{"class":2713},"m_phone",[36,22682,22683],{"class":49},"(pname) {}\n",[14,22685,22686,22687,54,22690],{},"采用的是隐式转换法，实际为如下：\n",[33,22688,22689],{},"m_phone(pname)",[33,22691,22692],{},"Phone m_phone=pname",[14,22694,22695,22698],{},[1043,22696,22697],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,22700,22701],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[868,22703,22705],{"id":22704},"_828静态对象","8.2.8静态对象",[14,22707,22708],{},"静态对象在成员对象前static，称为静态对象",[14,22710,22711],{},"静态对象分为两类：",[851,22713,22714],{},[854,22715,22716],{},"静态成员变量",[1886,22718,22719,22722,22725],{},[854,22720,22721],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[854,22723,22724],{},"②在编译阶段分配内存",[854,22726,22727],{},"③类内声明，类外初始化",[851,22729,22730],{"start":46},[854,22731,22732],{},"静态成员函数",[1886,22734,22735,22738],{},[854,22736,22737],{},"①所有对象共享同一个函数",[854,22739,22740],{},"②静态成员函数只能访问静态成员变量",[22742,22743,22745],"h4",{"id":22744},"_8281静态成员变量","8.2.8.1静态成员变量",[26,22747,22749],{"className":889,"code":22748,"language":891,"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,22750,22751,22757,22767,22773,22777,22781,22786,22791,22796,22804,22808,22812,22816,22824,22828,22832,22837,22850,22854,22862,22866,22872],{"__ignoreMap":31},[36,22752,22753,22755],{"class":38,"line":39},[36,22754,2699],{"class":53},[36,22756,2702],{"class":998},[36,22758,22759,22761,22763,22765],{"class":38,"line":46},[36,22760,2707],{"class":53},[36,22762,2710],{"class":53},[36,22764,2714],{"class":2713},[36,22766,2040],{"class":49},[36,22768,22769,22771],{"class":38,"line":78},[36,22770,15438],{"class":53},[36,22772,15915],{"class":2713},[36,22774,22775],{"class":38,"line":125},[36,22776,2296],{"class":49},[36,22778,22779],{"class":38,"line":131},[36,22780,15460],{"class":53},[36,22782,22783],{"class":38,"line":396},[36,22784,22785],{"class":42},"    \u002F\u002F非静态成员变量\n",[36,22787,22788],{"class":38,"line":407},[36,22789,22790],{"class":42},"    \u002F\u002F int m_A;\n",[36,22792,22793],{"class":38,"line":2061},[36,22794,22795],{"class":42},"    \u002F\u002F定义静态成员变量\n",[36,22797,22798,22800,22802],{"class":38,"line":2067},[36,22799,11765],{"class":53},[36,22801,3132],{"class":53},[36,22803,22136],{"class":49},[36,22805,22806],{"class":38,"line":2079},[36,22807,194],{"emptyLinePlaceholder":193},[36,22809,22810],{"class":38,"line":2362},[36,22811,194],{"emptyLinePlaceholder":193},[36,22813,22814],{"class":38,"line":2367},[36,22815,4744],{"class":49},[36,22817,22818,22820,22822],{"class":38,"line":2373},[36,22819,6111],{"class":53},[36,22821,6335],{"class":2713},[36,22823,2726],{"class":49},[36,22825,22826],{"class":38,"line":2378},[36,22827,2296],{"class":49},[36,22829,22830],{"class":38,"line":2392},[36,22831,16057],{"class":49},[36,22833,22834],{"class":38,"line":2397},[36,22835,22836],{"class":42},"    \u002F\u002F输出类成员变量这块内存\n",[36,22838,22839,22841,22843,22846,22848],{"class":38,"line":2403},[36,22840,2301],{"class":49},[36,22842,1923],{"class":53},[36,22844,22845],{"class":49},"p.m_A",[36,22847,1923],{"class":53},[36,22849,1945],{"class":49},[36,22851,22852],{"class":38,"line":2424},[36,22853,2315],{"class":49},[36,22855,22856,22858,22860],{"class":38,"line":2429},[36,22857,904],{"class":53},[36,22859,2723],{"class":2713},[36,22861,2726],{"class":49},[36,22863,22864],{"class":38,"line":2443},[36,22865,2296],{"class":49},[36,22867,22868,22870],{"class":38,"line":2448},[36,22869,6380],{"class":2713},[36,22871,2726],{"class":49},[36,22873,22874],{"class":38,"line":2477},[36,22875,2315],{"class":49},[14,22877,22878],{},"此时输出是报错的：无法解析外部命令",[14,22880,22881],{},"解决这一问题：必须用到类内声明，类外初始化操作",[26,22883,22885],{"className":889,"code":22884,"language":891,"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,22886,22887,22893,22903,22909,22913,22917,22922,22930,22934,22939,22954,22962,22966,22970,22975,22980,22992,22997,23008,23013,23018,23031,23035,23043,23047,23053],{"__ignoreMap":31},[36,22888,22889,22891],{"class":38,"line":39},[36,22890,2699],{"class":53},[36,22892,2702],{"class":998},[36,22894,22895,22897,22899,22901],{"class":38,"line":46},[36,22896,2707],{"class":53},[36,22898,2710],{"class":53},[36,22900,2714],{"class":2713},[36,22902,2040],{"class":49},[36,22904,22905,22907],{"class":38,"line":78},[36,22906,15438],{"class":53},[36,22908,15915],{"class":2713},[36,22910,22911],{"class":38,"line":125},[36,22912,2296],{"class":49},[36,22914,22915],{"class":38,"line":131},[36,22916,15460],{"class":53},[36,22918,22919],{"class":38,"line":396},[36,22920,22921],{"class":42},"    \u002F\u002F类内声明\n",[36,22923,22924,22926,22928],{"class":38,"line":407},[36,22925,11765],{"class":53},[36,22927,3132],{"class":53},[36,22929,22136],{"class":49},[36,22931,22932],{"class":38,"line":2061},[36,22933,4744],{"class":49},[36,22935,22936],{"class":38,"line":2067},[36,22937,22938],{"class":42},"\u002F\u002F类外初始化\n",[36,22940,22941,22943,22945,22948,22950,22952],{"class":38,"line":2079},[36,22942,904],{"class":53},[36,22944,16313],{"class":2713},[36,22946,22947],{"class":49},"::m_A",[36,22949,54],{"class":53},[36,22951,332],{"class":60},[36,22953,2040],{"class":49},[36,22955,22956,22958,22960],{"class":38,"line":2362},[36,22957,6111],{"class":53},[36,22959,6335],{"class":2713},[36,22961,2726],{"class":49},[36,22963,22964],{"class":38,"line":2367},[36,22965,2296],{"class":49},[36,22967,22968],{"class":38,"line":2373},[36,22969,16057],{"class":49},[36,22971,22972],{"class":38,"line":2378},[36,22973,22974],{"class":42},"    \u002F\u002F访问变量的原内存空间\n",[36,22976,22977],{"class":38,"line":2392},[36,22978,22979],{"class":42},"    \u002F\u002F100\n",[36,22981,22982,22984,22986,22988,22990],{"class":38,"line":2397},[36,22983,2301],{"class":49},[36,22985,1923],{"class":53},[36,22987,22845],{"class":49},[36,22989,1923],{"class":53},[36,22991,1945],{"class":49},[36,22993,22994],{"class":38,"line":2403},[36,22995,22996],{"class":49},"    Person p2;\n",[36,22998,22999,23002,23004,23006],{"class":38,"line":2424},[36,23000,23001],{"class":49},"    p2.m_A",[36,23003,54],{"class":53},[36,23005,2472],{"class":60},[36,23007,2040],{"class":49},[36,23009,23010],{"class":38,"line":2429},[36,23011,23012],{"class":42},"    \u002F\u002F继续访问这片空间\n",[36,23014,23015],{"class":38,"line":2443},[36,23016,23017],{"class":42},"    \u002F\u002F200\n",[36,23019,23020,23022,23024,23027,23029],{"class":38,"line":2448},[36,23021,2301],{"class":49},[36,23023,1923],{"class":53},[36,23025,23026],{"class":49},"p2.m_A",[36,23028,1923],{"class":53},[36,23030,1945],{"class":49},[36,23032,23033],{"class":38,"line":2477},[36,23034,2315],{"class":49},[36,23036,23037,23039,23041],{"class":38,"line":2482},[36,23038,904],{"class":53},[36,23040,2723],{"class":2713},[36,23042,2726],{"class":49},[36,23044,23045],{"class":38,"line":2499},[36,23046,2296],{"class":49},[36,23048,23049,23051],{"class":38,"line":2504},[36,23050,6380],{"class":2713},[36,23052,6383],{"class":49},[36,23054,23055],{"class":38,"line":2509},[36,23056,2315],{"class":49},[14,23058,23059],{},[1043,23060,23061],{},"静态变量的访问",[26,23063,23065],{"className":889,"code":23064,"language":891,"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,23066,23067,23073,23083,23089,23093,23097,23101,23109,23113,23118,23126,23130,23134,23148,23163,23171,23175,23180,23185,23190,23195,23207,23212,23217,23231,23248,23252,23260,23264,23270],{"__ignoreMap":31},[36,23068,23069,23071],{"class":38,"line":39},[36,23070,2699],{"class":53},[36,23072,2702],{"class":998},[36,23074,23075,23077,23079,23081],{"class":38,"line":46},[36,23076,2707],{"class":53},[36,23078,2710],{"class":53},[36,23080,2714],{"class":2713},[36,23082,2040],{"class":49},[36,23084,23085,23087],{"class":38,"line":78},[36,23086,15438],{"class":53},[36,23088,15915],{"class":2713},[36,23090,23091],{"class":38,"line":125},[36,23092,2296],{"class":49},[36,23094,23095],{"class":38,"line":131},[36,23096,15460],{"class":53},[36,23098,23099],{"class":38,"line":396},[36,23100,22921],{"class":42},[36,23102,23103,23105,23107],{"class":38,"line":407},[36,23104,11765],{"class":53},[36,23106,3132],{"class":53},[36,23108,22136],{"class":49},[36,23110,23111],{"class":38,"line":2061},[36,23112,15966],{"class":53},[36,23114,23115],{"class":38,"line":2067},[36,23116,23117],{"class":42},"    \u002F\u002F静态成员变量也是有访问权限的\n",[36,23119,23120,23122,23124],{"class":38,"line":2079},[36,23121,11765],{"class":53},[36,23123,3132],{"class":53},[36,23125,22143],{"class":49},[36,23127,23128],{"class":38,"line":2362},[36,23129,4744],{"class":49},[36,23131,23132],{"class":38,"line":2367},[36,23133,22938],{"class":42},[36,23135,23136,23138,23140,23142,23144,23146],{"class":38,"line":2373},[36,23137,904],{"class":53},[36,23139,16313],{"class":2713},[36,23141,22947],{"class":49},[36,23143,54],{"class":53},[36,23145,332],{"class":60},[36,23147,2040],{"class":49},[36,23149,23150,23152,23154,23157,23159,23161],{"class":38,"line":2378},[36,23151,904],{"class":53},[36,23153,16313],{"class":2713},[36,23155,23156],{"class":49},"::m_B",[36,23158,54],{"class":53},[36,23160,72],{"class":60},[36,23162,2040],{"class":49},[36,23164,23165,23167,23169],{"class":38,"line":2392},[36,23166,6111],{"class":53},[36,23168,6404],{"class":2713},[36,23170,2726],{"class":49},[36,23172,23173],{"class":38,"line":2397},[36,23174,2296],{"class":49},[36,23176,23177],{"class":38,"line":2403},[36,23178,23179],{"class":42},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[36,23181,23182],{"class":38,"line":2424},[36,23183,23184],{"class":42},"    \u002F\u002F静态成员变量有两种访问方式：\n",[36,23186,23187],{"class":38,"line":2429},[36,23188,23189],{"class":42},"    \u002F\u002F1.通过对象进行访问\n",[36,23191,23192],{"class":38,"line":2443},[36,23193,23194],{"class":49},"    Person p;  \n",[36,23196,23197,23199,23201,23203,23205],{"class":38,"line":2448},[36,23198,2301],{"class":49},[36,23200,1923],{"class":53},[36,23202,22845],{"class":49},[36,23204,1923],{"class":53},[36,23206,1945],{"class":49},[36,23208,23209],{"class":38,"line":2477},[36,23210,23211],{"class":42},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[36,23213,23214],{"class":38,"line":2482},[36,23215,23216],{"class":42},"    \u002F\u002F2.通过类名进行访问\n",[36,23218,23219,23221,23223,23225,23227,23229],{"class":38,"line":2499},[36,23220,2301],{"class":49},[36,23222,1923],{"class":53},[36,23224,19790],{"class":2713},[36,23226,22947],{"class":49},[36,23228,1923],{"class":53},[36,23230,1945],{"class":49},[36,23232,23233,23235,23237,23239,23241,23243,23245],{"class":38,"line":2504},[36,23234,2301],{"class":49},[36,23236,1923],{"class":53},[36,23238,19790],{"class":2713},[36,23240,23156],{"class":49},[36,23242,1923],{"class":53},[36,23244,1988],{"class":49},[36,23246,23247],{"class":42}," \u002F\u002F没有访问权限，报错\n",[36,23249,23250],{"class":38,"line":2509},[36,23251,2315],{"class":49},[36,23253,23254,23256,23258],{"class":38,"line":2514},[36,23255,904],{"class":53},[36,23257,2723],{"class":2713},[36,23259,2726],{"class":49},[36,23261,23262],{"class":38,"line":2528},[36,23263,2296],{"class":49},[36,23265,23266,23268],{"class":38,"line":2533},[36,23267,6449],{"class":2713},[36,23269,6383],{"class":49},[36,23271,23272],{"class":38,"line":3326},[36,23273,2315],{"class":49},[22742,23275,23277],{"id":23276},"_8282静态成员函数","8.2.8.2静态成员函数",[14,23279,23280],{},"1.静态成员函数定义与访问",[26,23282,23284],{"className":889,"code":23283,"language":891,"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,23285,23286,23292,23296,23300,23305,23316,23320,23334,23338,23342,23350,23354,23359,23364,23368,23376,23381,23391],{"__ignoreMap":31},[36,23287,23288,23290],{"class":38,"line":39},[36,23289,15438],{"class":53},[36,23291,15915],{"class":2713},[36,23293,23294],{"class":38,"line":46},[36,23295,2296],{"class":49},[36,23297,23298],{"class":38,"line":78},[36,23299,15460],{"class":53},[36,23301,23302],{"class":38,"line":125},[36,23303,23304],{"class":42},"    \u002F\u002F在公共权限下定义静态成员函数\n",[36,23306,23307,23309,23312,23314],{"class":38,"line":131},[36,23308,11765],{"class":53},[36,23310,23311],{"class":53}," void",[36,23313,12130],{"class":2713},[36,23315,2726],{"class":49},[36,23317,23318],{"class":38,"line":396},[36,23319,2780],{"class":49},[36,23321,23322,23325,23327,23330,23332],{"class":38,"line":407},[36,23323,23324],{"class":49},"        coout",[36,23326,1923],{"class":53},[36,23328,23329],{"class":998},"\"静态成员函数的调用\"",[36,23331,1923],{"class":53},[36,23333,1945],{"class":49},[36,23335,23336],{"class":38,"line":2061},[36,23337,2937],{"class":49},[36,23339,23340],{"class":38,"line":2067},[36,23341,4744],{"class":49},[36,23343,23344,23346,23348],{"class":38,"line":2079},[36,23345,6111],{"class":53},[36,23347,6335],{"class":2713},[36,23349,2726],{"class":49},[36,23351,23352],{"class":38,"line":2362},[36,23353,2296],{"class":49},[36,23355,23356],{"class":38,"line":2367},[36,23357,23358],{"class":42},"    \u002F\u002F静态成员函数的调用方式:\n",[36,23360,23361],{"class":38,"line":2373},[36,23362,23363],{"class":42},"    \u002F\u002F1.通过对象访问\n",[36,23365,23366],{"class":38,"line":2378},[36,23367,16057],{"class":49},[36,23369,23370,23372,23374],{"class":38,"line":2392},[36,23371,16610],{"class":49},[36,23373,12296],{"class":2713},[36,23375,6383],{"class":49},[36,23377,23378],{"class":38,"line":2397},[36,23379,23380],{"class":42},"    \u002F\u002F2.通过类名访问\n",[36,23382,23383,23385,23387,23389],{"class":38,"line":2403},[36,23384,19263],{"class":2713},[36,23386,18476],{"class":49},[36,23388,12296],{"class":2713},[36,23390,6383],{"class":49},[36,23392,23393],{"class":38,"line":2424},[36,23394,2315],{"class":49},[851,23396,23397],{"start":46},[854,23398,23399],{},"静态成员函数只能访问静态成员变量",[26,23401,23403],{"className":889,"code":23402,"language":891,"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,23404,23405,23411,23415,23419,23423,23433,23437,23451,23456,23468,23472,23483,23493,23497,23501,23505,23515,23519,23532,23536,23540,23544,23548,23562,23570,23574,23578,23582,23586,23594,23598,23608,23613,23617,23625,23629,23635],{"__ignoreMap":31},[36,23406,23407,23409],{"class":38,"line":39},[36,23408,15438],{"class":53},[36,23410,15915],{"class":2713},[36,23412,23413],{"class":38,"line":46},[36,23414,2296],{"class":49},[36,23416,23417],{"class":38,"line":78},[36,23418,15460],{"class":53},[36,23420,23421],{"class":38,"line":125},[36,23422,23304],{"class":42},[36,23424,23425,23427,23429,23431],{"class":38,"line":131},[36,23426,11765],{"class":53},[36,23428,23311],{"class":53},[36,23430,12130],{"class":2713},[36,23432,2726],{"class":49},[36,23434,23435],{"class":38,"line":396},[36,23436,2780],{"class":49},[36,23438,23439,23442,23444,23446,23448],{"class":38,"line":407},[36,23440,23441],{"class":49},"        m_A",[36,23443,54],{"class":53},[36,23445,67],{"class":60},[36,23447,952],{"class":49},[36,23449,23450],{"class":42}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[36,23452,23453],{"class":38,"line":2061},[36,23454,23455],{"class":42},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[36,23457,23458,23460,23462,23464,23466],{"class":38,"line":2067},[36,23459,23324],{"class":49},[36,23461,1923],{"class":53},[36,23463,23329],{"class":998},[36,23465,1923],{"class":53},[36,23467,1945],{"class":49},[36,23469,23470],{"class":38,"line":2079},[36,23471,2937],{"class":49},[36,23473,23474,23476,23478,23480],{"class":38,"line":2362},[36,23475,11765],{"class":53},[36,23477,3132],{"class":53},[36,23479,16192],{"class":49},[36,23481,23482],{"class":42}," \u002F\u002F静态成员变量\n",[36,23484,23485,23487,23490],{"class":38,"line":2367},[36,23486,2735],{"class":53},[36,23488,23489],{"class":49}," m_B;",[36,23491,23492],{"class":42}," \u002F\u002F非静态成员变量\n",[36,23494,23495],{"class":38,"line":2373},[36,23496,194],{"emptyLinePlaceholder":193},[36,23498,23499],{"class":38,"line":2378},[36,23500,15966],{"class":53},[36,23502,23503],{"class":38,"line":2392},[36,23504,23117],{"class":42},[36,23506,23507,23509,23511,23513],{"class":38,"line":2397},[36,23508,11765],{"class":53},[36,23510,23311],{"class":53},[36,23512,14362],{"class":2713},[36,23514,2726],{"class":49},[36,23516,23517],{"class":38,"line":2403},[36,23518,2780],{"class":49},[36,23520,23521,23523,23525,23528,23530],{"class":38,"line":2424},[36,23522,4200],{"class":49},[36,23524,1923],{"class":53},[36,23526,23527],{"class":998},"\"这是私有权限下的静态函数调用\"",[36,23529,1923],{"class":53},[36,23531,1945],{"class":49},[36,23533,23534],{"class":38,"line":2429},[36,23535,2937],{"class":49},[36,23537,23538],{"class":38,"line":2443},[36,23539,194],{"emptyLinePlaceholder":193},[36,23541,23542],{"class":38,"line":2448},[36,23543,194],{"emptyLinePlaceholder":193},[36,23545,23546],{"class":38,"line":2477},[36,23547,4744],{"class":49},[36,23549,23550,23552,23554,23556,23558,23560],{"class":38,"line":2482},[36,23551,904],{"class":53},[36,23553,16313],{"class":2713},[36,23555,22947],{"class":49},[36,23557,54],{"class":53},[36,23559,643],{"class":60},[36,23561,2040],{"class":49},[36,23563,23564,23566,23568],{"class":38,"line":2499},[36,23565,6111],{"class":53},[36,23567,6335],{"class":2713},[36,23569,2726],{"class":49},[36,23571,23572],{"class":38,"line":2504},[36,23573,2296],{"class":49},[36,23575,23576],{"class":38,"line":2509},[36,23577,23358],{"class":42},[36,23579,23580],{"class":38,"line":2514},[36,23581,23363],{"class":42},[36,23583,23584],{"class":38,"line":2528},[36,23585,16057],{"class":49},[36,23587,23588,23590,23592],{"class":38,"line":2533},[36,23589,16610],{"class":49},[36,23591,12296],{"class":2713},[36,23593,6383],{"class":49},[36,23595,23596],{"class":38,"line":3326},[36,23597,23380],{"class":42},[36,23599,23600,23602,23604,23606],{"class":38,"line":3340},[36,23601,19263],{"class":2713},[36,23603,18476],{"class":49},[36,23605,12296],{"class":2713},[36,23607,6383],{"class":49},[36,23609,23610],{"class":38,"line":3348},[36,23611,23612],{"class":42},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[36,23614,23615],{"class":38,"line":3353},[36,23616,2315],{"class":49},[36,23618,23619,23621,23623],{"class":38,"line":3359},[36,23620,904],{"class":53},[36,23622,2723],{"class":2713},[36,23624,2726],{"class":49},[36,23626,23627],{"class":38,"line":3365},[36,23628,2296],{"class":49},[36,23630,23631,23633],{"class":38,"line":3370},[36,23632,6380],{"class":2713},[36,23634,6383],{"class":49},[36,23636,23637],{"class":38,"line":8695},[36,23638,2315],{"class":49},[868,23640,23642],{"id":23641},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22742,23644,23646],{"id":23645},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,23648,23649],{},"在c++中，类内的成员变量和成员函数分开存储",[14,23651,23652],{},"只有非静态成员变量才属于类的对象上",[23654,23655,23657],"h5",{"id":23656},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[26,23659,23661],{"className":889,"code":23660,"language":891,"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,23662,23663,23670,23680,23686,23690,23694,23698,23706,23710,23714,23737,23741,23749,23753,23759],{"__ignoreMap":31},[36,23664,23665,23667],{"class":38,"line":39},[36,23666,2699],{"class":53},[36,23668,23669],{"class":998},"\u003Ciostraem>\n",[36,23671,23672,23674,23676,23678],{"class":38,"line":46},[36,23673,2707],{"class":53},[36,23675,2710],{"class":53},[36,23677,2714],{"class":2713},[36,23679,2040],{"class":49},[36,23681,23682,23684],{"class":38,"line":78},[36,23683,15438],{"class":53},[36,23685,15915],{"class":2713},[36,23687,23688],{"class":38,"line":125},[36,23689,2296],{"class":49},[36,23691,23692],{"class":38,"line":131},[36,23693,194],{"emptyLinePlaceholder":193},[36,23695,23696],{"class":38,"line":396},[36,23697,4744],{"class":49},[36,23699,23700,23702,23704],{"class":38,"line":407},[36,23701,6111],{"class":53},[36,23703,6335],{"class":2713},[36,23705,2726],{"class":49},[36,23707,23708],{"class":38,"line":2061},[36,23709,2296],{"class":49},[36,23711,23712],{"class":38,"line":2067},[36,23713,16057],{"class":49},[36,23715,23716,23718,23720,23723,23725,23728,23730,23732,23734],{"class":38,"line":2079},[36,23717,2301],{"class":49},[36,23719,1923],{"class":53},[36,23721,23722],{"class":998},"\"size of p=\"",[36,23724,1923],{"class":53},[36,23726,23727],{"class":2713},"sizeoif",[36,23729,7286],{"class":49},[36,23731,1923],{"class":53},[36,23733,1988],{"class":49},[36,23735,23736],{"class":42}," \u002F\u002F查看这个空类的占用的内存空间\n",[36,23738,23739],{"class":38,"line":2362},[36,23740,2315],{"class":49},[36,23742,23743,23745,23747],{"class":38,"line":2367},[36,23744,904],{"class":53},[36,23746,2723],{"class":2713},[36,23748,2726],{"class":49},[36,23750,23751],{"class":38,"line":2373},[36,23752,2296],{"class":49},[36,23754,23755,23757],{"class":38,"line":2378},[36,23756,6380],{"class":2713},[36,23758,6383],{"class":49},[36,23760,23761],{"class":38,"line":2392},[36,23762,2315],{"class":49},[14,23764,23765],{},"输出结果为：size of p=1",[14,23767,23768],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23770,23771],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23654,23773,23775],{"id":23774},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[26,23777,23779],{"className":889,"code":23778,"language":891,"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,23780,23781,23787,23797,23805,23809,23818,23822,23830,23834,23838,23857,23861,23865,23873,23877,23883],{"__ignoreMap":31},[36,23782,23783,23785],{"class":38,"line":39},[36,23784,2699],{"class":53},[36,23786,2702],{"class":998},[36,23788,23789,23791,23793,23795],{"class":38,"line":46},[36,23790,2707],{"class":53},[36,23792,2710],{"class":53},[36,23794,2714],{"class":2713},[36,23796,2040],{"class":49},[36,23798,23799,23801,23803],{"class":38,"line":78},[36,23800,15438],{"class":53},[36,23802,16313],{"class":2713},[36,23804,3423],{"class":49},[36,23806,23807],{"class":38,"line":125},[36,23808,2296],{"class":49},[36,23810,23811,23813,23815],{"class":38,"line":131},[36,23812,2735],{"class":53},[36,23814,16192],{"class":49},[36,23816,23817],{"class":42},"\u002F\u002F非静态成员变量\n",[36,23819,23820],{"class":38,"line":396},[36,23821,4744],{"class":49},[36,23823,23824,23826,23828],{"class":38,"line":407},[36,23825,6111],{"class":53},[36,23827,6335],{"class":2713},[36,23829,2726],{"class":49},[36,23831,23832],{"class":38,"line":2061},[36,23833,2296],{"class":49},[36,23835,23836],{"class":38,"line":2067},[36,23837,16057],{"class":49},[36,23839,23840,23842,23844,23846,23848,23850,23852,23854],{"class":38,"line":2079},[36,23841,2301],{"class":49},[36,23843,1923],{"class":53},[36,23845,23722],{"class":998},[36,23847,2122],{"class":53},[36,23849,7286],{"class":49},[36,23851,1923],{"class":53},[36,23853,1988],{"class":49},[36,23855,23856],{"class":42}," \u002F\u002F查看不是空对象时占用多少内存\n",[36,23858,23859],{"class":38,"line":2362},[36,23860,194],{"emptyLinePlaceholder":193},[36,23862,23863],{"class":38,"line":2367},[36,23864,2315],{"class":49},[36,23866,23867,23869,23871],{"class":38,"line":2373},[36,23868,904],{"class":53},[36,23870,2723],{"class":2713},[36,23872,2726],{"class":49},[36,23874,23875],{"class":38,"line":2378},[36,23876,2296],{"class":49},[36,23878,23879,23881],{"class":38,"line":2392},[36,23880,6380],{"class":2713},[36,23882,6383],{"class":49},[36,23884,23885],{"class":38,"line":2397},[36,23886,2315],{"class":49},[14,23888,23889],{},"输出结果：size of p=4",[14,23891,23892],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[851,23894,23895],{},[854,23896,23897],{},"如果加上非静态成员变量，Person类修改如下",[26,23899,23901],{"className":889,"code":23900,"language":891,"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,23902,23903,23909,23913,23919,23927,23931,23936],{"__ignoreMap":31},[36,23904,23905,23907],{"class":38,"line":39},[36,23906,15438],{"class":53},[36,23908,15915],{"class":2713},[36,23910,23911],{"class":38,"line":46},[36,23912,2296],{"class":49},[36,23914,23915,23917],{"class":38,"line":78},[36,23916,2735],{"class":53},[36,23918,22136],{"class":49},[36,23920,23921,23923,23925],{"class":38,"line":125},[36,23922,11765],{"class":53},[36,23924,3132],{"class":53},[36,23926,22143],{"class":49},[36,23928,23929],{"class":38,"line":131},[36,23930,4744],{"class":49},[36,23932,23933],{"class":38,"line":396},[36,23934,23935],{"class":42},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[36,23937,23938,23940,23942,23944,23946,23948],{"class":38,"line":407},[36,23939,904],{"class":53},[36,23941,16313],{"class":2713},[36,23943,23156],{"class":49},[36,23945,54],{"class":53},[36,23947,643],{"class":60},[36,23949,2040],{"class":49},[14,23951,23952],{},"输出结果：4",[14,23954,23955],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[851,23957,23958],{"start":46},[854,23959,23960],{},"加上非静态成员函数",[26,23962,23964],{"className":889,"code":23963,"language":891,"meta":31,"style":31},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[33,23965,23966,23973,23977,23983,23991,23995,23999,24003],{"__ignoreMap":31},[36,23967,23968,23970],{"class":38,"line":39},[36,23969,15438],{"class":53},[36,23971,23972],{"class":2713},"  Person\n",[36,23974,23975],{"class":38,"line":46},[36,23976,2296],{"class":49},[36,23978,23979,23981],{"class":38,"line":78},[36,23980,2735],{"class":53},[36,23982,22136],{"class":49},[36,23984,23985,23987,23989],{"class":38,"line":125},[36,23986,15653],{"class":53},[36,23988,12130],{"class":2713},[36,23990,2726],{"class":49},[36,23992,23993],{"class":38,"line":131},[36,23994,2780],{"class":49},[36,23996,23997],{"class":38,"line":396},[36,23998,194],{"emptyLinePlaceholder":193},[36,24000,24001],{"class":38,"line":407},[36,24002,2937],{"class":49},[36,24004,24005],{"class":38,"line":2061},[36,24006,4744],{"class":49},[14,24008,24009],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[851,24011,24012],{"start":78},[854,24013,24014],{},"加上静态成员函数",[26,24016,24018],{"className":889,"code":24017,"language":891,"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,24019,24020,24026,24030,24036,24044,24048,24052,24056,24067,24071,24075,24079],{"__ignoreMap":31},[36,24021,24022,24024],{"class":38,"line":39},[36,24023,15438],{"class":53},[36,24025,23972],{"class":2713},[36,24027,24028],{"class":38,"line":46},[36,24029,2296],{"class":49},[36,24031,24032,24034],{"class":38,"line":78},[36,24033,2735],{"class":53},[36,24035,22136],{"class":49},[36,24037,24038,24040,24042],{"class":38,"line":125},[36,24039,15653],{"class":53},[36,24041,12130],{"class":2713},[36,24043,2726],{"class":49},[36,24045,24046],{"class":38,"line":131},[36,24047,2780],{"class":49},[36,24049,24050],{"class":38,"line":396},[36,24051,194],{"emptyLinePlaceholder":193},[36,24053,24054],{"class":38,"line":407},[36,24055,2937],{"class":49},[36,24057,24058,24060,24062,24065],{"class":38,"line":2061},[36,24059,11765],{"class":53},[36,24061,23311],{"class":53},[36,24063,24064],{"class":2713}," func1",[36,24066,2726],{"class":49},[36,24068,24069],{"class":38,"line":2067},[36,24070,2780],{"class":49},[36,24072,24073],{"class":38,"line":2079},[36,24074,194],{"emptyLinePlaceholder":193},[36,24076,24077],{"class":38,"line":2362},[36,24078,2937],{"class":49},[36,24080,24081],{"class":38,"line":2367},[36,24082,4744],{"class":49},[14,24084,23952],{},[14,24086,24087],{},"解释：静态成员函数也不属于类上",[807,24089,8421],{},{"title":31,"searchDepth":46,"depth":46,"links":24091},[24092,24098],{"id":15389,"depth":46,"text":15390,"children":24093},[24094,24095,24096,24097],{"id":15393,"depth":78,"text":15394},{"id":16118,"depth":78,"text":16119},{"id":16290,"depth":78,"text":16291},{"id":16749,"depth":78,"text":16750},{"id":19121,"depth":46,"text":19122,"children":24099},[24100,24101,24102,24103,24104,24105,24106,24107,24108],{"id":19133,"depth":78,"text":19134},{"id":19426,"depth":78,"text":19427},{"id":19917,"depth":78,"text":19918},{"id":21014,"depth":78,"text":21015},{"id":21437,"depth":78,"text":21438},{"id":21916,"depth":78,"text":21917},{"id":22291,"depth":78,"text":22292},{"id":22704,"depth":78,"text":22705},{"id":23641,"depth":78,"text":23642},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15354,"description":24109},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24116,"title":891,"body":24117,"description":823,"extension":824,"meta":24121,"navigation":193,"path":24123,"seo":24124,"stem":24125,"__hash__":24126},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24118,"toc":24119},[],{"title":31,"searchDepth":46,"depth":46,"links":24120},[],{"category":24122},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":891,"description":823},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24128,"title":24129,"body":24130,"description":31,"extension":824,"meta":24721,"navigation":193,"path":24722,"seo":24723,"stem":24724,"__hash__":24725},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":24131,"toc":24703},[24132,24135,24139,24142,24145,24148,24166,24171,24174,24177,24180,24183,24188,24191,24196,24199,24202,24206,24209,24212,24218,24221,24239,24243,24247,24250,24255,24258,24262,24265,24278,24281,24285,24288,24291,24294,24319,24322,24331,24342,24357,24389,24393,24400,24408,24412,24415,24418,24423,24427,24430,24433,24438,24441,24445,24448,24451,24456,24459,24463,24468,24472,24539,24543,24546,24549,24552,24555,24558,24564,24585,24588,24602,24611,24615,24618,24621,24626,24629,24634,24639,24642,24645,24650,24655,24658,24663,24668,24671,24676,24681,24684,24687,24692,24695,24700],[10,24133,24129],{"id":24134},"_1强化学习基本认识",[21,24136,24138],{"id":24137},"_11什么是强化学习","1.1.什么是强化学习",[14,24140,24141],{},"强化学习有两部分组成：智能体和环境；",[14,24143,24144],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,24146,24147],{},"强化学习与监督学习的区别:",[851,24149,24150,24153,24156,24159],{},[854,24151,24152],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[854,24154,24155],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[854,24157,24158],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[854,24160,24161,24162,24165],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[1043,24163,24164],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,24167,24168],{},[2212,24169],{"alt":31,"src":24170},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,24172,24173],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,24175,24176],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,24178,24179],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,24181,24182],{},"获取奖励",[14,24184,24185],{},[2212,24186],{"alt":31,"src":24187},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,24189,24190],{},"强化学习可以分成标准强化学习和深度强化学习",[14,24192,24193],{},[2212,24194],{"alt":31,"src":24195},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,24197,24198],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,24200,24201],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[21,24203,24205],{"id":24204},"_12强化学习应用场景","1.2.强化学习应用场景",[14,24207,24208],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,24210,24211],{},"具身智能中的应用",[14,24213,24214,24217],{},[1043,24215,24216],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,24219,24220],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,24222,24223,24224,24227,24228,24231,24232,24235,24236],{},"机器人是",[1043,24225,24226],{},"躯体","，深度学习是",[1043,24229,24230],{},"神经元****网络","，VLA是",[1043,24233,24234],{},"通用的行为逻辑","，而强化学习是",[1043,24237,24238],{},"教练",[21,24240,24242],{"id":24241},"_13序列决策","1.3.序列决策",[868,24244,24246],{"id":24245},"_131智能体与环境","1.3.1.智能体与环境",[14,24248,24249],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,24251,24252],{},[2212,24253],{"alt":31,"src":24254},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,24256,24257],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[868,24259,24261],{"id":24260},"_132奖励","1.3.2.奖励",[14,24263,24264],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,24266,24267,24268,24277],{},"取某个策略的表现如何。强化学习的目的就是",[1043,24269,24270,24271,24276],{},"最大化",[1043,24272,24273],{},[1043,24274,24275],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,24279,24280],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[868,24282,24284],{"id":24283},"_133序列决策","1.3.3.序列决策",[14,24286,24287],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,24289,24290],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,24292,24293],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,24295,24296,24300,24301,24303,24304,24306,24307,24309,24310,14539,24313,14539,24316],{},[24297,24298,24299],"em",{},"Ht"," = ",[24297,24302,1478],{},"1*, a",[24297,24305,61],{},", r",[24297,24308,61],{},", . . . ,* ",[24297,24311,24312],{},"ot",[24297,24314,24315],{},", at ,",[24297,24317,24318],{},"rt",[14,24320,24321],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,24323,24324,24300,24327,2408,24329,1314],{},[24297,24325,24326],{},"st",[24297,24328,949],{},[24297,24330,24299],{},[14,24332,24333,24334,24337,24338,24341],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[1043,24335,24336],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[1043,24339,24340],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,24343,24344,24345,24348,24349,24352,24353,24356],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[1043,24346,24347],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[1043,24350,24351],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[24297,24354,24355],{},"S, A, T, R, Ω, O, γ",")。",[14,24358,24359,24360,24362,24363,24365,24366,901,24368,24371,24372,24374,24375,901,24378,24381,24382,24384,24385,24388],{},"其中 ",[24297,24361,1571],{}," 表示状态空间，为隐变量，",[24297,24364,1123],{}," 为动作空间，",[24297,24367,1595],{},[24297,24369,24370],{},"s ′ |s, a",") 为状态转移概率，",[24297,24373,1546],{}," 为奖励函数，",[24297,24376,24377],{},"Ω",[24297,24379,24380],{},"o|s, a",") 为观测概率，",[24297,24383,1472],{}," 为观测空间，",[24297,24386,24387],{},"γ"," 为折扣因子。",[21,24390,24392],{"id":24391},"_14动作空间","1.4.动作空间",[14,24394,24395,24396,24399],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[1043,24397,24398],{},"动作空间"," ，动作空间分为:",[851,24401,24402,24405],{},[854,24403,24404],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[854,24406,24407],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[21,24409,24411],{"id":24410},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,24413,24414],{},"由策略、价值函数、模型三部分组成",[14,24416,24417],{},"这三者组成马尔可夫决策过程",[14,24419,24420],{},[2212,24421],{"alt":31,"src":24422},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[868,24424,24426],{"id":24425},"_151策略","1.5.1.策略",[14,24428,24429],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,24431,24432],{},"策略可分为两种：",[14,24434,24435],{},[2212,24436],{"alt":31,"src":24437},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,24439,24440],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[868,24442,24444],{"id":24443},"_152价值函数","1.5.2.价值函数",[14,24446,24447],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,24449,24450],{},"价值函数中有一个折扣因子，类似于存款利息",[14,24452,24453],{},[2212,24454],{"alt":31,"src":24455},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,24457,24458],{},"进入某个状态采取的最优动作可以通过Q函数得到",[868,24460,24462],{"id":24461},"_153模型","1.5.3.模型",[14,24464,24465],{},[2212,24466],{"alt":31,"src":24467},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[21,24469,24471],{"id":24470},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[1031,24473,24474,24485],{},[1034,24475,24476],{},[1037,24477,24478,24482],{},[1040,24479,24481],{"align":24480},"left","类型",[1040,24483,24484],{"align":24480},"特点",[1078,24486,24487,24497,24507,24517,24529],{},[1037,24488,24489,24494],{},[1083,24490,24491],{"align":24480},[1043,24492,24493],{},"基于价值的智能体",[1083,24495,24496],{"align":24480},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[1037,24498,24499,24504],{},[1083,24500,24501],{"align":24480},[1043,24502,24503],{},"基于策略的智能体",[1083,24505,24506],{"align":24480},"直接学习策略，没有学习价值函数",[1037,24508,24509,24514],{},[1083,24510,24511],{"align":24480},[1043,24512,24513],{},"演员-评论员智能体",[1083,24515,24516],{"align":24480},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[1037,24518,24519,24524],{},[1083,24520,24521],{"align":24480},[1043,24522,24523],{},"有模型强化学习智能体",[1083,24525,24526],{"align":24480},[2212,24527],{"alt":31,"src":24528},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[1037,24530,24531,24536],{},[1083,24532,24533],{"align":24480},[1043,24534,24535],{},"免模型强化学习智能体",[1083,24537,24538],{"align":24480},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[21,24540,24542],{"id":24541},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,24544,24545],{},"学习和规划是序列决策的两个基本问题",[14,24547,24548],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,24550,24551],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,24553,24554],{},"强化学习用到的库：Gym",[14,24556,24557],{},"Gym可以检验强化学习算法的优劣",[14,24559,24560,24563],{},[1043,24561,24562],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[26,24565,24569],{"className":24566,"code":24567,"language":24568,"meta":31,"style":31},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[33,24570,24571],{"__ignoreMap":31},[36,24572,24573,24576,24579,24582],{"class":38,"line":39},[36,24574,24575],{"class":2713},"pip",[36,24577,24578],{"class":998}," install",[36,24580,24581],{"class":998}," gym==",[36,24583,24584],{"class":60},"0.25.2\n",[14,24586,24587],{},"显示图形界面需要",[26,24589,24591],{"className":24566,"code":24590,"language":24568,"meta":31,"style":31},"pip install pygame\n",[33,24592,24593],{"__ignoreMap":31},[36,24594,24595,24597,24599],{"class":38,"line":39},[36,24596,24575],{"class":2713},[36,24598,24578],{"class":998},[36,24600,24601],{"class":998}," pygame\n",[14,24603,24604,24605],{},"有关Gym库的相关文档介绍：",[50,24606,24610],{"href":24607,"rel":24608},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24609],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[21,24612,24614],{"id":24613},"_18一些补充基础概念","1.8.一些补充基础概念",[14,24616,24617],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,24619,24620],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,24622,24623],{},[2212,24624],{"alt":31,"src":24625},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,24627,24628],{},"折扣率需要自己来设定",[14,24630,24631],{},[2212,24632],{"alt":31,"src":24633},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[851,24635,24636],{},[854,24637,24638],{},"状态转移函数：",[14,24640,24641],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,24643,24644],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,24646,24647],{},[2212,24648],{"alt":31,"src":24649},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[851,24651,24652],{"start":46},[854,24653,24654],{},"动作价值函数：",[14,24656,24657],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,24659,24660],{},[2212,24661],{"alt":31,"src":24662},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[851,24664,24665],{"start":78},[854,24666,24667],{},"最优动作价值函数：",[14,24669,24670],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[14,24672,24673],{},[2212,24674],{"alt":31,"src":24675},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[851,24677,24678],{"start":125},[854,24679,24680],{},"状态价值函数:",[14,24682,24683],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,24685,24686],{},"它衡量的是“一个具体动作”的长期价值",[14,24688,24689],{},[2212,24690],{"alt":31,"src":24691},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,24693,24694],{},"几个价值函数之间的比较：",[14,24696,24697],{},[2212,24698],{"alt":31,"src":24699},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[807,24701,24702],{},"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":46,"depth":46,"links":24704},[24705,24706,24707,24712,24713,24718,24719,24720],{"id":24137,"depth":46,"text":24138},{"id":24204,"depth":46,"text":24205},{"id":24241,"depth":46,"text":24242,"children":24708},[24709,24710,24711],{"id":24245,"depth":78,"text":24246},{"id":24260,"depth":78,"text":24261},{"id":24283,"depth":78,"text":24284},{"id":24391,"depth":46,"text":24392},{"id":24410,"depth":46,"text":24411,"children":24714},[24715,24716,24717],{"id":24425,"depth":78,"text":24426},{"id":24443,"depth":78,"text":24444},{"id":24461,"depth":78,"text":24462},{"id":24470,"depth":46,"text":24471},{"id":24541,"depth":46,"text":24542},{"id":24613,"depth":46,"text":24614},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":24129,"description":31},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24727,"title":24728,"body":24729,"description":24736,"extension":824,"meta":24747,"navigation":193,"path":24748,"seo":24749,"stem":24750,"__hash__":24751},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24730,"toc":24745},[24731,24734,24737,24742],[10,24732,24728],{"id":24733},"_2马尔可夫决策过程",[14,24735,24736],{},"这是强化学习的基本框架",[14,24738,24739],{},[2212,24740],{"alt":31,"src":24741},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,24743,24744],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":31,"searchDepth":46,"depth":46,"links":24746},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24728,"description":24736},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24753,"title":24754,"body":24755,"description":31,"extension":824,"meta":24871,"navigation":193,"path":24872,"seo":24873,"stem":24874,"__hash__":24875},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24756,"toc":24866},[24757,24760,24764,24767,24772,24777,24780,24785,24788,24793,24796,24800,24805,24808,24813,24818,24823,24826,24830,24835,24838,24843,24848,24853,24858,24861],[10,24758,24754],{"id":24759},"_3动作价值函数",[21,24761,24763],{"id":24762},"_31dqn","3.1.DQN",[14,24765,24766],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24768,24769],{},[2212,24770],{"alt":31,"src":24771},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24773,24774],{},[2212,24775],{"alt":31,"src":24776},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24778,24779],{},"DQN算法的描述：",[14,24781,24782],{},[2212,24783],{"alt":31,"src":24784},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24786,24787],{},"这里的Dense指的是全连接层",[14,24789,24790],{},[2212,24791],{"alt":31,"src":24792},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,24794,24795],{},"当前观测的状态为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算法",[21,24797,24799],{"id":24798},"_32dqn的举例","3.2.DQN的举例",[14,24801,24802],{},[2212,24803],{"alt":31,"src":24804},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24806,24807],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24809,24810],{},[2212,24811],{"alt":31,"src":24812},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24814,24815],{},[2212,24816],{"alt":31,"src":24817},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24819,24820],{},[2212,24821],{"alt":31,"src":24822},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24824,24825],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[21,24827,24829],{"id":24828},"_33td算法","3.3.TD算法",[14,24831,24832],{},[2212,24833],{"alt":31,"src":24834},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24836,24837],{},"强化学习TD算法公式的粗略解释：",[14,24839,24840],{},[2212,24841],{"alt":31,"src":24842},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24844,24845],{},[2212,24846],{"alt":31,"src":24847},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24849,24850],{},[2212,24851],{"alt":31,"src":24852},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24854,24855],{},[2212,24856],{"alt":31,"src":24857},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24859,24860],{},"TD算法总结：",[14,24862,24863],{},[2212,24864],{"alt":31,"src":24865},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":31,"searchDepth":46,"depth":46,"links":24867},[24868,24869,24870],{"id":24762,"depth":46,"text":24763},{"id":24798,"depth":46,"text":24799},{"id":24828,"depth":46,"text":24829},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24754,"description":31},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24877,"title":24878,"body":24879,"description":31,"extension":824,"meta":25112,"navigation":193,"path":25113,"seo":25114,"stem":25115,"__hash__":25116},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24880,"toc":25108},[24881,24884,24888,24891,24894,24899,24904,24907,24912,24917,24920,24925,24928,24933,24936,24941,24944,24949,24952,24957,24962,24965,24970,24973,24976,24981,24984,24989,24994,24998,25001,25004,25009,25014,25017,25022,25027,25030,25035,25038,25041,25046,25049,25054,25057,25062,25067,25070,25075,25080,25083,25088,25091,25096,25099],[10,24882,24878],{"id":24883},"_4策略学习",[21,24885,24887],{"id":24886},"_41概念描述","4.1.概念描述",[14,24889,24890],{},"用神经网络（策略网络）近似策略函数",[14,24892,24893],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24895,24896],{},[2212,24897],{"alt":31,"src":24898},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24900,24901],{},[2212,24902],{"alt":31,"src":24903},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24905,24906],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24908,24909],{},[2212,24910],{"alt":31,"src":24911},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24913,24914],{},[2212,24915],{"alt":31,"src":24916},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24918,24919],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24921,24922],{},[2212,24923],{"alt":31,"src":24924},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24926,24927],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,24929,24930],{},[2212,24931],{"alt":31,"src":24932},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,24934,24935],{},"改进theta要用到策略梯度算法",[14,24937,24938],{},[2212,24939],{"alt":31,"src":24940},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,24942,24943],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,24945,24946],{},[2212,24947],{"alt":31,"src":24948},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,24950,24951],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,24953,24954],{},[2212,24955],{"alt":31,"src":24956},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,24958,24959],{},[2212,24960],{"alt":31,"src":24961},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24963,24964],{},"梯度公式总结：",[14,24966,24967],{},[2212,24968],{"alt":31,"src":24969},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24971,24972],{},"两个公式的分别应用场景：",[14,24974,24975],{},"对于离散的动作：",[14,24977,24978],{},[2212,24979],{"alt":31,"src":24980},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24982,24983],{},"对于连续的动作：",[14,24985,24986],{},[2212,24987],{"alt":31,"src":24988},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24990,24991],{},[2212,24992],{"alt":31,"src":24993},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[21,24995,24997],{"id":24996},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24999,25000],{},"使用蒙特卡洛来近似计算策略梯度",[14,25002,25003],{},"蒙特卡洛法的解释如下：",[14,25005,25006],{},[2212,25007],{"alt":31,"src":25008},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,25010,25011],{},[2212,25012],{"alt":31,"src":25013},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,25015,25016],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[851,25018,25019],{},[854,25020,25021],{},"方法一：reinforce算法",[14,25023,25024],{},[2212,25025],{"alt":31,"src":25026},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,25028,25029],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[851,25031,25032],{"start":46},[854,25033,25034],{},"方法二：actor-critic算法",[14,25036,25037],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,25039,25040],{},"两个网络的构建：",[14,25042,25043],{},[2212,25044],{"alt":31,"src":25045},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,25047,25048],{},"actor网路：",[14,25050,25051],{},[2212,25052],{"alt":31,"src":25053},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,25055,25056],{},"critic网络",[14,25058,25059],{},[2212,25060],{"alt":31,"src":25061},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[851,25063,25064],{"start":78},[854,25065,25066],{},"网络的训练",[14,25068,25069],{},"网络描述",[14,25071,25072],{},[2212,25073],{"alt":31,"src":25074},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,25076,25077],{},[2212,25078],{"alt":31,"src":25079},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,25081,25082],{},"TD算法更新梯度：",[14,25084,25085],{},[2212,25086],{"alt":31,"src":25087},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,25089,25090],{},"策略网络更新梯度：",[14,25092,25093],{},[2212,25094],{"alt":31,"src":25095},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,25097,25098],{},"训练整个流程的具体描述：",[14,25100,25101,25104,25105],{},[2212,25102],{"alt":31,"src":25103},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[2212,25106],{"alt":31,"src":25107},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":31,"searchDepth":46,"depth":46,"links":25109},[25110,25111],{"id":24886,"depth":46,"text":24887},{"id":24996,"depth":46,"text":24997},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24878,"description":31},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25118,"title":25119,"body":25120,"description":25127,"extension":824,"meta":25177,"navigation":193,"path":25178,"seo":25179,"stem":25180,"__hash__":25181},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25121,"toc":25173},[25122,25125,25128,25132,25135,25140,25144,25147,25152,25155,25160,25165,25168],[10,25123,25119],{"id":25124},"_5alphago算法",[14,25126,25127],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[21,25129,25131],{"id":25130},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,25133,25134],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,25136,25137],{},[2212,25138],{"alt":31,"src":25139},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[21,25141,25143],{"id":25142},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,25145,25146],{},"采用强化学习的方式训练策略网络",[14,25148,25149],{},[2212,25150],{"alt":31,"src":25151},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,25153,25154],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,25156,25157],{},[2212,25158],{"alt":31,"src":25159},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,25161,25162],{},[2212,25163],{"alt":31,"src":25164},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,25166,25167],{},"强化学习训练策略网络的总结：",[14,25169,25170],{},[2212,25171],{"alt":31,"src":25172},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":31,"searchDepth":46,"depth":46,"links":25174},[25175,25176],{"id":25130,"depth":46,"text":25131},{"id":25142,"depth":46,"text":25143},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25119,"description":25127},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":25183,"title":25184,"body":25185,"description":25192,"extension":824,"meta":25195,"navigation":193,"path":25196,"seo":25197,"stem":25198,"__hash__":25199},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":25186,"toc":25193},[25187,25190],[10,25188,25184],{"id":25189},"_6价值网络",[14,25191,25192],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":31,"searchDepth":46,"depth":46,"links":25194},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":25184,"description":25192},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":25201,"title":25202,"body":25203,"description":25207,"extension":824,"meta":25208,"navigation":193,"path":25209,"seo":25210,"stem":25211,"__hash__":25212},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":25204,"toc":25205},[],{"title":31,"searchDepth":46,"depth":46,"links":25206},[],"记录自己的强化学习笔记。",{"category":24122},"\u002Fwiki\u002F2025-12-04",{"title":25202,"description":25207},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":25214,"title":25215,"body":25216,"description":823,"extension":824,"meta":25255,"navigation":193,"path":25256,"seo":25257,"stem":25258,"__hash__":25259},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":25217,"toc":25253},[25218,25221,25224,25230,25233,25239,25242,25247,25250],[10,25219,25215],{"id":25220},"_1-项目概览与官方资源",[14,25222,25223],{},"官方文档：",[14,25225,25226],{},[50,25227,25228],{"href":25228,"rel":25229},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24609],[14,25231,25232],{},"官方代码仓库：",[14,25234,25235],{},[50,25236,25237],{"href":25237,"rel":25238},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24609],[14,25240,25241],{},"复现大体流程：",[14,25243,25244],{},[2212,25245],{"alt":31,"src":25246},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,25248,25249],{},"本教程的目标是打通这条链路：",[14,25251,25252],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":31,"searchDepth":46,"depth":46,"links":25254},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":25215,"description":823},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":25261,"title":25262,"body":25263,"description":823,"extension":824,"meta":25379,"navigation":193,"path":25380,"seo":25381,"stem":25382,"__hash__":25383},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":25264,"toc":25374},[25265,25268,25272,25275,25282,25286,25289,25298,25308,25312,25342,25345,25371],[10,25266,25262],{"id":25267},"_2-环境准备与设备连接",[21,25269,25271],{"id":25270},"_21-系统与环境","2.1 系统与环境",[14,25273,25274],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,25276,25277,25278,25281],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[33,25279,25280],{},"lerobot"," 依赖。",[21,25283,25285],{"id":25284},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,25287,25288],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[26,25290,25292],{"className":24566,"code":25291,"language":24568,"meta":31,"style":31},"lerobot-find-out\n",[33,25293,25294],{"__ignoreMap":31},[36,25295,25296],{"class":38,"line":39},[36,25297,25291],{"class":2713},[14,25299,25300,25301,1104,25304,25307],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[33,25302,25303],{},"\u002Fdev\u002FttyACM0",[33,25305,25306],{},"\u002Fdev\u002FttyACM1","）。",[21,25309,25311],{"id":25310},"_23-串口授权","2.3 串口授权",[26,25313,25315],{"className":24566,"code":25314,"language":24568,"meta":31,"style":31},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[33,25316,25317,25331],{"__ignoreMap":31},[36,25318,25319,25322,25325,25328],{"class":38,"line":39},[36,25320,25321],{"class":2713},"sudo",[36,25323,25324],{"class":998}," chmod",[36,25326,25327],{"class":60}," 666",[36,25329,25330],{"class":998}," \u002Fdev\u002FttyACM0\n",[36,25332,25333,25335,25337,25339],{"class":38,"line":46},[36,25334,25321],{"class":2713},[36,25336,25324],{"class":998},[36,25338,25327],{"class":60},[36,25340,25341],{"class":998}," \u002Fdev\u002FttyACM1\n",[14,25343,25344],{},"说明：",[1886,25346,25347,25352,25358,25368],{},[854,25348,25349,25351],{},[33,25350,25321],{},"：以 root 权限执行命令。",[854,25353,25354,25357],{},[33,25355,25356],{},"chmod","：修改设备节点权限。",[854,25359,25360,25363,25364,25367],{},[33,25361,25362],{},"666","：",[33,25365,25366],{},"rw-rw-rw-","，所有用户可读写。",[854,25369,25370],{},"串口号必须替换为你机器上的真实端口。",[807,25372,25373],{},"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":46,"depth":46,"links":25375},[25376,25377,25378],{"id":25270,"depth":46,"text":25271},{"id":25284,"depth":46,"text":25285},{"id":25310,"depth":46,"text":25311},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":25262,"description":823},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25385,"title":25386,"body":25387,"description":823,"extension":824,"meta":25548,"navigation":193,"path":25549,"seo":25550,"stem":25551,"__hash__":25552},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25388,"toc":25544},[25389,25393,25397,25403,25406,25463,25466,25470,25473,25541],[10,25390,25392],{"id":25391},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[21,25394,25396],{"id":25395},"_31-配置电机-id","3.1 配置电机 ID",[14,25398,25399,25400,25402],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[33,25401,61],{},"，需要改成机械臂链路里不冲突的编号。",[14,25404,25405],{},"方式一：用 LeRobot 命令逐步写入。",[26,25407,25409],{"className":24566,"code":25408,"language":24568,"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,25410,25411,25416,25424,25431,25436,25440,25445,25451,25458],{"__ignoreMap":31},[36,25412,25413],{"class":38,"line":39},[36,25414,25415],{"class":42},"# 主臂舵机配置 ID\n",[36,25417,25418,25421],{"class":38,"line":46},[36,25419,25420],{"class":2713},"lerobot-setup-motors",[36,25422,25423],{"class":60}," \\\n",[36,25425,25426,25429],{"class":38,"line":78},[36,25427,25428],{"class":60},"  --teleop.type=so101_leader",[36,25430,25423],{"class":60},[36,25432,25433],{"class":38,"line":125},[36,25434,25435],{"class":60},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[36,25437,25438],{"class":38,"line":131},[36,25439,194],{"emptyLinePlaceholder":193},[36,25441,25442],{"class":38,"line":396},[36,25443,25444],{"class":42},"# 从臂舵机配置 ID\n",[36,25446,25447,25449],{"class":38,"line":407},[36,25448,25420],{"class":2713},[36,25450,25423],{"class":60},[36,25452,25453,25456],{"class":38,"line":2061},[36,25454,25455],{"class":60},"  --robot.type=so101_follower",[36,25457,25423],{"class":60},[36,25459,25460],{"class":38,"line":2067},[36,25461,25462],{"class":60},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,25464,25465],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[21,25467,25469],{"id":25468},"_32-机械臂校准","3.2 机械臂校准",[14,25471,25472],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[26,25474,25476],{"className":24566,"code":25475,"language":24568,"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,25477,25478,25483,25490,25496,25503,25508,25512,25517,25523,25529,25536],{"__ignoreMap":31},[36,25479,25480],{"class":38,"line":39},[36,25481,25482],{"class":42},"# 主臂校准\n",[36,25484,25485,25488],{"class":38,"line":46},[36,25486,25487],{"class":2713},"lerobot-calibrate",[36,25489,25423],{"class":60},[36,25491,25492,25494],{"class":38,"line":78},[36,25493,25428],{"class":60},[36,25495,25423],{"class":60},[36,25497,25498,25501],{"class":38,"line":125},[36,25499,25500],{"class":60},"  --teleop.port=\u002Fdev\u002FttyACM0",[36,25502,25423],{"class":60},[36,25504,25505],{"class":38,"line":131},[36,25506,25507],{"class":60},"  --teleop.id=my_awesome_leader_arm\n",[36,25509,25510],{"class":38,"line":396},[36,25511,194],{"emptyLinePlaceholder":193},[36,25513,25514],{"class":38,"line":407},[36,25515,25516],{"class":42},"# 从臂校准\n",[36,25518,25519,25521],{"class":38,"line":2061},[36,25520,25487],{"class":2713},[36,25522,25423],{"class":60},[36,25524,25525,25527],{"class":38,"line":2067},[36,25526,25455],{"class":60},[36,25528,25423],{"class":60},[36,25530,25531,25534],{"class":38,"line":2079},[36,25532,25533],{"class":60},"  --robot.port=\u002Fdev\u002FttyACM1",[36,25535,25423],{"class":60},[36,25537,25538],{"class":38,"line":2362},[36,25539,25540],{"class":60},"  --robot.id=my_awesome_follower_arm\n",[807,25542,25543],{},"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":46,"depth":46,"links":25545},[25546,25547],{"id":25395,"depth":46,"text":25396},{"id":25468,"depth":46,"text":25469},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25386,"description":823},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25554,"title":25555,"body":25556,"description":823,"extension":824,"meta":25747,"navigation":193,"path":25748,"seo":25749,"stem":25750,"__hash__":25751},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25557,"toc":25743},[25558,25561,25565,25612,25616,25629,25692,25695,25740],[10,25559,25555],{"id":25560},"_4-遥操与相机接入",[21,25562,25564],{"id":25563},"_41-不带相机遥操","4.1 不带相机遥操",[26,25566,25568],{"className":24566,"code":25567,"language":24568,"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,25569,25570,25577,25583,25589,25596,25602,25608],{"__ignoreMap":31},[36,25571,25572,25575],{"class":38,"line":39},[36,25573,25574],{"class":2713},"lerobot-teleoperate",[36,25576,25423],{"class":60},[36,25578,25579,25581],{"class":38,"line":46},[36,25580,25455],{"class":60},[36,25582,25423],{"class":60},[36,25584,25585,25587],{"class":38,"line":78},[36,25586,25533],{"class":60},[36,25588,25423],{"class":60},[36,25590,25591,25594],{"class":38,"line":125},[36,25592,25593],{"class":60},"  --robot.id=my_awesome_follower_arm",[36,25595,25423],{"class":60},[36,25597,25598,25600],{"class":38,"line":131},[36,25599,25428],{"class":60},[36,25601,25423],{"class":60},[36,25603,25604,25606],{"class":38,"line":396},[36,25605,25500],{"class":60},[36,25607,25423],{"class":60},[36,25609,25610],{"class":38,"line":407},[36,25611,25507],{"class":60},[21,25613,25615],{"id":25614},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[26,25617,25619],{"className":24566,"code":25618,"language":24568,"meta":31,"style":31},"lerobot-find-cameras opencv\n",[33,25620,25621],{"__ignoreMap":31},[36,25622,25623,25626],{"class":38,"line":39},[36,25624,25625],{"class":2713},"lerobot-find-cameras",[36,25627,25628],{"class":998}," opencv\n",[26,25630,25632],{"className":24566,"code":25631,"language":24568,"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,25633,25634,25640,25646,25652,25658,25668,25674,25680,25687],{"__ignoreMap":31},[36,25635,25636,25638],{"class":38,"line":39},[36,25637,25574],{"class":2713},[36,25639,25423],{"class":60},[36,25641,25642,25644],{"class":38,"line":46},[36,25643,25455],{"class":60},[36,25645,25423],{"class":60},[36,25647,25648,25650],{"class":38,"line":78},[36,25649,25533],{"class":60},[36,25651,25423],{"class":60},[36,25653,25654,25656],{"class":38,"line":125},[36,25655,25593],{"class":60},[36,25657,25423],{"class":60},[36,25659,25660,25663,25666],{"class":38,"line":131},[36,25661,25662],{"class":60},"  --robot.cameras=",[36,25664,25665],{"class":998},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[36,25667,25423],{"class":60},[36,25669,25670,25672],{"class":38,"line":396},[36,25671,25428],{"class":60},[36,25673,25423],{"class":60},[36,25675,25676,25678],{"class":38,"line":407},[36,25677,25500],{"class":60},[36,25679,25423],{"class":60},[36,25681,25682,25685],{"class":38,"line":2061},[36,25683,25684],{"class":60},"  --teleop.id=my_awesome_leader_arm",[36,25686,25423],{"class":60},[36,25688,25689],{"class":38,"line":2067},[36,25690,25691],{"class":60},"  --display_data=true\n",[14,25693,25694],{},"相机参数说明：",[1886,25696,25697,25703,25709,25718,25728,25734],{},[854,25698,25699,25702],{},[33,25700,25701],{},"front","：相机名称。",[854,25704,25705,25708],{},[33,25706,25707],{},"type: opencv","：相机驱动类型。",[854,25710,25711,25714,25715,25307],{},[33,25712,25713],{},"index_or_path","：设备编号或设备路径（如 ",[33,25716,25717],{},"\u002Fdev\u002Fvideo4",[854,25719,25720,25723,25724,25727],{},[33,25721,25722],{},"width"," \u002F ",[33,25725,25726],{},"height","：图像分辨率。",[854,25729,25730,25733],{},[33,25731,25732],{},"fps","：采样帧率。",[854,25735,25736,25739],{},[33,25737,25738],{},"--display_data=true","：启用实时可视化。",[807,25741,25742],{},"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":46,"depth":46,"links":25744},[25745,25746],{"id":25563,"depth":46,"text":25564},{"id":25614,"depth":46,"text":25615},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25555,"description":823},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25753,"title":25754,"body":25755,"description":823,"extension":824,"meta":25927,"navigation":193,"path":25928,"seo":25929,"stem":25930,"__hash__":25931},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25756,"toc":25922},[25757,25761,25765,25770,25775,25778,25820,25826,25830,25879,25884,25888,25891,25899,25904,25909,25914,25919],[10,25758,25760],{"id":25759},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[21,25762,25764],{"id":25763},"_51-生成访问令牌","5.1 生成访问令牌",[14,25766,25767],{},[2212,25768],{"alt":31,"src":25769},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25771,25772],{},[2212,25773],{"alt":31,"src":25774},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25776,25777],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[26,25779,25781],{"className":24566,"code":25780,"language":24568,"meta":31,"style":31},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[33,25782,25783,25796],{"__ignoreMap":31},[36,25784,25785,25788,25791,25793],{"class":38,"line":39},[36,25786,25787],{"class":53},"export",[36,25789,25790],{"class":49}," HF_TOKEN",[36,25792,54],{"class":53},[36,25794,25795],{"class":998},"\"your_huggingface_token\"\n",[36,25797,25798,25801,25804,25807,25810,25812,25815,25817],{"class":38,"line":46},[36,25799,25800],{"class":2713},"hf",[36,25802,25803],{"class":998}," auth",[36,25805,25806],{"class":998}," login",[36,25808,25809],{"class":60}," --token",[36,25811,10471],{"class":998},[36,25813,25814],{"class":49},"$HF_TOKEN",[36,25816,1141],{"class":998},[36,25818,25819],{"class":60}," --add-to-git-credential\n",[14,25821,25822,25825],{},[33,25823,25824],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[21,25827,25829],{"id":25828},"_52-验证登录","5.2 验证登录",[26,25831,25833],{"className":24566,"code":25832,"language":24568,"meta":31,"style":31},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[33,25834,25835,25866],{"__ignoreMap":31},[36,25836,25837,25840,25842,25845,25847,25849,25852,25855,25858,25861,25864],{"class":38,"line":39},[36,25838,25839],{"class":49},"HF_USER",[36,25841,54],{"class":53},[36,25843,25844],{"class":49},"$(",[36,25846,25800],{"class":2713},[36,25848,25803],{"class":998},[36,25850,25851],{"class":998}," whoami",[36,25853,25854],{"class":53}," |",[36,25856,25857],{"class":2713}," head",[36,25859,25860],{"class":60}," -n",[36,25862,25863],{"class":60}," 1",[36,25865,75],{"class":49},[36,25867,25868,25871,25873,25876],{"class":38,"line":46},[36,25869,25870],{"class":60},"echo",[36,25872,10471],{"class":998},[36,25874,25875],{"class":49},"$HF_USER",[36,25877,25878],{"class":998},"\"\n",[14,25880,25881],{},[2212,25882],{"alt":31,"src":25883},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[21,25885,25887],{"id":25886},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25889,25890],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1886,25892,25893,25896],{},[854,25894,25895],{},"Dataset Repo（用于上传演示数据）",[854,25897,25898],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25900,25901],{},[2212,25902],{"alt":31,"src":25903},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25905,25906],{},[2212,25907],{"alt":31,"src":25908},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25910,25911],{},[2212,25912],{"alt":31,"src":25913},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25915,25916],{},[2212,25917],{"alt":31,"src":25918},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[807,25920,25921],{},"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":46,"depth":46,"links":25923},[25924,25925,25926],{"id":25763,"depth":46,"text":25764},{"id":25828,"depth":46,"text":25829},{"id":25886,"depth":46,"text":25887},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25754,"description":823},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25933,"title":25934,"body":25935,"description":823,"extension":824,"meta":26132,"navigation":193,"path":26133,"seo":26134,"stem":26135,"__hash__":26136},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25936,"toc":26127},[25937,25941,25945,26041,26049,26054,26058,26074,26077,26081,26124],[10,25938,25940],{"id":25939},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[21,25942,25944],{"id":25943},"_61-录制示教数据","6.1 录制示教数据",[26,25946,25948],{"className":24566,"code":25947,"language":24568,"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,25949,25950,25957,25963,25969,25975,25984,25990,25996,26002,26009,26019,26026,26036],{"__ignoreMap":31},[36,25951,25952,25955],{"class":38,"line":39},[36,25953,25954],{"class":2713},"lerobot-record",[36,25956,25423],{"class":60},[36,25958,25959,25961],{"class":38,"line":46},[36,25960,25455],{"class":60},[36,25962,25423],{"class":60},[36,25964,25965,25967],{"class":38,"line":78},[36,25966,25533],{"class":60},[36,25968,25423],{"class":60},[36,25970,25971,25973],{"class":38,"line":125},[36,25972,25593],{"class":60},[36,25974,25423],{"class":60},[36,25976,25977,25979,25982],{"class":38,"line":131},[36,25978,25662],{"class":60},[36,25980,25981],{"class":998},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[36,25983,25423],{"class":60},[36,25985,25986,25988],{"class":38,"line":396},[36,25987,25428],{"class":60},[36,25989,25423],{"class":60},[36,25991,25992,25994],{"class":38,"line":407},[36,25993,25500],{"class":60},[36,25995,25423],{"class":60},[36,25997,25998,26000],{"class":38,"line":2061},[36,25999,25684],{"class":60},[36,26001,25423],{"class":60},[36,26003,26004,26007],{"class":38,"line":2067},[36,26005,26006],{"class":60},"  --display_data=true",[36,26008,25423],{"class":60},[36,26010,26011,26014,26017],{"class":38,"line":2079},[36,26012,26013],{"class":60},"  --dataset.repo_id=",[36,26015,26016],{"class":998},"\"Embodied-AI-6\u002Fso101_test\"",[36,26018,25423],{"class":60},[36,26020,26021,26024],{"class":38,"line":2362},[36,26022,26023],{"class":60},"  --dataset.num_episodes=10",[36,26025,25423],{"class":60},[36,26027,26028,26031,26034],{"class":38,"line":2367},[36,26029,26030],{"class":60},"  --dataset.single_task=",[36,26032,26033],{"class":998},"\"Grab the green cube\"",[36,26035,25423],{"class":60},[36,26037,26038],{"class":38,"line":2373},[36,26039,26040],{"class":60},"  --resume=true\n",[1886,26042,26043],{},[854,26044,26045,26048],{},[33,26046,26047],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,26050,26051],{},[2212,26052],{"alt":31,"src":26053},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[21,26055,26057],{"id":26056},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[26,26059,26061],{"className":24566,"code":26060,"language":24568,"meta":31,"style":31},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[33,26062,26063],{"__ignoreMap":31},[36,26064,26065,26068,26071],{"class":38,"line":39},[36,26066,26067],{"class":2713},"rm",[36,26069,26070],{"class":60}," -rf",[36,26072,26073],{"class":998}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,26075,26076],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[21,26078,26080],{"id":26079},"_63-回放指定-episode","6.3 回放指定 episode",[26,26082,26084],{"className":24566,"code":26083,"language":24568,"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,26085,26086,26093,26099,26105,26111,26119],{"__ignoreMap":31},[36,26087,26088,26091],{"class":38,"line":39},[36,26089,26090],{"class":2713},"lerobot-replay",[36,26092,25423],{"class":60},[36,26094,26095,26097],{"class":38,"line":46},[36,26096,25455],{"class":60},[36,26098,25423],{"class":60},[36,26100,26101,26103],{"class":38,"line":78},[36,26102,25533],{"class":60},[36,26104,25423],{"class":60},[36,26106,26107,26109],{"class":38,"line":125},[36,26108,25593],{"class":60},[36,26110,25423],{"class":60},[36,26112,26113,26115,26117],{"class":38,"line":131},[36,26114,26013],{"class":60},[36,26116,26016],{"class":998},[36,26118,25423],{"class":60},[36,26120,26121],{"class":38,"line":396},[36,26122,26123],{"class":60},"  --dataset.episode=0\n",[807,26125,26126],{},"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":46,"depth":46,"links":26128},[26129,26130,26131],{"id":25943,"depth":46,"text":25944},{"id":26056,"depth":46,"text":26057},{"id":26079,"depth":46,"text":26080},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25934,"description":823},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":26138,"title":26139,"body":26140,"description":823,"extension":824,"meta":26268,"navigation":193,"path":26269,"seo":26270,"stem":26271,"__hash__":26272},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":26141,"toc":26266},[26142,26146,26209,26212,26259,26264],[10,26143,26145],{"id":26144},"_7-act-模型训练","7. ACT 模型训练",[26,26147,26149],{"className":24566,"code":26148,"language":24568,"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,26150,26151,26158,26166,26173,26180,26187,26194,26201],{"__ignoreMap":31},[36,26152,26153,26156],{"class":38,"line":39},[36,26154,26155],{"class":2713},"lerobot-train",[36,26157,25423],{"class":60},[36,26159,26160,26162,26164],{"class":38,"line":46},[36,26161,26013],{"class":60},[36,26163,26016],{"class":998},[36,26165,25423],{"class":60},[36,26167,26168,26171],{"class":38,"line":78},[36,26169,26170],{"class":60},"  --policy.type=act",[36,26172,25423],{"class":60},[36,26174,26175,26178],{"class":38,"line":125},[36,26176,26177],{"class":60},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[36,26179,25423],{"class":60},[36,26181,26182,26185],{"class":38,"line":131},[36,26183,26184],{"class":60},"  --job_name=act_so101_test",[36,26186,25423],{"class":60},[36,26188,26189,26192],{"class":38,"line":396},[36,26190,26191],{"class":60},"  --policy.device=cuda",[36,26193,25423],{"class":60},[36,26195,26196,26199],{"class":38,"line":407},[36,26197,26198],{"class":60},"  --wandb.enable=false",[36,26200,25423],{"class":60},[36,26202,26203,26206],{"class":38,"line":2061},[36,26204,26205],{"class":60},"  --policy.repo_id=",[36,26207,26208],{"class":998},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,26210,26211],{},"参数说明：",[1886,26213,26214,26220,26226,26232,26238,26247,26253],{},[854,26215,26216,26219],{},[33,26217,26218],{},"--dataset.repo_id","：训练数据集仓库。",[854,26221,26222,26225],{},[33,26223,26224],{},"--policy.type=act","：策略模型类型为 ACT。",[854,26227,26228,26231],{},[33,26229,26230],{},"--output_dir","：本地训练输出目录。",[854,26233,26234,26237],{},[33,26235,26236],{},"--job_name","：训练任务名称。",[854,26239,26240,26243,26244,25307],{},[33,26241,26242],{},"--policy.device","：训练设备（如 ",[33,26245,26246],{},"cuda",[854,26248,26249,26252],{},[33,26250,26251],{},"--wandb.enable","：是否启用 WandB 可视化。",[854,26254,26255,26258],{},[33,26256,26257],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,26260,26261],{},[2212,26262],{"alt":31,"src":26263},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[807,26265,26126],{},{"title":31,"searchDepth":46,"depth":46,"links":26267},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":26139,"description":823},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":26274,"title":26275,"body":26276,"description":823,"extension":824,"meta":26363,"navigation":193,"path":26364,"seo":26365,"stem":26366,"__hash__":26367},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":26277,"toc":26361},[26278,26281,26284,26351,26359],[10,26279,26275],{"id":26280},"_8-策略部署与自动采集",[14,26282,26283],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[26,26285,26287],{"className":24566,"code":26286,"language":24568,"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,26288,26289,26295,26301,26307,26315,26321,26328,26336,26344],{"__ignoreMap":31},[36,26290,26291,26293],{"class":38,"line":39},[36,26292,25954],{"class":2713},[36,26294,25423],{"class":60},[36,26296,26297,26299],{"class":38,"line":46},[36,26298,25455],{"class":60},[36,26300,25423],{"class":60},[36,26302,26303,26305],{"class":38,"line":78},[36,26304,25533],{"class":60},[36,26306,25423],{"class":60},[36,26308,26309,26311,26313],{"class":38,"line":125},[36,26310,25662],{"class":60},[36,26312,25981],{"class":998},[36,26314,25423],{"class":60},[36,26316,26317,26319],{"class":38,"line":131},[36,26318,25593],{"class":60},[36,26320,25423],{"class":60},[36,26322,26323,26326],{"class":38,"line":396},[36,26324,26325],{"class":60},"  --display_data=false",[36,26327,25423],{"class":60},[36,26329,26330,26332,26334],{"class":38,"line":407},[36,26331,26013],{"class":60},[36,26333,26016],{"class":998},[36,26335,25423],{"class":60},[36,26337,26338,26340,26342],{"class":38,"line":2061},[36,26339,26030],{"class":60},[36,26341,26033],{"class":998},[36,26343,25423],{"class":60},[36,26345,26346,26349],{"class":38,"line":2067},[36,26347,26348],{"class":60},"  --policy.path=",[36,26350,26208],{"class":998},[1886,26352,26353],{},[854,26354,26355,26358],{},[33,26356,26357],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[807,26360,26126],{},{"title":31,"searchDepth":46,"depth":46,"links":26362},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":26275,"description":823},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26369,"title":26370,"body":26371,"description":823,"extension":824,"meta":26400,"navigation":193,"path":26401,"seo":26402,"stem":26403,"__hash__":26404},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26372,"toc":26398},[26373,26377,26380,26386,26389,26395],[10,26374,26376],{"id":26375},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,26378,26379],{},"项目地址：",[14,26381,26382],{},[50,26383,26384],{"href":26384,"rel":26385},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24609],[14,26387,26388],{},"参考教程：",[14,26390,26391],{},[50,26392,26393],{"href":26393,"rel":26394},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24609],[14,26396,26397],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":31,"searchDepth":46,"depth":46,"links":26399},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26370,"description":823},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26406,"title":26407,"body":26408,"description":26412,"extension":824,"meta":26413,"navigation":193,"path":26414,"seo":26415,"stem":26416,"__hash__":26417},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26409,"toc":26410},[],{"title":31,"searchDepth":46,"depth":46,"links":26411},[],"act复现",{"category":24122},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26407,"description":26412},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26419,"title":26420,"body":26421,"description":31,"extension":824,"meta":26723,"navigation":193,"path":26724,"seo":26725,"stem":26726,"__hash__":26727},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26422,"toc":26715},[26423,26426,26430,26440,26447,26454,26457,26464,26467,26470,26474,26486,26490,26536,26539,26542,26545,26548,26551,26555,26593,26599,26603,26657,26662,26665,26668,26673,26676,26681,26684,26687,26691,26694,26697,26701],[10,26424,26420],{"id":26425},"_1简介",[868,26427,26429],{"id":26428},"_11什么是-docker","1.1什么是 Docker？",[14,26431,26432,26433,26436,26437],{},"Docker 是一个开源的 ",[1043,26434,26435],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[1043,26438,26439],{},"一次构建，到处运行。",[14,26441,26442,26443,26446],{},"“ ",[1043,26444,26445],{},"一次构建，到处运行"," ”也就是说：",[851,26448,26449],{},[854,26450,26451],{},[1043,26452,26453],{},"之前：",[14,26455,26456],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[851,26458,26459],{},[854,26460,26461],{},[1043,26462,26463],{},"使用docker后：",[14,26465,26466],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,26468,26469],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[868,26471,26473],{"id":26472},"_12它是怎么工作的","1.2.它是怎么工作的？",[1886,26475,26476,26479],{},[854,26477,26478],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[854,26480,26481,26482,26485],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[1043,26483,26484],{},"无论在哪运行都一样稳定"," 。",[868,26487,26489],{"id":26488},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[1031,26491,26492,26502],{},[1034,26493,26494],{},[1037,26495,26496,26499],{},[1040,26497,26498],{"align":24480},"概念",[1040,26500,26501],{"align":24480},"解释",[1078,26503,26504,26512,26520,26528],{},[1037,26505,26506,26509],{},[1083,26507,26508],{"align":24480},"镜像",[1083,26510,26511],{"align":24480},"Image，运行容器的模板，像是一个应用快照",[1037,26513,26514,26517],{},[1083,26515,26516],{"align":24480},"容器",[1083,26518,26519],{"align":24480},"Container，运行中的镜像实例，有自己的文件系统、网络等",[1037,26521,26522,26525],{},[1083,26523,26524],{"align":24480},"Dockerfile",[1083,26526,26527],{"align":24480},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[1037,26529,26530,26533],{},[1083,26531,26532],{"align":24480},"仓库",[1083,26534,26535],{"align":24480},"Registry，存放镜像的地方，比如 Docker Hub",[14,26537,26538],{},"抽象化理解:",[14,26540,26541],{},"Docker镜像≈C++类",[14,26543,26544],{},"Docker容器≈C++类实例(即对象)",[14,26546,26547],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,26549,26550],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[868,26552,26554],{"id":26553},"_14类比理解","1.4.类比理解",[1031,26556,26557,26567],{},[1034,26558,26559],{},[1037,26560,26561,26564],{},[1040,26562,26563],{"align":24480},"传统部署",[1040,26565,26566],{"align":24480},"Docker部署",[1078,26568,26569,26577,26585],{},[1037,26570,26571,26574],{},[1083,26572,26573],{"align":24480},"手动安装依赖、调试版本不一致问题",[1083,26575,26576],{"align":24480},"一次打包环境和代码",[1037,26578,26579,26582],{},[1083,26580,26581],{"align":24480},"程序“裸奔”跑在系统上",[1083,26583,26584],{"align":24480},"程序“穿着容器”隔离运行",[1037,26586,26587,26590],{},[1083,26588,26589],{"align":24480},"容易“在我电脑上能跑”",[1083,26591,26592],{"align":24480},"保证“无论在哪都能跑”",[14,26594,26595,26596],{},"就像快递包裹： ",[1043,26597,26598],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[868,26600,26602],{"id":26601},"_15docker-的核心优势","1.5.Docker 的核心优势",[1031,26604,26605,26615],{},[1034,26606,26607],{},[1037,26608,26609,26612],{},[1040,26610,26611],{"align":24480},"优势",[1040,26613,26614],{"align":24480},"说明",[1078,26616,26617,26625,26633,26641,26649],{},[1037,26618,26619,26622],{},[1083,26620,26621],{"align":24480},"轻量级",[1083,26623,26624],{"align":24480},"基于系统内核共享，启动速度快，占资源少",[1037,26626,26627,26630],{},[1083,26628,26629],{"align":24480},"跨平台",[1083,26631,26632],{"align":24480},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[1037,26634,26635,26638],{},[1083,26636,26637],{"align":24480},"易于迁移部署",[1083,26639,26640],{"align":24480},"应用和环境一起封装，不怕依赖不一致",[1037,26642,26643,26646],{},[1083,26644,26645],{"align":24480},"易于版本控制",[1083,26647,26648],{"align":24480},"镜像版本可控，支持回滚",[1037,26650,26651,26654],{},[1083,26652,26653],{"align":24480},"生态丰富",[1083,26655,26656],{"align":24480},"Docker Hub 上有成千上万的现成镜像可用",[851,26658,26659],{},[854,26660,26661],{},"在Linux上可以几乎实现无性能损失。",[14,26663,26664],{},"docker里的发行版和本机共用Linux内核。",[14,26666,26667],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[851,26669,26670],{},[854,26671,26672],{},"可以快速部署在绝大多数Linux发行版",[14,26674,26675],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[851,26677,26678],{},[854,26679,26680],{},"配置环境简单",[14,26682,26683],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,26685,26686],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[851,26688,26689],{},[854,26690,26653],{},[14,26692,26693],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,26695,26696],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[868,26698,26700],{"id":26699},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1886,26702,26703,26706,26709,26712],{},[854,26704,26705],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[854,26707,26708],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[854,26710,26711],{},"微服务架构：每个服务一个容器，灵活组合",[854,26713,26714],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":31,"searchDepth":46,"depth":46,"links":26716},[26717,26718,26719,26720,26721,26722],{"id":26428,"depth":78,"text":26429},{"id":26472,"depth":78,"text":26473},{"id":26488,"depth":78,"text":26489},{"id":26553,"depth":78,"text":26554},{"id":26601,"depth":78,"text":26602},{"id":26699,"depth":78,"text":26700},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26420,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26729,"title":26730,"body":26731,"description":31,"extension":824,"meta":27464,"navigation":193,"path":27465,"seo":27466,"stem":27467,"__hash__":27468},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26732,"toc":27459},[26733,26736,26740,26743,26746,26752,26758,26762,26771,26774,26831,26834,26885,26888,26971,26974,27011,27015,27026,27039,27046,27049,27129,27132,27182,27185,27208,27212,27219,27222,27238,27244,27247,27263,27269,27272,27288,27302,27308,27328,27334,27337,27349,27355,27358,27372,27378,27381,27401,27406,27409,27412,27416,27419,27422,27425,27432,27435,27438,27441,27446,27451,27456],[10,26734,26730],{"id":26735},"_2安装docker",[868,26737,26739],{"id":26738},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,26741,26742],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,26744,26745],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,26747,26748],{},[50,26749,26750],{"href":26750,"rel":26751},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24609],[14,26753,26754],{},[50,26755,26756],{"href":26756,"rel":26757},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24609],[22742,26759,26761],{"id":26760},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,26763,26764,26765,26770],{},"以下内容根据 ",[50,26766,26769],{"href":26767,"rel":26768},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24609],"官方文档"," 修改而来。",[14,26772,26773],{},"如果你过去安装过 docker，先删掉：",[26,26775,26777],{"className":24566,"code":26776,"language":24568,"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,26778,26779],{"__ignoreMap":31},[36,26780,26781,26783,26786,26789,26792,26795,26798,26801,26804,26807,26810,26813,26816,26819,26822,26825,26828],{"class":38,"line":39},[36,26782,3774],{"class":53},[36,26784,26785],{"class":49}," pkg ",[36,26787,26788],{"class":53},"in",[36,26790,26791],{"class":998}," docker.io",[36,26793,26794],{"class":998}," docker-doc",[36,26796,26797],{"class":998}," docker-compose",[36,26799,26800],{"class":998}," docker-compose-v2",[36,26802,26803],{"class":998}," podman-docker",[36,26805,26806],{"class":998}," containerd",[36,26808,26809],{"class":998}," runc",[36,26811,26812],{"class":49},"; ",[36,26814,26815],{"class":53},"do",[36,26817,26818],{"class":2713}," sudo",[36,26820,26821],{"class":998}," apt-get",[36,26823,26824],{"class":998}," remove",[36,26826,26827],{"class":49}," $pkg; ",[36,26829,26830],{"class":53},"done\n",[14,26832,26833],{},"首先安装依赖和GPG：",[26,26835,26839],{"className":26836,"code":26837,"language":26838,"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,26840,26841,26846,26851,26856,26861,26866,26871,26875,26880],{"__ignoreMap":31},[36,26842,26843],{"class":38,"line":39},[36,26844,26845],{},"# Add Docker's official GPG key:\n",[36,26847,26848],{"class":38,"line":46},[36,26849,26850],{},"sudo apt-get update\n",[36,26852,26853],{"class":38,"line":78},[36,26854,26855],{},"sudo apt-get install ca-certificates curl\n",[36,26857,26858],{"class":38,"line":125},[36,26859,26860],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[36,26862,26863],{"class":38,"line":131},[36,26864,26865],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[36,26867,26868],{"class":38,"line":396},[36,26869,26870],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[36,26872,26873],{"class":38,"line":407},[36,26874,194],{"emptyLinePlaceholder":193},[36,26876,26877],{"class":38,"line":2061},[36,26878,26879],{},"# 如果上面这行报错就弄下面这行\n",[36,26881,26882],{"class":38,"line":2067},[36,26883,26884],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26886,26887],{},"信任 Docker 的 GPG 公钥并添加仓库：",[26,26889,26891],{"className":24566,"code":26890,"language":24568,"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,26892,26893,26898,26904,26921,26954],{"__ignoreMap":31},[36,26894,26895],{"class":38,"line":39},[36,26896,26897],{"class":42},"# Add the repository to Apt sources:\n",[36,26899,26900,26902],{"class":38,"line":46},[36,26901,25870],{"class":60},[36,26903,25423],{"class":60},[36,26905,26906,26909,26912,26915,26918],{"class":38,"line":78},[36,26907,26908],{"class":998},"  \"deb [arch=$(",[36,26910,26911],{"class":2713},"dpkg",[36,26913,26914],{"class":60}," --print-architecture",[36,26916,26917],{"class":998},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[36,26919,26920],{"class":60},"\\\n",[36,26922,26923,26926,26928,26930,26933,26936,26938,26940,26943,26945,26947,26950,26952],{"class":38,"line":125},[36,26924,26925],{"class":998},"  \"",[36,26927,25844],{"class":49},[36,26929,1440],{"class":60},[36,26931,26932],{"class":998}," \u002Fetc\u002Fos-release",[36,26934,26935],{"class":49}," && ",[36,26937,25870],{"class":60},[36,26939,10471],{"class":998},[36,26941,26942],{"class":49},"$VERSION_CODENAME",[36,26944,1141],{"class":998},[36,26946,1314],{"class":49},[36,26948,26949],{"class":998},"\" stable\"",[36,26951,25854],{"class":53},[36,26953,25423],{"class":60},[36,26955,26956,26959,26962,26965,26968],{"class":38,"line":131},[36,26957,26958],{"class":2713},"  sudo",[36,26960,26961],{"class":998}," tee",[36,26963,26964],{"class":998}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[36,26966,26967],{"class":53}," >",[36,26969,26970],{"class":998}," \u002Fdev\u002Fnull\n",[14,26972,26973],{},"最后安装",[26,26975,26977],{"className":24566,"code":26976,"language":24568,"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,26978,26979,26988],{"__ignoreMap":31},[36,26980,26981,26983,26985],{"class":38,"line":39},[36,26982,25321],{"class":2713},[36,26984,26821],{"class":998},[36,26986,26987],{"class":998}," update\n",[36,26989,26990,26992,26994,26996,26999,27002,27005,27008],{"class":38,"line":46},[36,26991,25321],{"class":2713},[36,26993,26821],{"class":998},[36,26995,24578],{"class":998},[36,26997,26998],{"class":998}," docker-ce",[36,27000,27001],{"class":998}," docker-ce-cli",[36,27003,27004],{"class":998}," containerd.io",[36,27006,27007],{"class":998}," docker-buildx-plugin",[36,27009,27010],{"class":998}," docker-compose-plugin\n",[22742,27012,27014],{"id":27013},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,27016,27017,27018,27021,27022,27025],{},"查看自己自己包管理工具版本（dnf是 ",[1043,27019,27020],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[1043,27023,27024],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[26,27027,27029],{"className":24566,"code":27028,"language":24568,"meta":31,"style":31},"dnf --version\n",[33,27030,27031],{"__ignoreMap":31},[36,27032,27033,27036],{"class":38,"line":39},[36,27034,27035],{"class":2713},"dnf",[36,27037,27038],{"class":60}," --version\n",[14,27040,26764,27041,27045],{},[50,27042,26769],{"href":27043,"rel":27044},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24609]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,27047,27048],{},"如果你之前安装过 docker，请先删掉",[26,27050,27052],{"className":24566,"code":27051,"language":24568,"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,27053,27054,27068,27075,27082,27089,27096,27103,27110,27117,27124],{"__ignoreMap":31},[36,27055,27056,27058,27061,27063,27066],{"class":38,"line":39},[36,27057,25321],{"class":2713},[36,27059,27060],{"class":998}," dnf",[36,27062,26824],{"class":998},[36,27064,27065],{"class":998}," docker",[36,27067,25423],{"class":60},[36,27069,27070,27073],{"class":38,"line":46},[36,27071,27072],{"class":998},"                  docker-client",[36,27074,25423],{"class":60},[36,27076,27077,27080],{"class":38,"line":78},[36,27078,27079],{"class":998},"                  docker-client-latest",[36,27081,25423],{"class":60},[36,27083,27084,27087],{"class":38,"line":125},[36,27085,27086],{"class":998},"                  docker-common",[36,27088,25423],{"class":60},[36,27090,27091,27094],{"class":38,"line":131},[36,27092,27093],{"class":998},"                  docker-latest",[36,27095,25423],{"class":60},[36,27097,27098,27101],{"class":38,"line":396},[36,27099,27100],{"class":998},"                  docker-latest-logrotate",[36,27102,25423],{"class":60},[36,27104,27105,27108],{"class":38,"line":407},[36,27106,27107],{"class":998},"                  docker-logrotate",[36,27109,25423],{"class":60},[36,27111,27112,27115],{"class":38,"line":2061},[36,27113,27114],{"class":998},"                  docker-selinux",[36,27116,25423],{"class":60},[36,27118,27119,27122],{"class":38,"line":2067},[36,27120,27121],{"class":998},"                  docker-engine-selinux",[36,27123,25423],{"class":60},[36,27125,27126],{"class":38,"line":2079},[36,27127,27128],{"class":998},"                  docker-engine\n",[14,27130,27131],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[26,27133,27135],{"className":24566,"code":27134,"language":24568,"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,27136,27137,27151,27166],{"__ignoreMap":31},[36,27138,27139,27141,27143,27146,27148],{"class":38,"line":39},[36,27140,25321],{"class":2713},[36,27142,27060],{"class":998},[36,27144,27145],{"class":60}," -y",[36,27147,24578],{"class":998},[36,27149,27150],{"class":998}," dnf-plugins-core\n",[36,27152,27153,27155,27157,27160,27163],{"class":38,"line":46},[36,27154,25321],{"class":2713},[36,27156,27060],{"class":998},[36,27158,27159],{"class":998}," config-manager",[36,27161,27162],{"class":998}," addrepo",[36,27164,27165],{"class":60}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[36,27167,27168,27170,27173,27176,27179],{"class":38,"line":78},[36,27169,25321],{"class":2713},[36,27171,27172],{"class":998}," sed",[36,27174,27175],{"class":60}," -i",[36,27177,27178],{"class":998}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[36,27180,27181],{"class":998}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,27183,27184],{},"最后安装：",[26,27186,27188],{"className":24566,"code":27187,"language":24568,"meta":31,"style":31},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[33,27189,27190],{"__ignoreMap":31},[36,27191,27192,27194,27196,27198,27200,27202,27204,27206],{"class":38,"line":39},[36,27193,25321],{"class":2713},[36,27195,27060],{"class":998},[36,27197,24578],{"class":998},[36,27199,26998],{"class":998},[36,27201,27001],{"class":998},[36,27203,27004],{"class":998},[36,27205,27007],{"class":998},[36,27207,27010],{"class":998},[868,27209,27211],{"id":27210},"_22配置环境","2.2.配置环境",[22742,27213,27215,27218],{"id":27214},"_221检查-docker-服务状态",[1043,27216,27217],{},"2.2.1.检查 Docker 服务状态"," ：",[14,27220,27221],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[26,27223,27225],{"className":24566,"code":27224,"language":24568,"meta":31,"style":31},"systemctl status docker\n",[33,27226,27227],{"__ignoreMap":31},[36,27228,27229,27232,27235],{"class":38,"line":39},[36,27230,27231],{"class":2713},"systemctl",[36,27233,27234],{"class":998}," status",[36,27236,27237],{"class":998}," docker\n",[22742,27239,27241,27218],{"id":27240},"_222启动-docker-服务",[1043,27242,27243],{},"2.2.2.启动 Docker 服务",[14,27245,27246],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[26,27248,27250],{"className":24566,"code":27249,"language":24568,"meta":31,"style":31},"sudo systemctl start docker\n",[33,27251,27252],{"__ignoreMap":31},[36,27253,27254,27256,27259,27261],{"class":38,"line":39},[36,27255,25321],{"class":2713},[36,27257,27258],{"class":998}," systemctl",[36,27260,4933],{"class":998},[36,27262,27237],{"class":998},[22742,27264,27266,27218],{"id":27265},"_223设置-docker-开机自启",[1043,27267,27268],{},"2.2.3.设置 Docker 开机自启",[14,27270,27271],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[26,27273,27275],{"className":24566,"code":27274,"language":24568,"meta":31,"style":31},"sudo systemctl enable docker\n",[33,27276,27277],{"__ignoreMap":31},[36,27278,27279,27281,27283,27286],{"class":38,"line":39},[36,27280,25321],{"class":2713},[36,27282,27258],{"class":998},[36,27284,27285],{"class":998}," enable",[36,27287,27237],{"class":998},[22742,27289,27291,14539,27294,14539,27299,27218],{"id":27290},"_224将用户添加到-docker-组",[1043,27292,27293],{},"2.2.4.将用户添加到",[1043,27295,27296],{},[33,27297,27298],{},"docker",[1043,27300,27301],{},"组",[14,27303,27304,27305,27307],{},"使用以下命令将当前用户添加到 ",[33,27306,27298],{}," 组：",[26,27309,27311],{"className":24566,"code":27310,"language":24568,"meta":31,"style":31},"sudo usermod -aG docker $USER\n",[33,27312,27313],{"__ignoreMap":31},[36,27314,27315,27317,27320,27323,27325],{"class":38,"line":39},[36,27316,25321],{"class":2713},[36,27318,27319],{"class":998}," usermod",[36,27321,27322],{"class":60}," -aG",[36,27324,27065],{"class":998},[36,27326,27327],{"class":49}," $USER\n",[22742,27329,27331,27218],{"id":27330},"_225退出并重新登录",[1043,27332,27333],{},"2.2.5.退出并重新登录",[14,27335,27336],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[26,27338,27340],{"className":24566,"code":27339,"language":24568,"meta":31,"style":31},"newgrp docker\n",[33,27341,27342],{"__ignoreMap":31},[36,27343,27344,27347],{"class":38,"line":39},[36,27345,27346],{"class":2713},"newgrp",[36,27348,27237],{"class":998},[22742,27350,27352,27218],{"id":27351},"_226重新启动-docker-服务如果需要",[1043,27353,27354],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,27356,27357],{},"确保 Docker 服务正在运行，可以使用以下命令：",[26,27359,27360],{"className":24566,"code":27249,"language":24568,"meta":31,"style":31},[33,27361,27362],{"__ignoreMap":31},[36,27363,27364,27366,27368,27370],{"class":38,"line":39},[36,27365,25321],{"class":2713},[36,27367,27258],{"class":998},[36,27369,4933],{"class":998},[36,27371,27237],{"class":998},[22742,27373,27375,27218],{"id":27374},"_227重启电脑后检查-docker-服务状态",[1043,27376,27377],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,27379,27380],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[26,27382,27384],{"className":24566,"code":27383,"language":24568,"meta":31,"style":31},"sudo reboot\nsystemctl status docker\n",[33,27385,27386,27393],{"__ignoreMap":31},[36,27387,27388,27390],{"class":38,"line":39},[36,27389,25321],{"class":2713},[36,27391,27392],{"class":998}," reboot\n",[36,27394,27395,27397,27399],{"class":38,"line":46},[36,27396,27231],{"class":2713},[36,27398,27234],{"class":998},[36,27400,27237],{"class":998},[14,27402,27403],{},[2212,27404],{"alt":31,"src":27405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,27407,27408],{},"第三行显示enabled说明开机自启动成功",[14,27410,27411],{},"按q退出",[868,27413,27415],{"id":27414},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,27417,27418],{},"优先使用linux来使用docker是比较好的",[14,27420,27421],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,27423,27424],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,27426,27427,27428],{},"官方下载安装:",[50,27429,27430],{"href":27430,"rel":27431},"https:\u002F\u002Fwww.docker.com\u002F",[24609],[14,27433,27434],{},"Windows的Docker显卡直通与USB直通:",[14,27436,27437],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,27439,27440],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,27442,27443],{},[2212,27444],{"alt":31,"src":27445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,27447,27448],{},[2212,27449],{"alt":31,"src":27450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,27452,27453],{},[2212,27454],{"alt":31,"src":27455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[807,27457,27458],{},"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":46,"depth":46,"links":27460},[27461,27462,27463],{"id":26738,"depth":78,"text":26739},{"id":27210,"depth":78,"text":27211},{"id":27414,"depth":78,"text":27415},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26730,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27470,"title":27471,"body":27472,"description":27479,"extension":824,"meta":28172,"navigation":193,"path":28173,"seo":28174,"stem":28175,"__hash__":28176},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27473,"toc":28166},[27474,27477,27480,27484,27489,27494,27497,27525,27530,27539,27542,27547,27551,27558,27563,27569,27573,27576,27580,27585,27677,27682,27700,27705,27726,27731,27747,27751,27756,27785,27790,27836,27841,27885,27893,27910,27915,27931,27936,27950,27953,27956,27959,27962,27991,27994,27999,28003,28006,28009,28015,28018,28021,28024,28086,28093,28098,28101,28119,28123,28126,28143,28146,28149,28163],[10,27475,27471],{"id":27476},"_3docker直通",[14,27478,27479],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[868,27481,27483],{"id":27482},"_31usb直通","3.1.USB直通",[14,27485,27486],{},[2212,27487],{"alt":31,"src":27488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[851,27490,27491],{},[854,27492,27493],{},"方法一(不是很推荐新手)：",[14,27495,27496],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[26,27498,27500],{"className":24566,"code":27499,"language":24568,"meta":31,"style":31},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[33,27501,27502,27510,27515],{"__ignoreMap":31},[36,27503,27504,27507],{"class":38,"line":39},[36,27505,27506],{"class":2713},"ls",[36,27508,27509],{"class":998}," \u002Fdev\n",[36,27511,27512],{"class":38,"line":46},[36,27513,27514],{"class":42},"#例如\n",[36,27516,27517,27520,27522],{"class":38,"line":78},[36,27518,27519],{"class":49},"--device",[36,27521,54],{"class":53},[36,27523,27524],{"class":998},"\u002Fdev\u002Ftty_USB0\n",[851,27526,27527],{"start":46},[854,27528,27529],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[26,27531,27533],{"className":24566,"code":27532,"language":24568,"meta":31,"style":31},"--privileged\n",[33,27534,27535],{"__ignoreMap":31},[36,27536,27537],{"class":38,"line":39},[36,27538,27532],{"class":2713},[14,27540,27541],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,27543,27544],{},[2212,27545],{"alt":31,"src":27546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[868,27548,27550],{"id":27549},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,27552,27553,27554,27557],{},"NVIDIA Container Toolkit使用户 ",[1043,27555,27556],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,27559,27560],{},[2212,27561],{"alt":31,"src":27562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,27564,27565],{},[50,27566,27567],{"href":27567,"rel":27568},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24609],[22742,27570,27572],{"id":27571},"_321安装","3.2.1.安装",[14,27574,27575],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23654,27577,27579],{"id":27578},"_3211ubuntu","3.2.1.1.Ubuntu",[851,27581,27582],{},[854,27583,27584],{},"配置存储库 并更新",[26,27586,27588],{"className":24566,"code":27587,"language":24568,"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,27589,27590,27619,27639,27651,27663,27669],{"__ignoreMap":31},[36,27591,27592,27595,27598,27601,27603,27605,27608,27611,27614,27617],{"class":38,"line":39},[36,27593,27594],{"class":2713},"curl",[36,27596,27597],{"class":60}," -fsSL",[36,27599,27600],{"class":998}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[36,27602,25854],{"class":53},[36,27604,26818],{"class":2713},[36,27606,27607],{"class":998}," gpg",[36,27609,27610],{"class":60}," --dearmor",[36,27612,27613],{"class":60}," -o",[36,27615,27616],{"class":998}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[36,27618,25423],{"class":60},[36,27620,27621,27624,27626,27629,27632,27635,27637],{"class":38,"line":46},[36,27622,27623],{"class":49},"  && ",[36,27625,27594],{"class":2713},[36,27627,27628],{"class":60}," -s",[36,27630,27631],{"class":60}," -L",[36,27633,27634],{"class":998}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[36,27636,25854],{"class":53},[36,27638,25423],{"class":60},[36,27640,27641,27644,27647,27649],{"class":38,"line":78},[36,27642,27643],{"class":2713},"    sed",[36,27645,27646],{"class":998}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[36,27648,25854],{"class":53},[36,27650,25423],{"class":60},[36,27652,27653,27656,27658,27661],{"class":38,"line":125},[36,27654,27655],{"class":2713},"    sudo",[36,27657,26961],{"class":998},[36,27659,27660],{"class":998}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[36,27662,25423],{"class":60},[36,27664,27665,27667],{"class":38,"line":131},[36,27666,27623],{"class":49},[36,27668,26920],{"class":60},[36,27670,27671,27673,27675],{"class":38,"line":396},[36,27672,27655],{"class":2713},[36,27674,26821],{"class":998},[36,27676,26987],{"class":998},[851,27678,27679],{"start":46},[854,27680,27681],{},"安装nvidia-docker2",[26,27683,27685],{"className":24566,"code":27684,"language":24568,"meta":31,"style":31},"sudo apt-get install -y nvidia-docker2\n",[33,27686,27687],{"__ignoreMap":31},[36,27688,27689,27691,27693,27695,27697],{"class":38,"line":39},[36,27690,25321],{"class":2713},[36,27692,26821],{"class":998},[36,27694,24578],{"class":998},[36,27696,27145],{"class":60},[36,27698,27699],{"class":998}," nvidia-docker2\n",[851,27701,27702],{"start":78},[854,27703,27704],{},"使用nvidia-ctk命令配置container runtime",[26,27706,27708],{"className":24566,"code":27707,"language":24568,"meta":31,"style":31},"sudo nvidia-ctk runtime configure --runtime=docker\n",[33,27709,27710],{"__ignoreMap":31},[36,27711,27712,27714,27717,27720,27723],{"class":38,"line":39},[36,27713,25321],{"class":2713},[36,27715,27716],{"class":998}," nvidia-ctk",[36,27718,27719],{"class":998}," runtime",[36,27721,27722],{"class":998}," configure",[36,27724,27725],{"class":60}," --runtime=docker\n",[851,27727,27728],{"start":125},[854,27729,27730],{},"重启docker服务:",[26,27732,27734],{"className":24566,"code":27733,"language":24568,"meta":31,"style":31},"sudo systemctl restart docker\n",[33,27735,27736],{"__ignoreMap":31},[36,27737,27738,27740,27742,27745],{"class":38,"line":39},[36,27739,25321],{"class":2713},[36,27741,27258],{"class":998},[36,27743,27744],{"class":998}," restart",[36,27746,27237],{"class":998},[23654,27748,27750],{"id":27749},"_3212fedora","3.2.1.2.Fedora",[851,27752,27753],{},[854,27754,27755],{},"配置存储库",[26,27757,27759],{"className":24566,"code":27758,"language":24568,"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,27760,27761,27776],{"__ignoreMap":31},[36,27762,27763,27765,27767,27769,27772,27774],{"class":38,"line":39},[36,27764,27594],{"class":2713},[36,27766,27628],{"class":60},[36,27768,27631],{"class":60},[36,27770,27771],{"class":998}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[36,27773,25854],{"class":53},[36,27775,25423],{"class":60},[36,27777,27778,27780,27782],{"class":38,"line":46},[36,27779,25321],{"class":2713},[36,27781,26961],{"class":998},[36,27783,27784],{"class":998}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[851,27786,27787],{"start":46},[854,27788,27789],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[26,27791,27793],{"className":24566,"code":27792,"language":24568,"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,27794,27795,27800,27814,27818,27823],{"__ignoreMap":31},[36,27796,27797],{"class":38,"line":39},[36,27798,27799],{"class":42},"# 如果是RHEL或者Rocky（DNF4）\n",[36,27801,27802,27804,27806,27808,27811],{"class":38,"line":46},[36,27803,25321],{"class":2713},[36,27805,27060],{"class":998},[36,27807,27159],{"class":998},[36,27809,27810],{"class":60}," --add-repo",[36,27812,27813],{"class":998}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[36,27815,27816],{"class":38,"line":78},[36,27817,194],{"emptyLinePlaceholder":193},[36,27819,27820],{"class":38,"line":125},[36,27821,27822],{"class":42},"# 如果是Feodra41+（DNF5）\n",[36,27824,27825,27827,27829,27831,27833],{"class":38,"line":131},[36,27826,25321],{"class":2713},[36,27828,27060],{"class":998},[36,27830,27159],{"class":998},[36,27832,27162],{"class":998},[36,27834,27835],{"class":60}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[851,27837,27838],{"start":78},[854,27839,27840],{},"安装NVIDIA Container Toolki包",[26,27842,27844],{"className":24566,"code":27843,"language":24568,"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,27845,27846,27851,27864,27868,27873],{"__ignoreMap":31},[36,27847,27848],{"class":38,"line":39},[36,27849,27850],{"class":42},"# 如果是RHEL或者Rocky\n",[36,27852,27853,27855,27857,27859,27861],{"class":38,"line":46},[36,27854,25321],{"class":2713},[36,27856,27060],{"class":998},[36,27858,24578],{"class":998},[36,27860,27145],{"class":60},[36,27862,27863],{"class":998}," nvidia-container-toolkit\n",[36,27865,27866],{"class":38,"line":78},[36,27867,194],{"emptyLinePlaceholder":193},[36,27869,27870],{"class":38,"line":125},[36,27871,27872],{"class":42},"# 如果是Fedora\n",[36,27874,27875,27877,27879,27881,27883],{"class":38,"line":131},[36,27876,25321],{"class":2713},[36,27878,27060],{"class":998},[36,27880,24578],{"class":998},[36,27882,27145],{"class":60},[36,27884,27863],{"class":998},[851,27886,27887],{"start":125},[854,27888,27889,27890,27892],{},"安装nvidia-docker2 ： 在Fedora上使用",[33,27891,27035],{},"进行安装",[26,27894,27896],{"className":24566,"code":27895,"language":24568,"meta":31,"style":31},"sudo dnf install -y nvidia-docker2\n",[33,27897,27898],{"__ignoreMap":31},[36,27899,27900,27902,27904,27906,27908],{"class":38,"line":39},[36,27901,25321],{"class":2713},[36,27903,27060],{"class":998},[36,27905,24578],{"class":998},[36,27907,27145],{"class":60},[36,27909,27699],{"class":998},[851,27911,27912],{"start":131},[854,27913,27914],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[26,27916,27917],{"className":24566,"code":27707,"language":24568,"meta":31,"style":31},[33,27918,27919],{"__ignoreMap":31},[36,27920,27921,27923,27925,27927,27929],{"class":38,"line":39},[36,27922,25321],{"class":2713},[36,27924,27716],{"class":998},[36,27926,27719],{"class":998},[36,27928,27722],{"class":998},[36,27930,27725],{"class":60},[851,27932,27933],{"start":396},[854,27934,27935],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[26,27937,27938],{"className":24566,"code":27733,"language":24568,"meta":31,"style":31},[33,27939,27940],{"__ignoreMap":31},[36,27941,27942,27944,27946,27948],{"class":38,"line":39},[36,27943,25321],{"class":2713},[36,27945,27258],{"class":998},[36,27947,27744],{"class":998},[36,27949,27237],{"class":998},[14,27951,27952],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,27954,27955],{},"方法：",[14,27957,27958],{},"1️⃣nvidia-smi",[14,27960,27961],{},"2️⃣运行nvidia cuda 容器进行测试",[26,27963,27965],{"className":24566,"code":27964,"language":24568,"meta":31,"style":31},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[33,27966,27967],{"__ignoreMap":31},[36,27968,27969,27971,27973,27976,27979,27982,27985,27988],{"class":38,"line":39},[36,27970,25321],{"class":2713},[36,27972,27065],{"class":998},[36,27974,27975],{"class":998}," run",[36,27977,27978],{"class":60}," --rm",[36,27980,27981],{"class":60}," --gpus",[36,27983,27984],{"class":998}," all",[36,27986,27987],{"class":998}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[36,27989,27990],{"class":998}," nvidia-smi\n",[14,27992,27993],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,27995,27996],{},[2212,27997],{"alt":31,"src":27998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[868,28000,28002],{"id":28001},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,28004,28005],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,28007,28008],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,28010,28011],{},[50,28012,28013],{"href":28013,"rel":28014},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24609],[14,28016,28017],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,28019,28020],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,28022,28023],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[1031,28025,28026,28042],{},[1034,28027,28028],{},[1037,28029,28030,28033,28036,28039],{},[1040,28031,28032],{"align":24480},"镜像类型",[1040,28034,28035],{"align":24480},"适用场景",[1040,28037,28038],{"align":24480},"示例标签",[1040,28040,28041],{"align":24480},"大小",[1078,28043,28044,28058,28072],{},[1037,28045,28046,28049,28052,28055],{},[1083,28047,28048],{"align":24480},"base",[1083,28050,28051],{"align":24480},"仅需 CUDA 运行时库",[1083,28053,28054],{"align":24480},"12.4.0-base-ubuntu22.04",[1083,28056,28057],{"align":24480},"~240MB",[1037,28059,28060,28063,28066,28069],{},[1083,28061,28062],{"align":24480},"runtime",[1083,28064,28065],{"align":24480},"部署编译后的应用（含数学库）",[1083,28067,28068],{"align":24480},"12.4.0-runtime-ubuntu22.04",[1083,28070,28071],{"align":24480},"~2GB",[1037,28073,28074,28077,28080,28083],{},[1083,28075,28076],{"align":24480},"devel",[1083,28078,28079],{"align":24480},"开发环境（含编译工具）",[1083,28081,28082],{"align":24480},"12.4.0-devel-ubuntu22.04",[1083,28084,28085],{"align":24480},"~3GB",[14,28087,28088,28089,28092],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[33,28090,28091],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,28094,28095],{},[2212,28096],{"alt":31,"src":28097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,28099,28100],{},"在dockerfile里就可以开头这么写：",[26,28102,28104],{"className":24566,"code":28103,"language":24568,"meta":31,"style":31},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[33,28105,28106,28111],{"__ignoreMap":31},[36,28107,28108],{"class":38,"line":39},[36,28109,28110],{"class":42},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[36,28112,28113,28116],{"class":38,"line":46},[36,28114,28115],{"class":2713},"FROM",[36,28117,28118],{"class":998}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[868,28120,28122],{"id":28121},"_34配置以太网","3.4.配置以太网",[14,28124,28125],{},"指定网络模式",[26,28127,28129],{"className":24566,"code":28128,"language":24568,"meta":31,"style":31},"--net=host \\\n",[33,28130,28131],{"__ignoreMap":31},[36,28132,28133,28136,28138,28141],{"class":38,"line":39},[36,28134,28135],{"class":49},"--net",[36,28137,54],{"class":53},[36,28139,28140],{"class":998},"host",[36,28142,25423],{"class":2713},[14,28144,28145],{},"启动参数里加上这行即可。具体在下方",[14,28147,28148],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1886,28150,28151,28154,28157,28160],{},[854,28152,28153],{},"--net=bridge:默认选项，表示连接到默认的网桥",[854,28155,28156],{},"--net=host:容器使用宿主机的网络",[854,28158,28159],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[854,28161,28162],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[807,28164,28165],{},"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":46,"depth":46,"links":28167},[28168,28169,28170,28171],{"id":27482,"depth":78,"text":27483},{"id":27549,"depth":78,"text":27550},{"id":28001,"depth":78,"text":28002},{"id":28121,"depth":78,"text":28122},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27471,"description":27479},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":28178,"title":28179,"body":28180,"description":28187,"extension":824,"meta":28193,"navigation":193,"path":28194,"seo":28195,"stem":28196,"__hash__":28197},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":28181,"toc":28191},[28182,28185,28188],[10,28183,28179],{"id":28184},"_4dockerhub换源",[14,28186,28187],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,28189,28190],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":31,"searchDepth":46,"depth":46,"links":28192},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":28179,"description":28187},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":28199,"title":28200,"body":28201,"description":31,"extension":824,"meta":29213,"navigation":193,"path":29214,"seo":29215,"stem":29216,"__hash__":29217},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":28202,"toc":29208},[28203,28206,28210,28216,28220,28223,28563,28566,28569,28572,28577,28582,28585,28588,28591,28594,28613,28616,28627,28633,28815,28825,28841,29104,29106,29131,29146,29155,29205],[10,28204,28200],{"id":28205},"_5docker命令学习",[868,28207,28209],{"id":28208},"_51参考文档","5.1.参考文档",[14,28211,28212],{},[50,28213,28214],{"href":28214,"rel":28215},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24609],[868,28217,28219],{"id":28218},"_52常用命令","5.2.常用命令",[14,28221,28222],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[1031,28224,28225,28238],{},[1034,28226,28227],{},[1037,28228,28229,28232,28235],{},[1040,28230,28231],{"align":24480},"命令",[1040,28233,28234],{"align":24480},"描述",[1040,28236,28237],{"align":24480},"示例",[1078,28239,28240,28251,28262,28273,28284,28295,28306,28317,28327,28338,28349,28360,28370,28381,28392,28403,28413,28423,28433,28443,28454,28465,28476,28487,28498,28509,28519,28530,28541,28552],{},[1037,28241,28242,28245,28248],{},[1083,28243,28244],{"align":24480},"docker run",[1083,28246,28247],{"align":24480},"创建并启动一个新的容器。",[1083,28249,28250],{"align":24480},"docker run -it ubuntu bash",[1037,28252,28253,28256,28259],{},[1083,28254,28255],{"align":24480},"docker build",[1083,28257,28258],{"align":24480},"通过指定的 Dockerfile 创建一个新的镜像。",[1083,28260,28261],{"align":24480},"docker build -t myimage .",[1037,28263,28264,28267,28270],{},[1083,28265,28266],{"align":24480},"docker pull",[1083,28268,28269],{"align":24480},"从 Docker 仓库拉取镜像。",[1083,28271,28272],{"align":24480},"docker pull ubuntu",[1037,28274,28275,28278,28281],{},[1083,28276,28277],{"align":24480},"docker push",[1083,28279,28280],{"align":24480},"将本地镜像推送到 Docker 仓库。",[1083,28282,28283],{"align":24480},"docker push myimage",[1037,28285,28286,28289,28292],{},[1083,28287,28288],{"align":24480},"docker stop",[1083,28290,28291],{"align":24480},"停止一个正在运行的容器。",[1083,28293,28294],{"align":24480},"docker stop container_id",[1037,28296,28297,28300,28303],{},[1083,28298,28299],{"align":24480},"docker start",[1083,28301,28302],{"align":24480},"启动一个已经存在的容器。",[1083,28304,28305],{"align":24480},"docker start container_id",[1037,28307,28308,28311,28314],{},[1083,28309,28310],{"align":24480},"docker restart",[1083,28312,28313],{"align":24480},"重新启动容器。",[1083,28315,28316],{"align":24480},"docker restart container_id",[1037,28318,28319,28322,28325],{},[1083,28320,28321],{"align":24480},"docker ps",[1083,28323,28324],{"align":24480},"列出当前正在运行的容器。",[1083,28326,28321],{"align":24480},[1037,28328,28329,28332,28335],{},[1083,28330,28331],{"align":24480},"docker rm",[1083,28333,28334],{"align":24480},"删除一个或多个停止的容器。",[1083,28336,28337],{"align":24480},"docker rm container_id",[1037,28339,28340,28343,28346],{},[1083,28341,28342],{"align":24480},"docker exec",[1083,28344,28345],{"align":24480},"在一个正在运行的容器中执行命令。",[1083,28347,28348],{"align":24480},"docker exec -it container_id bash",[1037,28350,28351,28354,28357],{},[1083,28352,28353],{"align":24480},"docker logs",[1083,28355,28356],{"align":24480},"查看容器的日志输出。",[1083,28358,28359],{"align":24480},"docker logs container_id",[1037,28361,28362,28365,28368],{},[1083,28363,28364],{"align":24480},"docker images",[1083,28366,28367],{"align":24480},"列出本地所有镜像。",[1083,28369,28364],{"align":24480},[1037,28371,28372,28375,28378],{},[1083,28373,28374],{"align":24480},"docker rmi",[1083,28376,28377],{"align":24480},"删除一个或多个镜像。",[1083,28379,28380],{"align":24480},"docker rmi myimage",[1037,28382,28383,28386,28389],{},[1083,28384,28385],{"align":24480},"docker network",[1083,28387,28388],{"align":24480},"管理 Docker 网络。",[1083,28390,28391],{"align":24480},"docker network ls",[1037,28393,28394,28397,28400],{},[1083,28395,28396],{"align":24480},"docker volume",[1083,28398,28399],{"align":24480},"管理 Docker 数据卷。",[1083,28401,28402],{"align":24480},"docker volume ls",[1037,28404,28405,28408,28411],{},[1083,28406,28407],{"align":24480},"docker-compose up",[1083,28409,28410],{"align":24480},"启动 docker-compose.yml 中定义的所有服务。",[1083,28412,28407],{"align":24480},[1037,28414,28415,28418,28421],{},[1083,28416,28417],{"align":24480},"docker-compose down",[1083,28419,28420],{"align":24480},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[1083,28422,28417],{"align":24480},[1037,28424,28425,28428,28431],{},[1083,28426,28427],{"align":24480},"docker info",[1083,28429,28430],{"align":24480},"显示 Docker 系统的详细信息。",[1083,28432,28427],{"align":24480},[1037,28434,28435,28438,28441],{},[1083,28436,28437],{"align":24480},"docker stats",[1083,28439,28440],{"align":24480},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[1083,28442,28437],{"align":24480},[1037,28444,28445,28448,28451],{},[1083,28446,28447],{"align":24480},"docker inspect",[1083,28449,28450],{"align":24480},"查看容器或镜像的详细信息（JSON 格式）。",[1083,28452,28453],{"align":24480},"docker inspect container_id",[1037,28455,28456,28459,28462],{},[1083,28457,28458],{"align":24480},"docker save",[1083,28460,28461],{"align":24480},"将一个镜像保存为 tar 文件。",[1083,28463,28464],{"align":24480},"docker save -o myimage.tar myimage",[1037,28466,28467,28470,28473],{},[1083,28468,28469],{"align":24480},"docker load",[1083,28471,28472],{"align":24480},"从 tar 文件中加载镜像。",[1083,28474,28475],{"align":24480},"docker load -i myimage.tar",[1037,28477,28478,28481,28484],{},[1083,28479,28480],{"align":24480},"docker tag",[1083,28482,28483],{"align":24480},"为镜像添加标签（tag）。",[1083,28485,28486],{"align":24480},"docker tag myimage myimage:v1",[1037,28488,28489,28492,28495],{},[1083,28490,28491],{"align":24480},"docker buildx build",[1083,28493,28494],{"align":24480},"使用 Buildx 构建多架构镜像。",[1083,28496,28497],{"align":24480},"docker buildx build -t myimage .",[1037,28499,28500,28503,28506],{},[1083,28501,28502],{"align":24480},"docker buildx create",[1083,28504,28505],{"align":24480},"创建一个新的 Buildx 构建实例。",[1083,28507,28508],{"align":24480},"docker buildx create –use",[1037,28510,28511,28514,28517],{},[1083,28512,28513],{"align":24480},"docker buildx ls",[1083,28515,28516],{"align":24480},"列出所有可用的 Buildx 构建实例。",[1083,28518,28513],{"align":24480},[1037,28520,28521,28524,28527],{},[1083,28522,28523],{"align":24480},"docker buildx use",[1083,28525,28526],{"align":24480},"设置当前的 Buildx 构建实例。",[1083,28528,28529],{"align":24480},"docker buildx use mybuilder",[1037,28531,28532,28535,28538],{},[1083,28533,28534],{"align":24480},"docker buildx bake",[1083,28536,28537],{"align":24480},"使用 Bake 文件批量构建镜像。",[1083,28539,28540],{"align":24480},"docker buildx bake -f bake.hcl",[1037,28542,28543,28546,28549],{},[1083,28544,28545],{"align":24480},"docker buildx build –push",[1083,28547,28548],{"align":24480},"构建镜像并推送到镜像仓库。",[1083,28550,28551],{"align":24480},"docker buildx build –push -t myimage .",[1037,28553,28554,28557,28560],{},[1083,28555,28556],{"align":24480},"docker buildx build –platform",[1083,28558,28559],{"align":24480},"构建镜像并为多个平台生成支持。",[1083,28561,28562],{"align":24480},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,28564,28565],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,28567,28568],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,28570,28571],{},"docker images 可以查看已经下载的镜像",[14,28573,28574],{},[2212,28575],{"alt":31,"src":28576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,28578,28579],{},[1043,28580,28581],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,28583,28584],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,28586,28587],{},"docker container logs 查看容器日志",[14,28589,28590],{},"docker top 查看容器里的进程",[14,28592,28593],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[26,28595,28597],{"className":24566,"code":28596,"language":24568,"meta":31,"style":31},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[33,28598,28599],{"__ignoreMap":31},[36,28600,28601,28604,28607,28610],{"class":38,"line":39},[36,28602,28603],{"class":2713},"如：docker",[36,28605,28606],{"class":998}," cp",[36,28608,28609],{"class":998}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[36,28611,28612],{"class":998}," \u002Fmydata\u002Fnginx\n",[14,28614,28615],{},"docker run时在启动容器的时候会有几个常用的选项：",[1886,28617,28618,28621,28624],{},[854,28619,28620],{},"-d选项：表示后台运行",[854,28622,28623],{},"-P选项：随机端口映射",[854,28625,28626],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[868,28628,28630],{"id":28629},"_53run命令的参数非常重要",[1043,28631,28632],{},"5.3.run命令的参数（非常重要）",[1031,28634,28635,28648],{},[1034,28636,28637],{},[1037,28638,28639,28642,28645],{},[1040,28640,28641],{"align":24480},"参数\u002F配置",[1040,28643,28644],{"align":24480},"功能说明",[1040,28646,28647],{"align":24480},"重要性与参考依据",[1078,28649,28650,28661,28672,28683,28694,28705,28716,28727,28738,28749,28760,28771,28782,28793,28804],{},[1037,28651,28652,28655,28658],{},[1083,28653,28654],{"align":24480},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[1083,28656,28657],{"align":24480},"指定容器名称，便于后续管理",[1083,28659,28660],{"align":24480},"替代随机生成的容器名。",[1037,28662,28663,28666,28669],{},[1083,28664,28665],{"align":24480},"–gpus all",[1083,28667,28668],{"align":24480},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[1083,28670,28671],{"align":24480},"用于CUDA加速等GPU依赖任务。",[1037,28673,28674,28677,28680],{},[1083,28675,28676],{"align":24480},"-e NVIDIA_DRIVER_CAPABILITIES=all",[1083,28678,28679],{"align":24480},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[1083,28681,28682],{"align":24480},"确保容器内GPU功能完整67。",[1037,28684,28685,28688,28691],{},[1083,28686,28687],{"align":24480},"-dit",[1083,28689,28690],{"align":24480},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[1083,28692,28693],{"align":24480},"允许容器在后台运行并支持交互操作。",[1037,28695,28696,28699,28702],{},[1083,28697,28698],{"align":24480},"–privileged",[1083,28700,28701],{"align":24480},"赋予容器完全主机权限（可访问设备、内核模块等）",[1083,28703,28704],{"align":24480},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[1037,28706,28707,28710,28713],{},[1083,28708,28709],{"align":24480},"–net=host",[1083,28711,28712],{"align":24480},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[1083,28714,28715],{"align":24480},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[1037,28717,28718,28721,28724],{},[1083,28719,28720],{"align":24480},"–group-add audio–group-add video–group-add dialout",[1083,28722,28723],{"align":24480},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[1083,28725,28726],{"align":24480},"避免权限问题（如避免无法调用摄像头、麦克风）。",[1037,28728,28729,28732,28735],{},[1083,28730,28731],{"align":24480},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[1083,28733,28734],{"align":24480},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[1083,28736,28737],{"align":24480},"支持容器内运行图形界面应用（如OpenCV可视化）。",[1037,28739,28740,28743,28746],{},[1083,28741,28742],{"align":24480},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[1083,28744,28745],{"align":24480},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[1083,28747,28748],{"align":24480},"实现容器内图形显示。",[1037,28750,28751,28754,28757],{},[1083,28752,28753],{"align":24480},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[1083,28755,28756],{"align":24480},"挂载X11认证文件（只读）",[1083,28758,28759],{"align":24480},"确保容器有权连接宿主机显示服务。",[1037,28761,28762,28765,28768],{},[1083,28763,28764],{"align":24480},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[1083,28766,28767],{"align":24480},"挂载Wayland显示协议相关目录",[1083,28769,28770],{"align":24480},"支持Wayland协议的图形显示。",[1037,28772,28773,28776,28779],{},[1083,28774,28775],{"align":24480},"–ulimit nofile=1024:524288",[1083,28777,28778],{"align":24480},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[1083,28780,28781],{"align":24480},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[1037,28783,28784,28787,28790],{},[1083,28785,28786],{"align":24480},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[1083,28788,28789],{"align":24480},"挂载宿主机用户目录到容器内同名路径",[1083,28791,28792],{"align":24480},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[1037,28794,28795,28798,28801],{},[1083,28796,28797],{"align":24480},"-w \u002Fhome\u002Ftungchiahui",[1083,28799,28800],{"align":24480},"设置容器启动后的默认工作目录",[1083,28802,28803],{"align":24480},"直接进入项目路径，方便执行命令2324。",[1037,28805,28806,28809,28812],{},[1083,28807,28808],{"align":24480},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[1083,28810,28811],{"align":24480},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[1083,28813,28814],{"align":24480},"提供预配置的深度学习与机器人开发环境。",[14,28816,28817,28818,28820,28821,28824],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[33,28819,25321],{},"加不加",[33,28822,28823],{},"sudo -E","都无所谓。",[14,28826,28827,28828,28830,28831,28833,28834,28837,28838,28840],{},"用户已经被加到docker组了，不用",[33,28829,25321],{},"也行跑，其次，",[33,28832,25321],{},"运行的话，你的",[33,28835,28836],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[33,28839,28836],{},"更不可能变了。",[26,28842,28844],{"className":24566,"code":28843,"language":24568,"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,28845,28846,28859,28869,28879,28891,28898,28905,28912,28922,28931,28940,28954,28966,28978,28987,28997,29006,29021,29054,29081,29092,29099],{"__ignoreMap":31},[36,28847,28848,28850,28852,28854,28857],{"class":38,"line":39},[36,28849,25321],{"class":2713},[36,28851,27065],{"class":998},[36,28853,27975],{"class":998},[36,28855,28856],{"class":60}," --name=ros_opencv_cuda",[36,28858,25423],{"class":60},[36,28860,28861,28864,28867],{"class":38,"line":46},[36,28862,28863],{"class":49},"--gpus ",[36,28865,28866],{"class":998},"all",[36,28868,25423],{"class":60},[36,28870,28871,28874,28877],{"class":38,"line":78},[36,28872,28873],{"class":49},"-e ",[36,28875,28876],{"class":998},"NVIDIA_DRIVER_CAPABILITIES=all",[36,28878,25423],{"class":60},[36,28880,28881,28883,28886,28889],{"class":38,"line":125},[36,28882,28873],{"class":49},[36,28884,28885],{"class":998},"DISPLAY=",[36,28887,28888],{"class":49},"$DISPLAY ",[36,28890,26920],{"class":60},[36,28892,28893,28896],{"class":38,"line":131},[36,28894,28895],{"class":49},"-dit ",[36,28897,26920],{"class":60},[36,28899,28900,28903],{"class":38,"line":396},[36,28901,28902],{"class":49},"--privileged ",[36,28904,26920],{"class":60},[36,28906,28907,28910],{"class":38,"line":407},[36,28908,28909],{"class":49},"--net=host ",[36,28911,26920],{"class":60},[36,28913,28914,28917,28920],{"class":38,"line":2061},[36,28915,28916],{"class":49},"--group-add ",[36,28918,28919],{"class":998},"audio",[36,28921,25423],{"class":60},[36,28923,28924,28926,28929],{"class":38,"line":2067},[36,28925,28916],{"class":49},[36,28927,28928],{"class":998},"video",[36,28930,25423],{"class":60},[36,28932,28933,28935,28938],{"class":38,"line":2079},[36,28934,28916],{"class":49},[36,28936,28937],{"class":998},"dialout",[36,28939,25423],{"class":60},[36,28941,28942,28944,28947,28949,28952],{"class":38,"line":2362},[36,28943,28873],{"class":49},[36,28945,28946],{"class":998},"XAUTHORITY=",[36,28948,28836],{"class":49},[36,28950,28951],{"class":998},"\u002F.Xauthority",[36,28953,25423],{"class":60},[36,28955,28956,28958,28961,28964],{"class":38,"line":2367},[36,28957,28873],{"class":49},[36,28959,28960],{"class":998},"WAYLAND_DISPLAY=",[36,28962,28963],{"class":49},"$WAYLAND_DISPLAY ",[36,28965,26920],{"class":60},[36,28967,28968,28970,28973,28976],{"class":38,"line":2373},[36,28969,28873],{"class":49},[36,28971,28972],{"class":998},"XDG_RUNTIME_DIR=",[36,28974,28975],{"class":49},"$XDG_RUNTIME_DIR ",[36,28977,26920],{"class":60},[36,28979,28980,28982,28985],{"class":38,"line":2378},[36,28981,28873],{"class":49},[36,28983,28984],{"class":998},"QT_QPA_PLATFORM=xcb",[36,28986,25423],{"class":60},[36,28988,28989,28992,28995],{"class":38,"line":2392},[36,28990,28991],{"class":49},"-v ",[36,28993,28994],{"class":998},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[36,28996,25423],{"class":60},[36,28998,28999,29001,29004],{"class":38,"line":2397},[36,29000,28991],{"class":49},[36,29002,29003],{"class":998},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[36,29005,25423],{"class":60},[36,29007,29008,29011,29014,29016,29019],{"class":38,"line":2403},[36,29009,29010],{"class":49},"-v $HOME",[36,29012,29013],{"class":998},"\u002F.Xauthority:",[36,29015,28836],{"class":49},[36,29017,29018],{"class":998},"\u002F.Xauthority:ro",[36,29020,25423],{"class":60},[36,29022,29023,29025,29028,29030,29033,29036,29038,29041,29043,29045,29047,29049,29052],{"class":38,"line":2424},[36,29024,28991],{"class":49},[36,29026,29027],{"class":998},"\u002Frun\u002Fuser\u002F",[36,29029,25844],{"class":49},[36,29031,29032],{"class":2713},"id",[36,29034,29035],{"class":60}," -u",[36,29037,1314],{"class":49},[36,29039,29040],{"class":998},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[36,29042,25844],{"class":49},[36,29044,29032],{"class":2713},[36,29046,29035],{"class":60},[36,29048,1314],{"class":49},[36,29050,29051],{"class":998},"\u002Fwayland-0",[36,29053,25423],{"class":60},[36,29055,29056,29058,29060,29062,29064,29066,29068,29071,29073,29075,29077,29079],{"class":38,"line":2429},[36,29057,28991],{"class":49},[36,29059,29027],{"class":998},[36,29061,25844],{"class":49},[36,29063,29032],{"class":2713},[36,29065,29035],{"class":60},[36,29067,1314],{"class":49},[36,29069,29070],{"class":998},":\u002Frun\u002Fuser\u002F",[36,29072,25844],{"class":49},[36,29074,29032],{"class":2713},[36,29076,29035],{"class":60},[36,29078,14458],{"class":49},[36,29080,26920],{"class":60},[36,29082,29083,29085,29087,29090],{"class":38,"line":2443},[36,29084,29010],{"class":49},[36,29086,1738],{"class":998},[36,29088,29089],{"class":49},"$HOME ",[36,29091,26920],{"class":60},[36,29093,29094,29097],{"class":38,"line":2448},[36,29095,29096],{"class":49},"-w $HOME ",[36,29098,26920],{"class":60},[36,29100,29101],{"class":38,"line":2477},[36,29102,29103],{"class":49},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,29105,9772],{},[851,29107,29108,29116,29119,29122],{},[854,29109,29110,14539,29112,29115],{},[33,29111,28876],{},[33,29113,29114],{},"--gpus all","没有英伟达显卡请注释。",[854,29117,29118],{},"--name后面请自己为容器起名。",[854,29120,29121],{},"最后一行仓库名称请你自己找对应的镜像填上。",[854,29123,29124,29125,29130],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[24297,29126,29127],{},[1043,29128,29129],{},"请不要加","。",[26,29132,29134],{"className":24566,"code":29133,"language":24568,"meta":31,"style":31},"--ulimit nofile=1024:524288 \\\n",[33,29135,29136],{"__ignoreMap":31},[36,29137,29138,29141,29144],{"class":38,"line":39},[36,29139,29140],{"class":2713},"--ulimit",[36,29142,29143],{"class":998}," nofile=1024:524288",[36,29145,25423],{"class":60},[14,29147,29148,29149,29154],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[24297,29150,29151],{},[1043,29152,29153],{},"不建议","**.**",[26,29156,29158],{"className":24566,"code":29157,"language":24568,"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,29159,29160,29187,29196],{"__ignoreMap":31},[36,29161,29162,29165,29168,29170,29172,29174,29176,29178,29180,29183,29185],{"class":38,"line":39},[36,29163,29164],{"class":2713},"--user",[36,29166,29167],{"class":49}," $(",[36,29169,29032],{"class":2713},[36,29171,29035],{"class":60},[36,29173,1314],{"class":49},[36,29175,1738],{"class":998},[36,29177,25844],{"class":49},[36,29179,29032],{"class":2713},[36,29181,29182],{"class":60}," -g",[36,29184,14458],{"class":49},[36,29186,26920],{"class":60},[36,29188,29189,29191,29194],{"class":38,"line":46},[36,29190,28991],{"class":49},[36,29192,29193],{"class":998},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[36,29195,25423],{"class":60},[36,29197,29198,29200,29203],{"class":38,"line":78},[36,29199,28991],{"class":49},[36,29201,29202],{"class":998},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[36,29204,25423],{"class":60},[807,29206,29207],{},"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":46,"depth":46,"links":29209},[29210,29211,29212],{"id":28208,"depth":78,"text":28209},{"id":28218,"depth":78,"text":28219},{"id":28629,"depth":78,"text":28632},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":28200,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":29219,"title":29220,"body":29221,"description":31,"extension":824,"meta":30844,"navigation":193,"path":30845,"seo":30846,"stem":30847,"__hash__":30848},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":29222,"toc":30839},[29223,29226,29230,29233,29455,29459,29463,29466,29572,29577,29580,29585,29588,29593,29596,29601,29604,29616,29619,29624,29631,29659,29666,29742,29747,29750,29773,29775,29850,29855,29858,29862,29870,29875,29880,29884,29895,29901,29904,29907,29931,29934,29937,29965,29968,29971,30436,30439,30444,30449,30453,30476,30481,30485,30489,30492,30495,30498,30525,30528,30531,30549,30552,30555,30577,30585,30590,30595,30599,30602,30605,30608,30611,30656,30659,30677,30680,30685,30688,30709,30712,30768,30771,30776,30780,30783,30790,30793,30796,30801,30804,30820,30823,30836],[10,29224,29220],{"id":29225},"_6手动创建docker镜像",[868,29227,29229],{"id":29228},"_61dockerfile","6.1.DockerFile",[14,29231,29232],{},"常用命令：",[1031,29234,29235,29246],{},[1034,29236,29237],{},[1037,29238,29239,29242,29244],{},[1040,29240,29241],{"align":24480},"指令",[1040,29243,26614],{"align":24480},[1040,29245,28237],{"align":24480},[1078,29247,29248,29258,29274,29285,29296,29307,29318,29329,29340,29354,29368,29379,29393,29404,29415,29429,29444],{},[1037,29249,29250,29252,29255],{},[1083,29251,28115],{"align":24480},[1083,29253,29254],{"align":24480},"指定基础镜像，是 Dockerfile 的起点",[1083,29256,29257],{"align":24480},"FROM ubuntu:22.04",[1037,29259,29260,29263,29266],{},[1083,29261,29262],{"align":24480},"LABEL",[1083,29264,29265],{"align":24480},"添加元数据（如作者、版本等）",[1083,29267,29268,29269,29273],{"align":24480},"LABEL maintainer=”",[50,29270,29272],{"href":29271},"mailto:you@example.com","you@example.com","”",[1037,29275,29276,29279,29282],{},[1083,29277,29278],{"align":24480},"ENV",[1083,29280,29281],{"align":24480},"设置环境变量",[1083,29283,29284],{"align":24480},"ENV PORT=8080",[1037,29286,29287,29290,29293],{},[1083,29288,29289],{"align":24480},"ARG",[1083,29291,29292],{"align":24480},"构建参数，只在构建期间可用",[1083,29294,29295],{"align":24480},"ARG VERSION=1.0",[1037,29297,29298,29301,29304],{},[1083,29299,29300],{"align":24480},"RUN",[1083,29302,29303],{"align":24480},"构建镜像时运行命令",[1083,29305,29306],{"align":24480},"RUN apt-get update && apt-get install -y curl",[1037,29308,29309,29312,29315],{},[1083,29310,29311],{"align":24480},"COPY",[1083,29313,29314],{"align":24480},"复制文件到镜像中",[1083,29316,29317],{"align":24480},"COPY . \u002Fapp",[1037,29319,29320,29323,29326],{},[1083,29321,29322],{"align":24480},"ADD",[1083,29324,29325],{"align":24480},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[1083,29327,29328],{"align":24480},"ADD archive.tar.gz \u002Fdata\u002F",[1037,29330,29331,29334,29337],{},[1083,29332,29333],{"align":24480},"WORKDIR",[1083,29335,29336],{"align":24480},"设置工作目录",[1083,29338,29339],{"align":24480},"WORKDIR \u002Fopt",[1037,29341,29342,29345,29348],{},[1083,29343,29344],{"align":24480},"CMD",[1083,29346,29347],{"align":24480},"设置容器启动时默认命令（可被 docker run 覆盖）",[1083,29349,29350,29351],{"align":24480},"CMD ",[36,29352,29353],{},"“node”, “index.js”",[1037,29355,29356,29359,29362],{},[1083,29357,29358],{"align":24480},"ENTRYPOINT",[1083,29360,29361],{"align":24480},"设置容器启动时固定命令（通常用于 CLI 工具等）",[1083,29363,29364,29365],{"align":24480},"ENTRYPOINT ",[36,29366,29367],{},"“python3”",[1037,29369,29370,29373,29376],{},[1083,29371,29372],{"align":24480},"EXPOSE",[1083,29374,29375],{"align":24480},"声明镜像内服务监听的端口（不会自动映射）",[1083,29377,29378],{"align":24480},"EXPOSE 80",[1037,29380,29381,29384,29387],{},[1083,29382,29383],{"align":24480},"VOLUME",[1083,29385,29386],{"align":24480},"声明数据卷挂载点",[1083,29388,29389,29390],{"align":24480},"VOLUME ",[36,29391,29392],{},"“\u002Fdata”",[1037,29394,29395,29398,29401],{},[1083,29396,29397],{"align":24480},"USER",[1083,29399,29400],{"align":24480},"设置后续命令执行的用户",[1083,29402,29403],{"align":24480},"USER appuser",[1037,29405,29406,29409,29412],{},[1083,29407,29408],{"align":24480},"ONBUILD",[1083,29410,29411],{"align":24480},"当镜像作为其他镜像基础镜像时触发的构建指令",[1083,29413,29414],{"align":24480},"ONBUILD COPY . \u002Fsrc",[1037,29416,29417,29420,29423],{},[1083,29418,29419],{"align":24480},"SHELL",[1083,29421,29422],{"align":24480},"更改默认 shell，比如将 sh -c 改为 bash -c",[1083,29424,29425,29426],{"align":24480},"SHELL ",[36,29427,29428],{},"“\u002Fbin\u002Fbash”, “-c”",[1037,29430,29431,29434,29437],{},[1083,29432,29433],{"align":24480},"HEALTHCHECK",[1083,29435,29436],{"align":24480},"定义容器运行时的健康检查命令",[1083,29438,29439,29440],{"align":24480},"`HEALTHCHECK CMD curl –fail ",[50,29441,29442],{"href":29442,"rel":29443},"http:\u002F\u002Flocalhost:8080",[24609],[1037,29445,29446,29449,29452],{},[1083,29447,29448],{"align":24480},"STOPSIGNAL",[1083,29450,29451],{"align":24480},"容器停止时发送的信号",[1083,29453,29454],{"align":24480},"STOPSIGNAL SIGKILL",[868,29456,29458],{"id":29457},"_62自己创建容器","6.2.自己创建容器",[22742,29460,29462],{"id":29461},"_621手动创建","6.2.1.手动创建",[14,29464,29465],{},"在x86电脑上编译x86的：",[26,29467,29469],{"className":24566,"code":29468,"language":24568,"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,29470,29471,29487,29491,29504,29508,29521,29525,29538,29542,29555,29559],{"__ignoreMap":31},[36,29472,29473,29475,29478,29481,29484],{"class":38,"line":39},[36,29474,27298],{"class":2713},[36,29476,29477],{"class":998}," build",[36,29479,29480],{"class":60}," -t",[36,29482,29483],{"class":998}," ros-melodic-cuda118-cudnn8-bionic:latest",[36,29485,29486],{"class":998}," .\n",[36,29488,29489],{"class":38,"line":46},[36,29490,194],{"emptyLinePlaceholder":193},[36,29492,29493,29495,29497,29499,29502],{"class":38,"line":78},[36,29494,27298],{"class":2713},[36,29496,29477],{"class":998},[36,29498,29480],{"class":60},[36,29500,29501],{"class":998}," ros-noetic-focal:latest",[36,29503,29486],{"class":998},[36,29505,29506],{"class":38,"line":125},[36,29507,194],{"emptyLinePlaceholder":193},[36,29509,29510,29512,29514,29516,29519],{"class":38,"line":131},[36,29511,27298],{"class":2713},[36,29513,29477],{"class":998},[36,29515,29480],{"class":60},[36,29517,29518],{"class":998}," ros-humble-jammy:latest",[36,29520,29486],{"class":998},[36,29522,29523],{"class":38,"line":396},[36,29524,194],{"emptyLinePlaceholder":193},[36,29526,29527,29529,29531,29533,29536],{"class":38,"line":407},[36,29528,27298],{"class":2713},[36,29530,29477],{"class":998},[36,29532,29480],{"class":60},[36,29534,29535],{"class":998}," ros-jazzy-noble:latest",[36,29537,29486],{"class":998},[36,29539,29540],{"class":38,"line":2061},[36,29541,194],{"emptyLinePlaceholder":193},[36,29543,29544,29546,29548,29550,29553],{"class":38,"line":2067},[36,29545,27298],{"class":2713},[36,29547,29477],{"class":998},[36,29549,29480],{"class":60},[36,29551,29552],{"class":998}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[36,29554,29486],{"class":998},[36,29556,29557],{"class":38,"line":2079},[36,29558,194],{"emptyLinePlaceholder":193},[36,29560,29561,29563,29565,29567,29570],{"class":38,"line":2362},[36,29562,27298],{"class":2713},[36,29564,29477],{"class":998},[36,29566,29480],{"class":60},[36,29568,29569],{"class":998}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[36,29571,29486],{"class":998},[14,29573,29574],{},[2212,29575],{"alt":31,"src":29576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,29578,29579],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,29581,29582],{},[2212,29583],{"alt":31,"src":29584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,29586,29587],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[851,29589,29590],{},[854,29591,29592],{},"创建 Docker Hub 账户",[14,29594,29595],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[851,29597,29598],{"start":46},[854,29599,29600],{},"登录 Docker Hub",[14,29602,29603],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[26,29605,29607],{"className":24566,"code":29606,"language":24568,"meta":31,"style":31},"docker login\n",[33,29608,29609],{"__ignoreMap":31},[36,29610,29611,29613],{"class":38,"line":39},[36,29612,27298],{"class":2713},[36,29614,29615],{"class":998}," login\n",[14,29617,29618],{},"输入你的 Docker Hub 用户名和密码进行验证。",[851,29620,29621],{},[854,29622,29623],{},"为你的镜像打标签",[14,29625,29626,29627,29630],{},"Docker Hub 使用 ",[33,29628,29629],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[26,29632,29634],{"className":24566,"code":29633,"language":24568,"meta":31,"style":31},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[33,29635,29636],{"__ignoreMap":31},[36,29637,29638,29640,29643,29645,29648,29651,29654,29656],{"class":38,"line":39},[36,29639,27298],{"class":2713},[36,29641,29642],{"class":998}," tag",[36,29644,29535],{"class":998},[36,29646,29647],{"class":53}," \u003C",[36,29649,29650],{"class":998},"你的用户",[36,29652,29653],{"class":49},"名",[36,29655,1839],{"class":53},[36,29657,29658],{"class":998},"\u002Fros-jazzy-noble:latest\n",[14,29660,29661,29662,29665],{},"例如，如果你的 Docker Hub 用户名是 ",[33,29663,29664],{},"tungchiahui","，你应该执行：",[26,29667,29669],{"className":24566,"code":29668,"language":24568,"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,29670,29671,29682,29686,29697,29701,29712,29716,29727,29731],{"__ignoreMap":31},[36,29672,29673,29675,29677,29679],{"class":38,"line":39},[36,29674,27298],{"class":2713},[36,29676,29642],{"class":998},[36,29678,29501],{"class":998},[36,29680,29681],{"class":998}," tungchiahui\u002Fros-noetic-focal:latest\n",[36,29683,29684],{"class":38,"line":46},[36,29685,194],{"emptyLinePlaceholder":193},[36,29687,29688,29690,29692,29694],{"class":38,"line":78},[36,29689,27298],{"class":2713},[36,29691,29642],{"class":998},[36,29693,29518],{"class":998},[36,29695,29696],{"class":998}," tungchiahui\u002Fros-humble-jammy:latest\n",[36,29698,29699],{"class":38,"line":125},[36,29700,194],{"emptyLinePlaceholder":193},[36,29702,29703,29705,29707,29709],{"class":38,"line":131},[36,29704,27298],{"class":2713},[36,29706,29642],{"class":998},[36,29708,29535],{"class":998},[36,29710,29711],{"class":998}," tungchiahui\u002Fros-jazzy-noble:latest\n",[36,29713,29714],{"class":38,"line":396},[36,29715,194],{"emptyLinePlaceholder":193},[36,29717,29718,29720,29722,29724],{"class":38,"line":407},[36,29719,27298],{"class":2713},[36,29721,29642],{"class":998},[36,29723,29552],{"class":998},[36,29725,29726],{"class":998}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[36,29728,29729],{"class":38,"line":2061},[36,29730,194],{"emptyLinePlaceholder":193},[36,29732,29733,29735,29737,29739],{"class":38,"line":2067},[36,29734,27298],{"class":2713},[36,29736,29642],{"class":998},[36,29738,29569],{"class":998},[36,29740,29741],{"class":998}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[851,29743,29744],{"start":46},[854,29745,29746],{},"推送镜像到 Docker Hub",[14,29748,29749],{},"使用以下命令将镜像推送到 Docker Hub：",[26,29751,29753],{"className":24566,"code":29752,"language":24568,"meta":31,"style":31},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[33,29754,29755],{"__ignoreMap":31},[36,29756,29757,29759,29762,29764,29766,29768,29770],{"class":38,"line":39},[36,29758,27298],{"class":2713},[36,29760,29761],{"class":998}," push",[36,29763,29647],{"class":53},[36,29765,29650],{"class":998},[36,29767,29653],{"class":49},[36,29769,1839],{"class":53},[36,29771,29772],{"class":998},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29774,15377],{},[26,29776,29778],{"className":24566,"code":29777,"language":24568,"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,29779,29780,29788,29792,29800,29804,29812,29816,29825,29829,29837,29841],{"__ignoreMap":31},[36,29781,29782,29784,29786],{"class":38,"line":39},[36,29783,27298],{"class":2713},[36,29785,29761],{"class":998},[36,29787,29681],{"class":998},[36,29789,29790],{"class":38,"line":46},[36,29791,194],{"emptyLinePlaceholder":193},[36,29793,29794,29796,29798],{"class":38,"line":78},[36,29795,27298],{"class":2713},[36,29797,29761],{"class":998},[36,29799,29696],{"class":998},[36,29801,29802],{"class":38,"line":125},[36,29803,194],{"emptyLinePlaceholder":193},[36,29805,29806,29808,29810],{"class":38,"line":131},[36,29807,27298],{"class":2713},[36,29809,29761],{"class":998},[36,29811,29711],{"class":998},[36,29813,29814],{"class":38,"line":396},[36,29815,194],{"emptyLinePlaceholder":193},[36,29817,29818,29820,29822],{"class":38,"line":407},[36,29819,27298],{"class":2713},[36,29821,29761],{"class":998},[36,29823,29824],{"class":998}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[36,29826,29827],{"class":38,"line":2061},[36,29828,194],{"emptyLinePlaceholder":193},[36,29830,29831,29833,29835],{"class":38,"line":2067},[36,29832,27298],{"class":2713},[36,29834,29761],{"class":998},[36,29836,29741],{"class":998},[36,29838,29839],{"class":38,"line":2079},[36,29840,194],{"emptyLinePlaceholder":193},[36,29842,29843,29845,29847],{"class":38,"line":2362},[36,29844,27298],{"class":2713},[36,29846,29761],{"class":998},[36,29848,29849],{"class":998}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[851,29851,29852],{"start":78},[854,29853,29854],{},"验证推送成功",[14,29856,29857],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29859,29860],{},[1043,29861,4533],{},[1886,29863,29864,29867],{},[854,29865,29866],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[854,29868,29869],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29871,29872],{},[2212,29873],{"alt":31,"src":29874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29876,29877],{},[2212,29878],{"alt":31,"src":29879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22742,29881,29883],{"id":29882},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29885,29886,29887,29890,29891,29894],{},"如果您想在 ",[1043,29888,29889],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[1043,29892,29893],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29896,29897,29898],{},"1. ",[1043,29899,29900],{},"启用 Docker 跨平台构建",[14,29902,29903],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29905,29906],{},"第一步：启用 buildx（只需执行一次）",[26,29908,29910],{"className":24566,"code":29909,"language":24568,"meta":31,"style":31},"docker buildx create --name multiarch_builder --use\n",[33,29911,29912],{"__ignoreMap":31},[36,29913,29914,29916,29919,29922,29925,29928],{"class":38,"line":39},[36,29915,27298],{"class":2713},[36,29917,29918],{"class":998}," buildx",[36,29920,29921],{"class":998}," create",[36,29923,29924],{"class":60}," --name",[36,29926,29927],{"class":998}," multiarch_builder",[36,29929,29930],{"class":60}," --use\n",[14,29932,29933],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29935,29936],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[26,29938,29940],{"className":24566,"code":29939,"language":24568,"meta":31,"style":31},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[33,29941,29942],{"__ignoreMap":31},[36,29943,29944,29946,29948,29950,29953,29956,29959,29962],{"class":38,"line":39},[36,29945,27298],{"class":2713},[36,29947,27975],{"class":998},[36,29949,27978],{"class":60},[36,29951,29952],{"class":60}," --privileged",[36,29954,29955],{"class":998}," multiarch\u002Fqemu-user-static",[36,29957,29958],{"class":60}," --reset",[36,29960,29961],{"class":60}," -p",[36,29963,29964],{"class":998}," yes\n",[14,29966,29967],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29969,29970],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[26,29972,29974],{"className":24566,"code":29973,"language":24568,"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,29975,29976,30018,30022,30027,30037,30047,30056,30062,30066,30070,30080,30088,30097,30103,30107,30111,30121,30129,30138,30144,30148,30152,30162,30170,30179,30185,30189,30193,30203,30211,30220,30226,30230,30234,30244,30252,30261,30267,30271,30275,30285,30293,30302,30308,30312,30316,30326,30334,30343,30349,30353,30357,30367,30375,30384,30390,30394,30398,30409,30417,30426,30432],{"__ignoreMap":31},[36,29977,29978,29980,29982,29984,29987,29990,29992,29994,29997,29999,30001,30003,30005,30008,30011,30013,30016],{"class":38,"line":39},[36,29979,27298],{"class":2713},[36,29981,29918],{"class":998},[36,29983,29477],{"class":998},[36,29985,29986],{"class":60}," --platform",[36,29988,29989],{"class":998}," linux\u002Famd64,linux\u002Farm64",[36,29991,29480],{"class":60},[36,29993,29647],{"class":53},[36,29995,29996],{"class":998},"你的镜像",[36,29998,29653],{"class":49},[36,30000,1839],{"class":53},[36,30002,1738],{"class":998},[36,30004,1789],{"class":53},[36,30006,30007],{"class":998},"标",[36,30009,30010],{"class":49},"签",[36,30012,1839],{"class":53},[36,30014,30015],{"class":60}," --push",[36,30017,29486],{"class":998},[36,30019,30020],{"class":38,"line":46},[36,30021,194],{"emptyLinePlaceholder":193},[36,30023,30024],{"class":38,"line":78},[36,30025,30026],{"class":42},"# 例子：\n",[36,30028,30029,30031,30033,30035],{"class":38,"line":125},[36,30030,27298],{"class":2713},[36,30032,29918],{"class":998},[36,30034,29477],{"class":998},[36,30036,25423],{"class":60},[36,30038,30039,30042,30045],{"class":38,"line":131},[36,30040,30041],{"class":49},"--platform ",[36,30043,30044],{"class":998},"linux\u002Famd64,linux\u002Farm64",[36,30046,25423],{"class":60},[36,30048,30049,30051,30054],{"class":38,"line":396},[36,30050,29480],{"class":60},[36,30052,30053],{"class":998}," tungchiahui\u002Fros:noetic-focal",[36,30055,25423],{"class":60},[36,30057,30058,30060],{"class":38,"line":407},[36,30059,30015],{"class":60},[36,30061,25423],{"class":60},[36,30063,30064],{"class":38,"line":2061},[36,30065,29486],{"class":998},[36,30067,30068],{"class":38,"line":2067},[36,30069,194],{"emptyLinePlaceholder":193},[36,30071,30072,30074,30076,30078],{"class":38,"line":2079},[36,30073,27298],{"class":2713},[36,30075,29918],{"class":998},[36,30077,29477],{"class":998},[36,30079,25423],{"class":60},[36,30081,30082,30084,30086],{"class":38,"line":2362},[36,30083,30041],{"class":49},[36,30085,30044],{"class":998},[36,30087,25423],{"class":60},[36,30089,30090,30092,30095],{"class":38,"line":2367},[36,30091,29480],{"class":60},[36,30093,30094],{"class":998}," tungchiahui\u002Fros:humble-jammy",[36,30096,25423],{"class":60},[36,30098,30099,30101],{"class":38,"line":2373},[36,30100,30015],{"class":60},[36,30102,25423],{"class":60},[36,30104,30105],{"class":38,"line":2378},[36,30106,29486],{"class":998},[36,30108,30109],{"class":38,"line":2392},[36,30110,194],{"emptyLinePlaceholder":193},[36,30112,30113,30115,30117,30119],{"class":38,"line":2397},[36,30114,27298],{"class":2713},[36,30116,29918],{"class":998},[36,30118,29477],{"class":998},[36,30120,25423],{"class":60},[36,30122,30123,30125,30127],{"class":38,"line":2403},[36,30124,30041],{"class":49},[36,30126,30044],{"class":998},[36,30128,25423],{"class":60},[36,30130,30131,30133,30136],{"class":38,"line":2424},[36,30132,29480],{"class":60},[36,30134,30135],{"class":998}," tungchiahui\u002Fros:jazzy-noble",[36,30137,25423],{"class":60},[36,30139,30140,30142],{"class":38,"line":2429},[36,30141,30015],{"class":60},[36,30143,25423],{"class":60},[36,30145,30146],{"class":38,"line":2443},[36,30147,29486],{"class":998},[36,30149,30150],{"class":38,"line":2448},[36,30151,194],{"emptyLinePlaceholder":193},[36,30153,30154,30156,30158,30160],{"class":38,"line":2477},[36,30155,27065],{"class":2713},[36,30157,29918],{"class":998},[36,30159,29477],{"class":998},[36,30161,25423],{"class":60},[36,30163,30164,30166,30168],{"class":38,"line":2482},[36,30165,30041],{"class":49},[36,30167,30044],{"class":998},[36,30169,25423],{"class":60},[36,30171,30172,30174,30177],{"class":38,"line":2499},[36,30173,29480],{"class":60},[36,30175,30176],{"class":998}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[36,30178,25423],{"class":60},[36,30180,30181,30183],{"class":38,"line":2504},[36,30182,30015],{"class":60},[36,30184,25423],{"class":60},[36,30186,30187],{"class":38,"line":2509},[36,30188,29486],{"class":998},[36,30190,30191],{"class":38,"line":2514},[36,30192,194],{"emptyLinePlaceholder":193},[36,30194,30195,30197,30199,30201],{"class":38,"line":2528},[36,30196,27298],{"class":2713},[36,30198,29918],{"class":998},[36,30200,29477],{"class":998},[36,30202,25423],{"class":60},[36,30204,30205,30207,30209],{"class":38,"line":2533},[36,30206,30041],{"class":49},[36,30208,30044],{"class":998},[36,30210,25423],{"class":60},[36,30212,30213,30215,30218],{"class":38,"line":3326},[36,30214,29480],{"class":60},[36,30216,30217],{"class":998}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[36,30219,25423],{"class":60},[36,30221,30222,30224],{"class":38,"line":3340},[36,30223,30015],{"class":60},[36,30225,25423],{"class":60},[36,30227,30228],{"class":38,"line":3348},[36,30229,29486],{"class":998},[36,30231,30232],{"class":38,"line":3353},[36,30233,194],{"emptyLinePlaceholder":193},[36,30235,30236,30238,30240,30242],{"class":38,"line":3359},[36,30237,27065],{"class":2713},[36,30239,29918],{"class":998},[36,30241,29477],{"class":998},[36,30243,25423],{"class":60},[36,30245,30246,30248,30250],{"class":38,"line":3365},[36,30247,30041],{"class":49},[36,30249,30044],{"class":998},[36,30251,25423],{"class":60},[36,30253,30254,30256,30259],{"class":38,"line":3370},[36,30255,29480],{"class":60},[36,30257,30258],{"class":998}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[36,30260,25423],{"class":60},[36,30262,30263,30265],{"class":38,"line":8695},[36,30264,30015],{"class":60},[36,30266,25423],{"class":60},[36,30268,30269],{"class":38,"line":8719},[36,30270,29486],{"class":998},[36,30272,30273],{"class":38,"line":8724},[36,30274,194],{"emptyLinePlaceholder":193},[36,30276,30277,30279,30281,30283],{"class":38,"line":8730},[36,30278,27298],{"class":2713},[36,30280,29918],{"class":998},[36,30282,29477],{"class":998},[36,30284,25423],{"class":60},[36,30286,30287,30289,30291],{"class":38,"line":8757},[36,30288,30041],{"class":49},[36,30290,30044],{"class":998},[36,30292,25423],{"class":60},[36,30294,30295,30297,30300],{"class":38,"line":8762},[36,30296,29480],{"class":60},[36,30298,30299],{"class":998}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[36,30301,25423],{"class":60},[36,30303,30304,30306],{"class":38,"line":8768},[36,30305,30015],{"class":60},[36,30307,25423],{"class":60},[36,30309,30310],{"class":38,"line":8780},[36,30311,29486],{"class":998},[36,30313,30314],{"class":38,"line":8792},[36,30315,194],{"emptyLinePlaceholder":193},[36,30317,30318,30320,30322,30324],{"class":38,"line":8804},[36,30319,27298],{"class":2713},[36,30321,29918],{"class":998},[36,30323,29477],{"class":998},[36,30325,25423],{"class":60},[36,30327,30328,30330,30332],{"class":38,"line":10463},[36,30329,30041],{"class":49},[36,30331,30044],{"class":998},[36,30333,25423],{"class":60},[36,30335,30336,30338,30341],{"class":38,"line":10488},[36,30337,29480],{"class":60},[36,30339,30340],{"class":998}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[36,30342,25423],{"class":60},[36,30344,30345,30347],{"class":38,"line":10511},[36,30346,30015],{"class":60},[36,30348,25423],{"class":60},[36,30350,30351],{"class":38,"line":10535},[36,30352,29486],{"class":998},[36,30354,30355],{"class":38,"line":10540},[36,30356,194],{"emptyLinePlaceholder":193},[36,30358,30359,30361,30363,30365],{"class":38,"line":10545},[36,30360,27065],{"class":2713},[36,30362,29918],{"class":998},[36,30364,29477],{"class":998},[36,30366,25423],{"class":60},[36,30368,30369,30371,30373],{"class":38,"line":10550},[36,30370,30041],{"class":49},[36,30372,30044],{"class":998},[36,30374,25423],{"class":60},[36,30376,30377,30379,30382],{"class":38,"line":10559},[36,30378,29480],{"class":60},[36,30380,30381],{"class":998}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[36,30383,25423],{"class":60},[36,30385,30386,30388],{"class":38,"line":10564},[36,30387,30015],{"class":60},[36,30389,25423],{"class":60},[36,30391,30392],{"class":38,"line":10570},[36,30393,29486],{"class":998},[36,30395,30396],{"class":38,"line":10591},[36,30397,194],{"emptyLinePlaceholder":193},[36,30399,30400,30403,30405,30407],{"class":38,"line":10597},[36,30401,30402],{"class":2713},"  docker",[36,30404,29918],{"class":998},[36,30406,29477],{"class":998},[36,30408,25423],{"class":60},[36,30410,30411,30413,30415],{"class":38,"line":10611},[36,30412,30041],{"class":49},[36,30414,30044],{"class":998},[36,30416,25423],{"class":60},[36,30418,30419,30421,30424],{"class":38,"line":10617},[36,30420,29480],{"class":60},[36,30422,30423],{"class":998}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[36,30425,25423],{"class":60},[36,30427,30428,30430],{"class":38,"line":10644},[36,30429,30015],{"class":60},[36,30431,25423],{"class":60},[36,30433,30434],{"class":38,"line":10653},[36,30435,29486],{"class":998},[14,30437,30438],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,30440,30441],{},[2212,30442],{"alt":31,"src":30443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,30445,30446],{},[2212,30447],{"alt":31,"src":30448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22742,30450,30452],{"id":30451},"_623清除构建缓存","6.2.3.清除构建缓存",[26,30454,30456],{"className":24566,"code":30455,"language":24568,"meta":31,"style":31},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[33,30457,30458,30463],{"__ignoreMap":31},[36,30459,30460],{"class":38,"line":39},[36,30461,30462],{"class":42},"# 清理BuildKit构建缓存\n",[36,30464,30465,30467,30470,30473],{"class":38,"line":46},[36,30466,27298],{"class":2713},[36,30468,30469],{"class":998}," builder",[36,30471,30472],{"class":998}," prune",[36,30474,30475],{"class":60}," -f\n",[14,30477,30478],{},[2212,30479],{"alt":31,"src":30480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[868,30482,30484],{"id":30483},"_63补充","6.3.补充",[22742,30486,30488],{"id":30487},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,30490,30491],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,30493,30494],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,30496,30497],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[26,30499,30501],{"className":24566,"code":30500,"language":24568,"meta":31,"style":31},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[33,30502,30503,30510],{"__ignoreMap":31},[36,30504,30505,30507],{"class":38,"line":39},[36,30506,28115],{"class":2713},[36,30508,30509],{"class":998}," nginx\n",[36,30511,30512,30514,30517,30520,30522],{"class":38,"line":46},[36,30513,29300],{"class":2713},[36,30515,30516],{"class":998}," echo",[36,30518,30519],{"class":998}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[36,30521,26967],{"class":53},[36,30523,30524],{"class":998}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,30526,30527],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,30529,30530],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[26,30532,30534],{"className":24566,"code":30533,"language":24568,"meta":31,"style":31},"docker build -t nginx:tuling .\n",[33,30535,30536],{"__ignoreMap":31},[36,30537,30538,30540,30542,30544,30547],{"class":38,"line":39},[36,30539,27298],{"class":2713},[36,30541,29477],{"class":998},[36,30543,29480],{"class":60},[36,30545,30546],{"class":998}," nginx:tuling",[36,30548,29486],{"class":998},[14,30550,30551],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,30553,30554],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[26,30556,30558],{"className":24566,"code":30557,"language":24568,"meta":31,"style":31},"docker run -d -p 92:80 nginx:tuling\n",[33,30559,30560],{"__ignoreMap":31},[36,30561,30562,30564,30566,30569,30571,30574],{"class":38,"line":39},[36,30563,27298],{"class":2713},[36,30565,27975],{"class":998},[36,30567,30568],{"class":60}," -d",[36,30570,29961],{"class":60},[36,30572,30573],{"class":998}," 92:80",[36,30575,30576],{"class":998}," nginx:tuling\n",[14,30578,30579,30580],{},"4、访问 ",[50,30581,30584],{"href":30582,"rel":30583},"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",[24609],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,30586,30587],{},[2212,30588],{"alt":31,"src":30589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,30591,30592],{},[2212,30593],{"alt":31,"src":30594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22742,30596,30598],{"id":30597},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,30600,30601],{},"只需要知道大体流程即可",[14,30603,30604],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,30606,30607],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,30609,30610],{},"2、在Dockerfile中添加以下内容",[26,30612,30614],{"className":26836,"code":30613,"language":26838,"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,30615,30616,30621,30626,30631,30636,30641,30646,30651],{"__ignoreMap":31},[36,30617,30618],{"class":38,"line":39},[36,30619,30620],{},"# 基于哪个镜像\n",[36,30622,30623],{"class":38,"line":46},[36,30624,30625],{},"From java:8\n",[36,30627,30628],{"class":38,"line":78},[36,30629,30630],{},"# 复制文件到容器\n",[36,30632,30633],{"class":38,"line":125},[36,30634,30635],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[36,30637,30638],{"class":38,"line":131},[36,30639,30640],{},"# 声明需要暴露的端口\n",[36,30642,30643],{"class":38,"line":396},[36,30644,30645],{},"EXPOSE 8877\n",[36,30647,30648],{"class":38,"line":407},[36,30649,30650],{},"# 配置容器启动后执行的命令\n",[36,30652,30653],{"class":38,"line":2061},[36,30654,30655],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,30657,30658],{},"3、使用docker build命令构建镜像",[26,30660,30662],{"className":24566,"code":30661,"language":24568,"meta":31,"style":31},"docker build -t tulingmall-member:0.0.5 .\n",[33,30663,30664],{"__ignoreMap":31},[36,30665,30666,30668,30670,30672,30675],{"class":38,"line":39},[36,30667,27298],{"class":2713},[36,30669,29477],{"class":998},[36,30671,29480],{"class":60},[36,30673,30674],{"class":998}," tulingmall-member:0.0.5",[36,30676,29486],{"class":998},[14,30678,30679],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,30681,30682],{},[2212,30683],{"alt":31,"src":30684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,30686,30687],{},"4、启动镜像，加-d可在后台启动",[26,30689,30691],{"className":24566,"code":30690,"language":24568,"meta":31,"style":31},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[33,30692,30693],{"__ignoreMap":31},[36,30694,30695,30697,30699,30701,30703,30706],{"class":38,"line":39},[36,30696,27298],{"class":2713},[36,30698,27975],{"class":998},[36,30700,30568],{"class":60},[36,30702,29961],{"class":60},[36,30704,30705],{"class":998}," 8877:8877",[36,30707,30708],{"class":998}," tulingmall-member:0.0.5\n",[14,30710,30711],{},"加上JVM参数：",[26,30713,30715],{"className":24566,"code":30714,"language":24568,"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,30716,30717,30722,30737,30747,30756,30763],{"__ignoreMap":31},[36,30718,30719],{"class":38,"line":39},[36,30720,30721],{"class":42},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[36,30723,30724,30726,30728,30731,30733,30735],{"class":38,"line":46},[36,30725,27298],{"class":2713},[36,30727,27975],{"class":998},[36,30729,30730],{"class":60},"  -d",[36,30732,29961],{"class":60},[36,30734,30705],{"class":998},[36,30736,25423],{"class":60},[36,30738,30739,30741,30744],{"class":38,"line":78},[36,30740,28873],{"class":49},[36,30742,30743],{"class":998},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[36,30745,30746],{"class":60},"  \\\n",[36,30748,30749,30751,30754],{"class":38,"line":125},[36,30750,28873],{"class":49},[36,30752,30753],{"class":998},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[36,30755,30746],{"class":60},[36,30757,30758,30761],{"class":38,"line":131},[36,30759,30760],{"class":49},"--cap-add=SYS_PTRACE  ",[36,30762,26920],{"class":60},[36,30764,30765],{"class":38,"line":396},[36,30766,30767],{"class":49},"tulingmall-member:0.0.5\n",[14,30769,30770],{},"5、访问会员服务接口",[14,30772,30773],{},[2212,30774],{"alt":31,"src":30775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22742,30777,30779],{"id":30778},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30781,30782],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30784,30785,30786],{},"阿里云docker镜像仓库：",[50,30787,30788],{"href":30788,"rel":30789},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24609],[14,30791,30792],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30794,30795],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30797,30798],{},[2212,30799],{"alt":31,"src":30800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30802,30803],{},"要把镜像推送到镜像仓库",[26,30805,30807],{"className":24566,"code":30806,"language":24568,"meta":31,"style":31},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[33,30808,30809],{"__ignoreMap":31},[36,30810,30811,30813,30815,30817],{"class":38,"line":39},[36,30812,27298],{"class":2713},[36,30814,29642],{"class":998},[36,30816,30674],{"class":998},[36,30818,30819],{"class":998}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30821,30822],{},"最后将镜像推送到远程仓库",[26,30824,30826],{"className":24566,"code":30825,"language":24568,"meta":31,"style":31},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[33,30827,30828],{"__ignoreMap":31},[36,30829,30830,30832,30834],{"class":38,"line":39},[36,30831,27298],{"class":2713},[36,30833,29761],{"class":998},[36,30835,30819],{"class":998},[807,30837,30838],{},"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":46,"depth":46,"links":30840},[30841,30842,30843],{"id":29228,"depth":78,"text":29229},{"id":29457,"depth":78,"text":29458},{"id":30483,"depth":78,"text":30484},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":29220,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30850,"title":30851,"body":30852,"description":31,"extension":824,"meta":30995,"navigation":193,"path":30996,"seo":30997,"stem":30998,"__hash__":30999},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30853,"toc":30993},[30854,30857,30862,30867,30870,30875,30880,30883,30888,30893,30896,30901,30904,30907,30910,30913,30916,30919,30939,30961,30964,30967,30987,30990],[10,30855,30851],{"id":30856},"_7vscode远程开发",[851,30858,30859],{},[854,30860,30861],{},"插件1：微软Docker工具",[14,30863,30864],{},[2212,30865],{"alt":31,"src":30866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30868,30869],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30871,30872],{},[2212,30873],{"alt":31,"src":30874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[851,30876,30877],{"start":46},[854,30878,30879],{},"插件2：微软Docker远程开发工具",[14,30881,30882],{},"下面这是远程开发的插件。",[14,30884,30885],{},[2212,30886],{"alt":31,"src":30887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30889,30890],{},[2212,30891],{"alt":31,"src":30892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30894,30895],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30897,30898],{},[2212,30899],{"alt":31,"src":30900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30902,30903],{},"安装完拓展之后，vscode进行链接：",[14,30905,30906],{},"1.按ctrl+shift+p",[14,30908,30909],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30911,30912],{},"3.选择目前运行的容器",[14,30914,30915],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30917,30918],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[26,30920,30922],{"className":24566,"code":30921,"language":24568,"meta":31,"style":31},"docker run -v 主机目录:容器目录 image-name\n",[33,30923,30924],{"__ignoreMap":31},[36,30925,30926,30928,30930,30933,30936],{"class":38,"line":39},[36,30927,27298],{"class":2713},[36,30929,27975],{"class":998},[36,30931,30932],{"class":60}," -v",[36,30934,30935],{"class":998}," 主机目录:容器目录",[36,30937,30938],{"class":998}," image-name\n",[26,30940,30942],{"className":24566,"code":30941,"language":24568,"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,30943,30944],{"__ignoreMap":31},[36,30945,30946,30948,30950,30953,30955,30958],{"class":38,"line":39},[36,30947,27298],{"class":2713},[36,30949,27975],{"class":998},[36,30951,30952],{"class":60}," -it",[36,30954,30932],{"class":60},[36,30956,30957],{"class":998}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[36,30959,30960],{"class":998}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30962,30963],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30965,30966],{},"查看挂载情况：",[26,30968,30970],{"className":24566,"code":30969,"language":24568,"meta":31,"style":31},"mount | grep -i project\n",[33,30971,30972],{"__ignoreMap":31},[36,30973,30974,30977,30979,30982,30984],{"class":38,"line":39},[36,30975,30976],{"class":2713},"mount",[36,30978,25854],{"class":53},[36,30980,30981],{"class":2713}," grep",[36,30983,27175],{"class":60},[36,30985,30986],{"class":998}," project\n",[14,30988,30989],{},"也可以通过ls来进行查看",[807,30991,30992],{},"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":46,"depth":46,"links":30994},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30851,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":31001,"title":31002,"body":31003,"description":823,"extension":824,"meta":31007,"navigation":193,"path":31009,"seo":31010,"stem":31011,"__hash__":31012},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":31004,"toc":31005},[],{"title":31,"searchDepth":46,"depth":46,"links":31006},[],{"category":31008},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":31002,"description":823},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":31014,"title":31015,"body":31016,"description":823,"extension":824,"meta":31020,"navigation":193,"path":31021,"seo":31022,"stem":31023,"__hash__":31024},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":31017,"toc":31018},[],{"title":31,"searchDepth":46,"depth":46,"links":31019},[],{"category":31008},"\u002Fwiki\u002F2025-11-10-k8s",{"title":31015,"description":823},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":31026,"title":31027,"body":31028,"description":823,"extension":824,"meta":31318,"navigation":193,"path":31319,"seo":31320,"stem":31321,"__hash__":31322},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":31029,"toc":31316},[31030,31033,31041,31056,31061,31112,31115,31121,31305,31310,31313],[10,31031,31027],{"id":31032},"_1验证深度学习环境",[14,31034,31035,31036],{},"关于环境的安装，看",[50,31037,31040],{"href":31038,"rel":31039},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24609],"Pytorch-->深度学习",[14,31042,31043,31044,31047,31048,31051,31052,31055],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[33,31045,31046],{},"pytorch-cuda=12.4"," 是一个“ ",[1043,31049,31050],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[1043,31053,31054],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,31057,31058],{},[2212,31059],{"alt":31,"src":31060},"\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,31062,31064],{"className":24566,"code":31063,"language":24568,"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,31065,31066,31071],{"__ignoreMap":31},[36,31067,31068],{"class":38,"line":39},[36,31069,31070],{"class":42},"# CUDA 12.4\n",[36,31072,31073,31076,31078,31081,31084,31087,31090,31093,31095,31098,31101,31104,31107,31109],{"class":38,"line":46},[36,31074,31075],{"class":2713},"conda",[36,31077,24578],{"class":998},[36,31079,31080],{"class":998}," pytorch==",[36,31082,31083],{"class":60},"2.5.1",[36,31085,31086],{"class":998}," torchvision==",[36,31088,31089],{"class":60},"0.20.1",[36,31091,31092],{"class":998}," torchaudio==",[36,31094,31083],{"class":60},[36,31096,31097],{"class":998}," pytorch-cuda=",[36,31099,31100],{"class":60},"12.4",[36,31102,31103],{"class":60}," -c",[36,31105,31106],{"class":998}," pytorch",[36,31108,31103],{"class":60},[36,31110,31111],{"class":998}," nvidia\n",[14,31113,31114],{},"）：",[14,31116,31117],{},[50,31118,31119],{"href":31119,"rel":31120},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24609],[26,31122,31124],{"className":28,"code":31123,"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,31125,31126,31131,31139,31144,31154,31169,31174,31184,31221,31228,31240,31256,31261,31271,31283,31293],{"__ignoreMap":31},[36,31127,31128],{"class":38,"line":39},[36,31129,31130],{"class":42},"# 对深度学习环境进行测试\n",[36,31132,31133,31136],{"class":38,"line":46},[36,31134,31135],{"class":53},"import",[36,31137,31138],{"class":49}," torch\n",[36,31140,31141],{"class":38,"line":78},[36,31142,31143],{"class":42},"# 查看cuda是否被激活\n",[36,31145,31146,31149,31151],{"class":38,"line":125},[36,31147,31148],{"class":49},"flag",[36,31150,54],{"class":53},[36,31152,31153],{"class":49},"torch.cuda.is_available()\n",[36,31155,31156,31158,31160,31163,31166],{"class":38,"line":131},[36,31157,199],{"class":60},[36,31159,901],{"class":49},[36,31161,31162],{"class":998},"\"cuda:\"",[36,31164,31165],{"class":49},", flag)   ",[36,31167,31168],{"class":42},"#返回true的话说明被激活\n",[36,31170,31171],{"class":38,"line":396},[36,31172,31173],{"class":42},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[36,31175,31176,31179,31181],{"class":38,"line":407},[36,31177,31178],{"class":49},"ngpu",[36,31180,54],{"class":53},[36,31182,31183],{"class":60},"1\n",[36,31185,31186,31189,31191,31194,31197,31199,31202,31205,31208,31210,31212,31214,31216,31219],{"class":38,"line":2061},[36,31187,31188],{"class":49},"device",[36,31190,54],{"class":53},[36,31192,31193],{"class":49},"torch.device(",[36,31195,31196],{"class":998},"\"cuda:0\"",[36,31198,2454],{"class":53},[36,31200,31201],{"class":49},"(torch.cuda.is_available() ",[36,31203,31204],{"class":53},"and",[36,31206,31207],{"class":49}," ngpu",[36,31209,1839],{"class":53},[36,31211,643],{"class":60},[36,31213,14458],{"class":49},[36,31215,2451],{"class":53},[36,31217,31218],{"class":998}," \"cpu\"",[36,31220,75],{"class":49},[36,31222,31223,31225],{"class":38,"line":2067},[36,31224,199],{"class":60},[36,31226,31227],{"class":49},"(device)\n",[36,31229,31230,31232,31235,31237],{"class":38,"line":2079},[36,31231,199],{"class":60},[36,31233,31234],{"class":49},"(torch.cuda.get_device_name(",[36,31236,643],{"class":60},[36,31238,31239],{"class":49},"))\n",[36,31241,31242,31244,31247,31249,31251,31253],{"class":38,"line":2362},[36,31243,199],{"class":60},[36,31245,31246],{"class":49},"(torch.rand(",[36,31248,162],{"class":60},[36,31250,64],{"class":49},[36,31252,162],{"class":60},[36,31254,31255],{"class":49},").cuda())\n",[36,31257,31258],{"class":38,"line":2367},[36,31259,31260],{"class":42},"# 查看cuda和cudnn的版本\n",[36,31262,31263,31266,31268],{"class":38,"line":2373},[36,31264,31265],{"class":49},"cuda_version",[36,31267,54],{"class":53},[36,31269,31270],{"class":49},"torch.version.cuda\n",[36,31272,31273,31275,31277,31280],{"class":38,"line":2378},[36,31274,199],{"class":60},[36,31276,901],{"class":49},[36,31278,31279],{"class":998},"\"cuda version\"",[36,31281,31282],{"class":49},",cuda_version)\n",[36,31284,31285,31288,31290],{"class":38,"line":2392},[36,31286,31287],{"class":49},"cudnn_version",[36,31289,54],{"class":53},[36,31291,31292],{"class":49},"torch.backends.cudnn.version()\n",[36,31294,31295,31297,31299,31302],{"class":38,"line":2397},[36,31296,199],{"class":60},[36,31298,901],{"class":49},[36,31300,31301],{"class":998},"\"cudnn version\"",[36,31303,31304],{"class":49},",cudnn_version)\n",[14,31306,31307],{},[2212,31308],{"alt":31,"src":31309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[14,31311,31312],{},"cuda:0 指的是一块显卡",[807,31314,31315],{},"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":46,"depth":46,"links":31317},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":31027,"description":823},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31324,"title":31325,"body":31326,"description":823,"extension":824,"meta":51130,"navigation":193,"path":51131,"seo":51132,"stem":51133,"__hash__":51134},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31327,"toc":51124},[31328,31331,31335,31339,31342,31347,31352,31355,31360,31365,31370,31373,31377,31382,31386,31391,31394,31399,31402,31405,31408,31411,31416,31419,31424,31429,31434,31439,31442,31446,31449,31454,32058,32063,32066,32071,32074,32077,32541,32544,32547,32550,32553,34604,34607,34612,34617,35412,35415,35420,36198,36202,37861,37865,38579,38583,38587,38592,38597,38602,38605,38610,38615,38620,38625,38630,38634,38639,39921,39926,39929,39932,39935,40090,40093,40096,41312,41317,42012,42016,42020,42025,42030,42033,42038,42043,42048,42053,42058,42063,42068,42073,42078,42083,42088,42093,42098,42103,42108,42113,42118,42123,42128,42133,42138,42143,42148,42153,42158,42163,42168,42173,42178,42183,42187,42191,42194,43672,43676,45323,45327,46021,46025,46028,46031,46575,46578,46582,46585,47982,47986,47989,48567,50354,50358,50361,51121],[10,31329,31325],{"id":31330},"_2经典神经网络",[868,31332,31334],{"id":31333},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22742,31336,31338],{"id":31337},"_211原理介绍","2.1.1.原理介绍",[14,31340,31341],{},"LeNet-5",[851,31343,31344],{},[854,31345,31346],{},"原理",[14,31348,31349],{},[2212,31350],{"alt":31,"src":31351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[14,31353,31354],{},"B是batch批次；C是channel通道",[851,31356,31357],{"start":46},[854,31358,31359],{},"网络参数详细",[14,31361,31362],{},[2212,31363],{"alt":31,"src":31364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[14,31366,31367],{},[2212,31368],{"alt":31,"src":31369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[14,31371,31372],{},"AlexNet",[851,31374,31375],{},[854,31376,31346],{},[14,31378,31379],{},[2212,31380],{"alt":31,"src":31381},"\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",[851,31383,31384],{"start":46},[854,31385,31359],{},[14,31387,31388],{},[2212,31389],{"alt":31,"src":31390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[14,31392,31393],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,31395,31396],{},[2212,31397],{"alt":31,"src":31398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[14,31400,31401],{},"数据处理中的图像增强操作:",[14,31403,31404],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,31406,31407],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,31409,31410],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,31412,31413],{},[2212,31414],{"alt":31,"src":31415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[14,31417,31418],{},"提升网络精确度的方法：LRN正则化",[14,31420,31421],{},[2212,31422],{"alt":31,"src":31423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[14,31425,31426],{},[2212,31427],{"alt":31,"src":31428},"\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",[851,31430,31431],{"start":78},[854,31432,31433],{},"AlexNet的总结",[14,31435,31436],{},[2212,31437],{"alt":31,"src":31438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[14,31440,31441],{},"比LeNet模型要深一丢丢",[22742,31443,31445],{"id":31444},"_212代码实现","2.1.2.代码实现",[14,31447,31448],{},"（1）LeNet",[851,31450,31451],{},[854,31452,31453],{},"模型搭建",[26,31455,31457],{"className":28,"code":31456,"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,31458,31459,31464,31470,31475,31488,31493,31505,31509,31529,31534,31539,31550,31555,31574,31578,31583,31632,31644,31649,31678,31713,31740,31745,31757,31762,31782,31801,31820,31824,31829,31839,31856,31867,31882,31893,31904,31919,31934,31945,31952,31956,31970,31975,31998,32003,32008,32013,32017,32022,32027,32037],{"__ignoreMap":31},[36,31460,31461],{"class":38,"line":39},[36,31462,31463],{"class":42},"# 导入库\n",[36,31465,31466,31468],{"class":38,"line":46},[36,31467,31135],{"class":53},[36,31469,31138],{"class":49},[36,31471,31472],{"class":38,"line":78},[36,31473,31474],{"class":42},"# 导入神经网络层\n",[36,31476,31477,31480,31483,31485],{"class":38,"line":125},[36,31478,31479],{"class":53},"from",[36,31481,31482],{"class":49}," torch ",[36,31484,31135],{"class":53},[36,31486,31487],{"class":49}," nn\n",[36,31489,31490],{"class":38,"line":131},[36,31491,31492],{"class":42},"# 导入展示神经网络参数的包\n",[36,31494,31495,31497,31500,31502],{"class":38,"line":396},[36,31496,31479],{"class":53},[36,31498,31499],{"class":49}," torchsummary ",[36,31501,31135],{"class":53},[36,31503,31504],{"class":49}," summary\n",[36,31506,31507],{"class":38,"line":407},[36,31508,194],{"emptyLinePlaceholder":193},[36,31510,31511,31513,31516,31518,31521,31523,31526],{"class":38,"line":2061},[36,31512,15438],{"class":53},[36,31514,31515],{"class":2713}," LeNet",[36,31517,901],{"class":49},[36,31519,31520],{"class":2713},"nn",[36,31522,1440],{"class":49},[36,31524,31525],{"class":2713},"Module",[36,31527,31528],{"class":49},"):\n",[36,31530,31531],{"class":38,"line":2067},[36,31532,31533],{"class":42},"    # 模型初始化:\n",[36,31535,31536],{"class":38,"line":2079},[36,31537,31538],{"class":42},"    # 定义一些网络层和激活函数\n",[36,31540,31541,31544,31547],{"class":38,"line":2362},[36,31542,31543],{"class":53},"    def",[36,31545,31546],{"class":60}," __init__",[36,31548,31549],{"class":49},"(self):\n",[36,31551,31552],{"class":38,"line":2367},[36,31553,31554],{"class":42},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[36,31556,31557,31560,31563,31566,31569,31572],{"class":38,"line":2373},[36,31558,31559],{"class":60},"        super",[36,31561,31562],{"class":49},"(LeNet,",[36,31564,31565],{"class":60},"self",[36,31567,31568],{"class":49},").",[36,31570,31571],{"class":60},"__init__",[36,31573,2726],{"class":49},[36,31575,31576],{"class":38,"line":2378},[36,31577,194],{"emptyLinePlaceholder":193},[36,31579,31580],{"class":38,"line":2392},[36,31581,31582],{"class":42},"        # 定义网络层\n",[36,31584,31585,31588,31591,31593,31596,31599,31601,31603,31605,31608,31610,31612,31614,31617,31619,31621,31623,31626,31628,31630],{"class":38,"line":2397},[36,31586,31587],{"class":60},"        self",[36,31589,31590],{"class":49},".c1",[36,31592,54],{"class":53},[36,31594,31595],{"class":49},"nn.Conv2d(",[36,31597,31598],{"class":416},"in_channels",[36,31600,54],{"class":53},[36,31602,61],{"class":60},[36,31604,64],{"class":49},[36,31606,31607],{"class":416},"out_channels",[36,31609,54],{"class":53},[36,31611,1230],{"class":60},[36,31613,64],{"class":49},[36,31615,31616],{"class":416},"kernel_size",[36,31618,54],{"class":53},[36,31620,157],{"class":60},[36,31622,64],{"class":49},[36,31624,31625],{"class":416},"padding",[36,31627,54],{"class":53},[36,31629,181],{"class":60},[36,31631,75],{"class":49},[36,31633,31634,31636,31639,31641],{"class":38,"line":2403},[36,31635,31587],{"class":60},[36,31637,31638],{"class":49},".sig",[36,31640,54],{"class":53},[36,31642,31643],{"class":49},"nn.Sigmoid()\n",[36,31645,31646],{"class":38,"line":2424},[36,31647,31648],{"class":42},"        # 定义池化\n",[36,31650,31651,31653,31656,31658,31661,31663,31665,31667,31669,31672,31674,31676],{"class":38,"line":2429},[36,31652,31587],{"class":60},[36,31654,31655],{"class":49},".s2",[36,31657,54],{"class":53},[36,31659,31660],{"class":49},"nn.AvgPool2d(",[36,31662,31616],{"class":416},[36,31664,54],{"class":53},[36,31666,181],{"class":60},[36,31668,64],{"class":49},[36,31670,31671],{"class":416},"stride",[36,31673,54],{"class":53},[36,31675,181],{"class":60},[36,31677,75],{"class":49},[36,31679,31680,31682,31685,31687,31689,31691,31693,31695,31697,31699,31701,31703,31705,31707,31709,31711],{"class":38,"line":2443},[36,31681,31587],{"class":60},[36,31683,31684],{"class":49},".c3",[36,31686,54],{"class":53},[36,31688,31595],{"class":49},[36,31690,31598],{"class":416},[36,31692,54],{"class":53},[36,31694,1230],{"class":60},[36,31696,64],{"class":49},[36,31698,31607],{"class":416},[36,31700,54],{"class":53},[36,31702,1483],{"class":60},[36,31704,64],{"class":49},[36,31706,31616],{"class":416},[36,31708,54],{"class":53},[36,31710,157],{"class":60},[36,31712,75],{"class":49},[36,31714,31715,31717,31720,31722,31724,31726,31728,31730,31732,31734,31736,31738],{"class":38,"line":2448},[36,31716,31587],{"class":60},[36,31718,31719],{"class":49},".s4",[36,31721,54],{"class":53},[36,31723,31660],{"class":49},[36,31725,31616],{"class":416},[36,31727,54],{"class":53},[36,31729,181],{"class":60},[36,31731,64],{"class":49},[36,31733,31671],{"class":416},[36,31735,54],{"class":53},[36,31737,181],{"class":60},[36,31739,75],{"class":49},[36,31741,31742],{"class":38,"line":2477},[36,31743,31744],{"class":42},"        # 定义平展层\n",[36,31746,31747,31749,31752,31754],{"class":38,"line":2482},[36,31748,31587],{"class":60},[36,31750,31751],{"class":49},".flatten",[36,31753,54],{"class":53},[36,31755,31756],{"class":49},"nn.Flatten()\n",[36,31758,31759],{"class":38,"line":2499},[36,31760,31761],{"class":42},"        # 定义全连接层\n",[36,31763,31764,31766,31769,31771,31774,31776,31778,31780],{"class":38,"line":2504},[36,31765,31587],{"class":60},[36,31767,31768],{"class":49},".f5",[36,31770,54],{"class":53},[36,31772,31773],{"class":49},"nn.Linear(",[36,31775,4736],{"class":60},[36,31777,64],{"class":49},[36,31779,1697],{"class":60},[36,31781,75],{"class":49},[36,31783,31784,31786,31789,31791,31793,31795,31797,31799],{"class":38,"line":2509},[36,31785,31587],{"class":60},[36,31787,31788],{"class":49},".f6",[36,31790,54],{"class":53},[36,31792,31773],{"class":49},[36,31794,1697],{"class":60},[36,31796,64],{"class":49},[36,31798,1592],{"class":60},[36,31800,75],{"class":49},[36,31802,31803,31805,31808,31810,31812,31814,31816,31818],{"class":38,"line":2514},[36,31804,31587],{"class":60},[36,31806,31807],{"class":49},".f7",[36,31809,54],{"class":53},[36,31811,31773],{"class":49},[36,31813,1592],{"class":60},[36,31815,64],{"class":49},[36,31817,332],{"class":60},[36,31819,75],{"class":49},[36,31821,31822],{"class":38,"line":2528},[36,31823,194],{"emptyLinePlaceholder":193},[36,31825,31826],{"class":38,"line":2533},[36,31827,31828],{"class":42},"    # 写工具->写前向传播\n",[36,31830,31831,31833,31836],{"class":38,"line":3326},[36,31832,31543],{"class":53},[36,31834,31835],{"class":2713}," forward",[36,31837,31838],{"class":49},"(self,x):\n",[36,31840,31841,31844,31846,31848,31851,31853],{"class":38,"line":3340},[36,31842,31843],{"class":49},"        x",[36,31845,54],{"class":53},[36,31847,31565],{"class":60},[36,31849,31850],{"class":49},".sig(",[36,31852,31565],{"class":60},[36,31854,31855],{"class":49},".c1(x))\n",[36,31857,31858,31860,31862,31864],{"class":38,"line":3348},[36,31859,31843],{"class":49},[36,31861,54],{"class":53},[36,31863,31565],{"class":60},[36,31865,31866],{"class":49},".s2(x)\n",[36,31868,31869,31871,31873,31875,31877,31879],{"class":38,"line":3353},[36,31870,31843],{"class":49},[36,31872,54],{"class":53},[36,31874,31565],{"class":60},[36,31876,31850],{"class":49},[36,31878,31565],{"class":60},[36,31880,31881],{"class":49},".c3(x))\n",[36,31883,31884,31886,31888,31890],{"class":38,"line":3359},[36,31885,31843],{"class":49},[36,31887,54],{"class":53},[36,31889,31565],{"class":60},[36,31891,31892],{"class":49},".s4(x)\n",[36,31894,31895,31897,31899,31901],{"class":38,"line":3365},[36,31896,31843],{"class":49},[36,31898,54],{"class":53},[36,31900,31565],{"class":60},[36,31902,31903],{"class":49},".flatten(x)\n",[36,31905,31906,31908,31910,31912,31914,31916],{"class":38,"line":3370},[36,31907,31843],{"class":49},[36,31909,54],{"class":53},[36,31911,31565],{"class":60},[36,31913,31850],{"class":49},[36,31915,31565],{"class":60},[36,31917,31918],{"class":49},".f5(x))\n",[36,31920,31921,31923,31925,31927,31929,31931],{"class":38,"line":8695},[36,31922,31843],{"class":49},[36,31924,54],{"class":53},[36,31926,31565],{"class":60},[36,31928,31850],{"class":49},[36,31930,31565],{"class":60},[36,31932,31933],{"class":49},".f6(x))\n",[36,31935,31936,31938,31940,31942],{"class":38,"line":8719},[36,31937,31843],{"class":49},[36,31939,54],{"class":53},[36,31941,31565],{"class":60},[36,31943,31944],{"class":49},".f7(x)\n",[36,31946,31947,31949],{"class":38,"line":8724},[36,31948,15496],{"class":53},[36,31950,31951],{"class":49}," x\n",[36,31953,31954],{"class":38,"line":8730},[36,31955,194],{"emptyLinePlaceholder":193},[36,31957,31958,31960,31963,31965,31968],{"class":38,"line":8757},[36,31959,2281],{"class":53},[36,31961,31962],{"class":60}," __name__",[36,31964,3698],{"class":53},[36,31966,31967],{"class":998},"\"__main__\"",[36,31969,4488],{"class":49},[36,31971,31972],{"class":38,"line":8762},[36,31973,31974],{"class":42},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[36,31976,31977,31980,31982,31984,31987,31989,31992,31994,31996],{"class":38,"line":8768},[36,31978,31979],{"class":49},"    device",[36,31981,54],{"class":53},[36,31983,31193],{"class":49},[36,31985,31986],{"class":998},"\"cuda\"",[36,31988,2454],{"class":53},[36,31990,31991],{"class":49}," torch.cuda.is_available() ",[36,31993,2451],{"class":53},[36,31995,31218],{"class":998},[36,31997,75],{"class":49},[36,31999,32000],{"class":38,"line":8780},[36,32001,32002],{"class":42},"    # 如果就是想指定用cpu用下方代码:\n",[36,32004,32005],{"class":38,"line":8792},[36,32006,32007],{"class":42},"    # device=\"cpu\"\n",[36,32009,32010],{"class":38,"line":8804},[36,32011,32012],{"class":42},"    # print(device)\n",[36,32014,32015],{"class":38,"line":10463},[36,32016,194],{"emptyLinePlaceholder":193},[36,32018,32019],{"class":38,"line":10488},[36,32020,32021],{"class":42},"    # 实例化模型\n",[36,32023,32024],{"class":38,"line":10511},[36,32025,32026],{"class":42},"    # 将模型放到设备中去运行\n",[36,32028,32029,32032,32034],{"class":38,"line":10535},[36,32030,32031],{"class":49},"    model",[36,32033,54],{"class":53},[36,32035,32036],{"class":49},"LeNet().to(device)\n",[36,32038,32039,32042,32045,32047,32049,32051,32053,32055],{"class":38,"line":10540},[36,32040,32041],{"class":60},"    print",[36,32043,32044],{"class":49},"(summary(model,(",[36,32046,61],{"class":60},[36,32048,64],{"class":49},[36,32050,1780],{"class":60},[36,32052,64],{"class":49},[36,32054,1780],{"class":60},[36,32056,32057],{"class":49},")))\n",[14,32059,32060],{},[2212,32061],{"alt":31,"src":32062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[14,32064,32065],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[851,32067,32068],{"start":46},[854,32069,32070],{},"训练",[14,32072,32073],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,32075,32076],{},"在训练之前可以将数据展示看一下",[26,32078,32080],{"className":28,"code":32079,"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,32081,32082,32087,32092,32104,32116,32129,32134,32146,32151,32163,32168,32180,32184,32188,32209,32221,32226,32247,32258,32262,32267,32285,32296,32301,32312,32317,32328,32332,32337,32352,32365,32370,32375,32388,32401,32414,32419,32423,32428,32448,32465,32485,32498,32511,32521,32536],{"__ignoreMap":31},[36,32083,32084],{"class":38,"line":39},[36,32085,32086],{"class":42},"# 建立画图的函数，用于展示数据\n",[36,32088,32089],{"class":38,"line":46},[36,32090,32091],{"class":42},"# torchvision中包含很多内置的数据集\n",[36,32093,32094,32096,32099,32101],{"class":38,"line":78},[36,32095,31479],{"class":53},[36,32097,32098],{"class":49}," sklearn.externals.array_api_compat.torch ",[36,32100,31135],{"class":53},[36,32102,32103],{"class":49}," squeeze\n",[36,32105,32106,32108,32111,32113],{"class":38,"line":125},[36,32107,31479],{"class":53},[36,32109,32110],{"class":49}," torchvision.datasets ",[36,32112,31135],{"class":53},[36,32114,32115],{"class":49}," FashionMNIST\n",[36,32117,32118,32120,32123,32126],{"class":38,"line":131},[36,32119,31135],{"class":53},[36,32121,32122],{"class":49}," numpy ",[36,32124,32125],{"class":53},"as",[36,32127,32128],{"class":49}," np\n",[36,32130,32131],{"class":38,"line":396},[36,32132,32133],{"class":42},"# 引入处理数据集的包\n",[36,32135,32136,32138,32141,32143],{"class":38,"line":407},[36,32137,31479],{"class":53},[36,32139,32140],{"class":49}," torchvision ",[36,32142,31135],{"class":53},[36,32144,32145],{"class":49}," transforms\n",[36,32147,32148],{"class":38,"line":2061},[36,32149,32150],{"class":42},"# 从torch库中引入数据处理的包\n",[36,32152,32153,32155,32158,32160],{"class":38,"line":2067},[36,32154,31135],{"class":53},[36,32156,32157],{"class":49}," torch.utils.data ",[36,32159,32125],{"class":53},[36,32161,32162],{"class":49}," Data\n",[36,32164,32165],{"class":38,"line":2079},[36,32166,32167],{"class":42},"# 导入画图的库\n",[36,32169,32170,32172,32175,32177],{"class":38,"line":2362},[36,32171,31135],{"class":53},[36,32173,32174],{"class":49}," matplotlib.pyplot ",[36,32176,32125],{"class":53},[36,32178,32179],{"class":49}," plt\n",[36,32181,32182],{"class":38,"line":2367},[36,32183,194],{"emptyLinePlaceholder":193},[36,32185,32186],{"class":38,"line":2373},[36,32187,194],{"emptyLinePlaceholder":193},[36,32189,32190,32193,32195,32198,32201,32203,32206],{"class":38,"line":2378},[36,32191,32192],{"class":49},"train_data",[36,32194,54],{"class":53},[36,32196,32197],{"class":49},"FashionMNIST(",[36,32199,32200],{"class":416},"root",[36,32202,54],{"class":53},[36,32204,32205],{"class":998},"'.\u002Fdata'",[36,32207,32208],{"class":49},",\n",[36,32210,32211,32214,32216,32219],{"class":38,"line":2392},[36,32212,32213],{"class":416},"                        train",[36,32215,54],{"class":53},[36,32217,32218],{"class":60},"True",[36,32220,32208],{"class":49},[36,32222,32223],{"class":38,"line":2397},[36,32224,32225],{"class":42},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[36,32227,32228,32231,32233,32236,32239,32241,32244],{"class":38,"line":2403},[36,32229,32230],{"class":416},"                        transform",[36,32232,54],{"class":53},[36,32234,32235],{"class":49},"transforms.Compose([transforms.Resize(",[36,32237,32238],{"class":416},"size",[36,32240,54],{"class":53},[36,32242,32243],{"class":60},"224",[36,32245,32246],{"class":49},"),transforms.ToTensor()]),\n",[36,32248,32249,32252,32254,32256],{"class":38,"line":2424},[36,32250,32251],{"class":416},"                        download",[36,32253,54],{"class":53},[36,32255,32218],{"class":60},[36,32257,75],{"class":49},[36,32259,32260],{"class":38,"line":2429},[36,32261,194],{"emptyLinePlaceholder":193},[36,32263,32264],{"class":38,"line":2443},[36,32265,32266],{"class":42},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[36,32268,32269,32272,32274,32277,32280,32282],{"class":38,"line":2448},[36,32270,32271],{"class":49},"train_loader",[36,32273,54],{"class":53},[36,32275,32276],{"class":49},"Data.DataLoader(",[36,32278,32279],{"class":416},"dataset",[36,32281,54],{"class":53},[36,32283,32284],{"class":49},"train_data,\n",[36,32286,32287,32290,32292,32294],{"class":38,"line":2477},[36,32288,32289],{"class":416},"                             batch_size",[36,32291,54],{"class":53},[36,32293,1095],{"class":60},[36,32295,32208],{"class":49},[36,32297,32298],{"class":38,"line":2482},[36,32299,32300],{"class":42},"                             # 数据是否打乱\n",[36,32302,32303,32306,32308,32310],{"class":38,"line":2499},[36,32304,32305],{"class":416},"                             shuffle",[36,32307,54],{"class":53},[36,32309,32218],{"class":60},[36,32311,32208],{"class":49},[36,32313,32314],{"class":38,"line":2504},[36,32315,32316],{"class":42},"                             # 规定加载数据的进程\n",[36,32318,32319,32322,32324,32326],{"class":38,"line":2509},[36,32320,32321],{"class":416},"                             num_workers",[36,32323,54],{"class":53},[36,32325,643],{"class":60},[36,32327,75],{"class":49},[36,32329,32330],{"class":38,"line":2514},[36,32331,194],{"emptyLinePlaceholder":193},[36,32333,32334],{"class":38,"line":2528},[36,32335,32336],{"class":42},"# 获得一个batch的数据\n",[36,32338,32339,32341,32344,32346,32349],{"class":38,"line":2533},[36,32340,3774],{"class":53},[36,32342,32343],{"class":49}," step,(b_x,b_y) ",[36,32345,26788],{"class":53},[36,32347,32348],{"class":60}," enumerate",[36,32350,32351],{"class":49},"(train_loader):\n",[36,32353,32354,32356,32359,32361,32363],{"class":38,"line":3326},[36,32355,3850],{"class":53},[36,32357,32358],{"class":49}," step ",[36,32360,1839],{"class":53},[36,32362,4842],{"class":60},[36,32364,4488],{"class":49},[36,32366,32367],{"class":38,"line":3340},[36,32368,32369],{"class":53},"        break\n",[36,32371,32372],{"class":38,"line":3348},[36,32373,32374],{"class":42},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[36,32376,32377,32380,32382,32385],{"class":38,"line":3353},[36,32378,32379],{"class":49},"batch_x",[36,32381,54],{"class":53},[36,32383,32384],{"class":49},"b_x.squeeze().numpy()  ",[36,32386,32387],{"class":42},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[36,32389,32390,32393,32395,32398],{"class":38,"line":3359},[36,32391,32392],{"class":49},"batch_y",[36,32394,54],{"class":53},[36,32396,32397],{"class":49},"b_y.numpy()   ",[36,32399,32400],{"class":42},"#将张量转换成功numpy数组\n",[36,32402,32403,32406,32408,32411],{"class":38,"line":3365},[36,32404,32405],{"class":49},"class_label",[36,32407,54],{"class":53},[36,32409,32410],{"class":49},"train_data.classes  ",[36,32412,32413],{"class":42},"#训练集标签\n",[36,32415,32416],{"class":38,"line":3370},[36,32417,32418],{"class":42},"# print(class_label)\n",[36,32420,32421],{"class":38,"line":8695},[36,32422,194],{"emptyLinePlaceholder":193},[36,32424,32425],{"class":38,"line":8719},[36,32426,32427],{"class":42},"# 可视化一个batch的图像\n",[36,32429,32430,32433,32436,32438,32440,32442,32444,32446],{"class":38,"line":8724},[36,32431,32432],{"class":49},"plt.figure(",[36,32434,32435],{"class":416},"figsize",[36,32437,54],{"class":53},[36,32439,901],{"class":49},[36,32441,625],{"class":60},[36,32443,64],{"class":49},[36,32445,157],{"class":60},[36,32447,31239],{"class":49},[36,32449,32450,32452,32455,32457,32460,32462],{"class":38,"line":8730},[36,32451,3774],{"class":53},[36,32453,32454],{"class":49}," ii ",[36,32456,26788],{"class":53},[36,32458,32459],{"class":49}," np.arange(",[36,32461,8105],{"class":60},[36,32463,32464],{"class":49},"(batch_y)):\n",[36,32466,32467,32470,32472,32474,32476,32479,32481,32483],{"class":38,"line":8757},[36,32468,32469],{"class":49},"    plt.subplot(",[36,32471,186],{"class":60},[36,32473,64],{"class":49},[36,32475,1483],{"class":60},[36,32477,32478],{"class":49},",ii ",[36,32480,1365],{"class":53},[36,32482,25863],{"class":60},[36,32484,75],{"class":49},[36,32486,32487,32490,32493,32495],{"class":38,"line":8762},[36,32488,32489],{"class":49},"    plt.imshow(batch_x[ii,:,:],",[36,32491,32492],{"class":416},"cmap",[36,32494,54],{"class":53},[36,32496,32497],{"class":49},"plt.cm.gray)\n",[36,32499,32500,32503,32505,32507,32509],{"class":38,"line":8768},[36,32501,32502],{"class":49},"    plt.title(class_label[batch_y[ii]],",[36,32504,32238],{"class":416},[36,32506,54],{"class":53},[36,32508,332],{"class":60},[36,32510,75],{"class":49},[36,32512,32513,32516,32519],{"class":38,"line":8780},[36,32514,32515],{"class":49},"    plt.axis(",[36,32517,32518],{"class":998},"\"off\"",[36,32520,75],{"class":49},[36,32522,32523,32526,32529,32531,32534],{"class":38,"line":8792},[36,32524,32525],{"class":49},"    plt.subplots_adjust(",[36,32527,32528],{"class":416},"wspace",[36,32530,54],{"class":53},[36,32532,32533],{"class":60},"0.05",[36,32535,75],{"class":49},[36,32537,32538],{"class":38,"line":8804},[36,32539,32540],{"class":49},"plt.show()\n",[14,32542,32543],{},"用matplotlib进行展示的过程可以后续再补",[14,32545,32546],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,32548,32549],{},"训练次数就是按照批次过整个训练集数据的次数",[14,32551,32552],{},"模型训练：",[26,32554,32556],{"className":28,"code":32555,"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,32557,32558,32565,32572,32576,32588,32594,32605,32615,32625,32635,32645,32650,32662,32672,32676,32680,32685,32696,32709,32720,32737,32748,32787,32803,32815,32826,32831,32842,32858,32869,32880,32891,32898,32902,32907,32912,32916,32921,32931,32952,32956,32960,32965,32970,32975,32995,32999,33004,33014,33018,33023,33032,33037,33042,33047,33057,33061,33065,33070,33075,33085,33090,33100,33105,33114,33119,33128,33133,33142,33146,33151,33161,33165,33169,33174,33189,33217,33232,33236,33241,33246,33255,33260,33269,33274,33283,33288,33297,33302,33311,33316,33325,33330,33343,33348,33358,33363,33373,33379,33385,33391,33397,33408,33414,33434,33440,33451,33457,33463,33469,33475,33481,33487,33493,33513,33519,33535,33541,33555,33561,33576,33582,33591,33597,33606,33612,33618,33627,33633,33644,33650,33669,33675,33686,33692,33712,33728,33734,33748,33754,33760,33771,33777,33783,33793,33799,33810,33816,33826,33831,33837,33886,33933,33938,33944,33963,33969,33989,33995,34001,34011,34016,34022,34038,34083,34089,34095,34101,34112,34118,34124,34130,34148,34162,34171,34180,34189,34198,34204,34210,34218,34223,34229,34240,34246,34266,34272,34278,34284,34301,34307,34313,34319,34325,34331,34358,34382,34388,34394,34400,34411,34422,34428,34445,34468,34491,34497,34502,34511,34521,34527,34532,34538,34551,34557,34568,34579,34598],{"__ignoreMap":31},[36,32559,32560,32562],{"class":38,"line":39},[36,32561,31135],{"class":53},[36,32563,32564],{"class":49}," copy\n",[36,32566,32567,32569],{"class":38,"line":46},[36,32568,31135],{"class":53},[36,32570,32571],{"class":49}," time\n",[36,32573,32574],{"class":38,"line":78},[36,32575,194],{"emptyLinePlaceholder":193},[36,32577,32578,32580,32583,32585],{"class":38,"line":125},[36,32579,31135],{"class":53},[36,32581,32582],{"class":49}," pandas ",[36,32584,32125],{"class":53},[36,32586,32587],{"class":49}," pd\n",[36,32589,32590,32592],{"class":38,"line":131},[36,32591,31135],{"class":53},[36,32593,31138],{"class":49},[36,32595,32596,32598,32600,32602],{"class":38,"line":396},[36,32597,31479],{"class":53},[36,32599,32157],{"class":49},[36,32601,31135],{"class":53},[36,32603,32604],{"class":49}," Dataset\n",[36,32606,32607,32609,32611,32613],{"class":38,"line":407},[36,32608,31479],{"class":53},[36,32610,32110],{"class":49},[36,32612,31135],{"class":53},[36,32614,32115],{"class":49},[36,32616,32617,32619,32621,32623],{"class":38,"line":2061},[36,32618,31479],{"class":53},[36,32620,32140],{"class":49},[36,32622,31135],{"class":53},[36,32624,32145],{"class":49},[36,32626,32627,32629,32631,32633],{"class":38,"line":2067},[36,32628,31135],{"class":53},[36,32630,32157],{"class":49},[36,32632,32125],{"class":53},[36,32634,32162],{"class":49},[36,32636,32637,32639,32641,32643],{"class":38,"line":2079},[36,32638,31135],{"class":53},[36,32640,32174],{"class":49},[36,32642,32125],{"class":53},[36,32644,32179],{"class":49},[36,32646,32647],{"class":38,"line":2362},[36,32648,32649],{"class":42},"# 导入模型\n",[36,32651,32652,32654,32657,32659],{"class":38,"line":2367},[36,32653,31479],{"class":53},[36,32655,32656],{"class":49}," model ",[36,32658,31135],{"class":53},[36,32660,32661],{"class":49}," LeNet\n",[36,32663,32664,32666,32668,32670],{"class":38,"line":2373},[36,32665,31479],{"class":53},[36,32667,31482],{"class":49},[36,32669,31135],{"class":53},[36,32671,31487],{"class":49},[36,32673,32674],{"class":38,"line":2378},[36,32675,194],{"emptyLinePlaceholder":193},[36,32677,32678],{"class":38,"line":2392},[36,32679,194],{"emptyLinePlaceholder":193},[36,32681,32682],{"class":38,"line":2397},[36,32683,32684],{"class":42},"# 处理训练集与验证集函数--->划分数据集\n",[36,32686,32687,32690,32693],{"class":38,"line":2403},[36,32688,32689],{"class":53},"def",[36,32691,32692],{"class":2713}," train_val_data_process",[36,32694,32695],{"class":49},"():\n",[36,32697,32698,32701,32703,32705,32707],{"class":38,"line":2424},[36,32699,32700],{"class":49},"    train_data",[36,32702,54],{"class":53},[36,32704,32197],{"class":49},[36,32706,32205],{"class":998},[36,32708,32208],{"class":49},[36,32710,32711,32714,32716,32718],{"class":38,"line":2429},[36,32712,32713],{"class":416},"                            train",[36,32715,54],{"class":53},[36,32717,32218],{"class":60},[36,32719,32208],{"class":49},[36,32721,32722,32725,32727,32729,32731,32733,32735],{"class":38,"line":2443},[36,32723,32724],{"class":416},"                            transform",[36,32726,54],{"class":53},[36,32728,32235],{"class":49},[36,32730,32238],{"class":416},[36,32732,54],{"class":53},[36,32734,1780],{"class":60},[36,32736,32246],{"class":49},[36,32738,32739,32742,32744,32746],{"class":38,"line":2448},[36,32740,32741],{"class":416},"                            download",[36,32743,54],{"class":53},[36,32745,32218],{"class":60},[36,32747,75],{"class":49},[36,32749,32750,32753,32755,32758,32761,32763,32766,32768,32770,32773,32775,32777,32780,32782,32784],{"class":38,"line":2477},[36,32751,32752],{"class":49},"    train_data,val_data",[36,32754,54],{"class":53},[36,32756,32757],{"class":49},"Data.random_split(train_data,[",[36,32759,32760],{"class":60},"round",[36,32762,901],{"class":49},[36,32764,32765],{"class":60},"0.8",[36,32767,1339],{"class":53},[36,32769,8105],{"class":60},[36,32771,32772],{"class":49},"(train_data)),",[36,32774,32760],{"class":60},[36,32776,901],{"class":49},[36,32778,32779],{"class":60},"0.2",[36,32781,1339],{"class":53},[36,32783,8105],{"class":60},[36,32785,32786],{"class":49},"(train_data))])\n",[36,32788,32789,32792,32794,32797,32799,32801],{"class":38,"line":2482},[36,32790,32791],{"class":49},"    train_dataloader ",[36,32793,54],{"class":53},[36,32795,32796],{"class":49}," Data.DataLoader(",[36,32798,32279],{"class":416},[36,32800,54],{"class":53},[36,32802,32284],{"class":49},[36,32804,32805,32808,32810,32813],{"class":38,"line":2499},[36,32806,32807],{"class":416},"                                       batch_size",[36,32809,54],{"class":53},[36,32811,32812],{"class":60},"128",[36,32814,32208],{"class":49},[36,32816,32817,32820,32822,32824],{"class":38,"line":2504},[36,32818,32819],{"class":416},"                                       shuffle",[36,32821,54],{"class":53},[36,32823,32218],{"class":60},[36,32825,32208],{"class":49},[36,32827,32828],{"class":38,"line":2509},[36,32829,32830],{"class":42},"                                       # 规定8个进程\n",[36,32832,32833,32836,32838,32840],{"class":38,"line":2514},[36,32834,32835],{"class":416},"                                       num_workers",[36,32837,54],{"class":53},[36,32839,1280],{"class":60},[36,32841,75],{"class":49},[36,32843,32844,32847,32849,32851,32853,32855],{"class":38,"line":2528},[36,32845,32846],{"class":49},"    val_dataloader",[36,32848,54],{"class":53},[36,32850,32276],{"class":49},[36,32852,32279],{"class":416},[36,32854,54],{"class":53},[36,32856,32857],{"class":49},"val_data,\n",[36,32859,32860,32863,32865,32867],{"class":38,"line":2533},[36,32861,32862],{"class":416},"                                   batch_size",[36,32864,54],{"class":53},[36,32866,32812],{"class":60},[36,32868,32208],{"class":49},[36,32870,32871,32874,32876,32878],{"class":38,"line":3326},[36,32872,32873],{"class":416},"                                   shuffle",[36,32875,54],{"class":53},[36,32877,32218],{"class":60},[36,32879,32208],{"class":49},[36,32881,32882,32885,32887,32889],{"class":38,"line":3340},[36,32883,32884],{"class":416},"                                   num_workers",[36,32886,54],{"class":53},[36,32888,1280],{"class":60},[36,32890,75],{"class":49},[36,32892,32893,32895],{"class":38,"line":3348},[36,32894,4839],{"class":53},[36,32896,32897],{"class":49}," train_dataloader,val_dataloader\n",[36,32899,32900],{"class":38,"line":3353},[36,32901,194],{"emptyLinePlaceholder":193},[36,32903,32904],{"class":38,"line":3359},[36,32905,32906],{"class":42},"# 验证是否出错\n",[36,32908,32909],{"class":38,"line":3365},[36,32910,32911],{"class":42},"# train_val_data_process()\n",[36,32913,32914],{"class":38,"line":3370},[36,32915,194],{"emptyLinePlaceholder":193},[36,32917,32918],{"class":38,"line":8695},[36,32919,32920],{"class":42},"# 定义模型训练函数\n",[36,32922,32923,32925,32928],{"class":38,"line":8719},[36,32924,32689],{"class":53},[36,32926,32927],{"class":2713}," train_model_process",[36,32929,32930],{"class":49},"(model,train_dataloader,val_dataloader,num_epochs):\n",[36,32932,32933,32935,32937,32939,32941,32943,32945,32947,32950],{"class":38,"line":8724},[36,32934,31979],{"class":49},[36,32936,54],{"class":53},[36,32938,31193],{"class":49},[36,32940,31986],{"class":998},[36,32942,2454],{"class":53},[36,32944,31991],{"class":49},[36,32946,2451],{"class":53},[36,32948,32949],{"class":998}," 'cpu'",[36,32951,75],{"class":49},[36,32953,32954],{"class":38,"line":8730},[36,32955,194],{"emptyLinePlaceholder":193},[36,32957,32958],{"class":38,"line":8757},[36,32959,194],{"emptyLinePlaceholder":193},[36,32961,32962],{"class":38,"line":8762},[36,32963,32964],{"class":42},"    # 定义优化器\n",[36,32966,32967],{"class":38,"line":8768},[36,32968,32969],{"class":42},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[36,32971,32972],{"class":38,"line":8780},[36,32973,32974],{"class":42},"    # lr为学习率\n",[36,32976,32977,32980,32982,32985,32988,32990,32993],{"class":38,"line":8792},[36,32978,32979],{"class":49},"    optimizer",[36,32981,54],{"class":53},[36,32983,32984],{"class":49},"torch.optim.Adam(model.parameters(),",[36,32986,32987],{"class":416},"lr",[36,32989,54],{"class":53},[36,32991,32992],{"class":60},"0.001",[36,32994,75],{"class":49},[36,32996,32997],{"class":38,"line":8804},[36,32998,194],{"emptyLinePlaceholder":193},[36,33000,33001],{"class":38,"line":10463},[36,33002,33003],{"class":42},"    # 定义损失函数使用交叉熵损失函数\n",[36,33005,33006,33009,33011],{"class":38,"line":10488},[36,33007,33008],{"class":49},"    criterion",[36,33010,54],{"class":53},[36,33012,33013],{"class":49},"nn.CrossEntropyLoss()\n",[36,33015,33016],{"class":38,"line":10511},[36,33017,194],{"emptyLinePlaceholder":193},[36,33019,33020],{"class":38,"line":10535},[36,33021,33022],{"class":42},"    # 将模型放到GPU中进行训练\n",[36,33024,33025,33027,33029],{"class":38,"line":10540},[36,33026,32031],{"class":49},[36,33028,54],{"class":53},[36,33030,33031],{"class":49},"model.to(device)\n",[36,33033,33034],{"class":38,"line":10545},[36,33035,33036],{"class":42},"    # 复制当前模型的参数\n",[36,33038,33039],{"class":38,"line":10550},[36,33040,33041],{"class":42},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[36,33043,33044],{"class":38,"line":10559},[36,33045,33046],{"class":42},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[36,33048,33049,33052,33054],{"class":38,"line":10564},[36,33050,33051],{"class":49},"    best_model_wts",[36,33053,54],{"class":53},[36,33055,33056],{"class":49},"copy.deepcopy(model.state_dict())\n",[36,33058,33059],{"class":38,"line":10570},[36,33060,194],{"emptyLinePlaceholder":193},[36,33062,33063],{"class":38,"line":10591},[36,33064,194],{"emptyLinePlaceholder":193},[36,33066,33067],{"class":38,"line":10597},[36,33068,33069],{"class":42},"    # 初始化参数\n",[36,33071,33072],{"class":38,"line":10611},[36,33073,33074],{"class":42},"    # 最高准确度\n",[36,33076,33077,33080,33082],{"class":38,"line":10617},[36,33078,33079],{"class":49},"    best_acc",[36,33081,54],{"class":53},[36,33083,33084],{"class":60},"0.0\n",[36,33086,33087],{"class":38,"line":10644},[36,33088,33089],{"class":42},"    # 训练集损失列表\n",[36,33091,33092,33095,33097],{"class":38,"line":10653},[36,33093,33094],{"class":49},"    train_loss_all",[36,33096,54],{"class":53},[36,33098,33099],{"class":49},"[]\n",[36,33101,33102],{"class":38,"line":10659},[36,33103,33104],{"class":42},"    # 验证集函数列表\n",[36,33106,33107,33110,33112],{"class":38,"line":10667},[36,33108,33109],{"class":49},"    val_loss_all",[36,33111,54],{"class":53},[36,33113,33099],{"class":49},[36,33115,33116],{"class":38,"line":10672},[36,33117,33118],{"class":42},"    # 训练集准确度列表\n",[36,33120,33121,33124,33126],{"class":38,"line":17348},[36,33122,33123],{"class":49},"    train_acc_all",[36,33125,54],{"class":53},[36,33127,33099],{"class":49},[36,33129,33130],{"class":38,"line":17354},[36,33131,33132],{"class":42},"    # 验证集准确度列表\n",[36,33134,33135,33138,33140],{"class":38,"line":17377},[36,33136,33137],{"class":49},"    val_acc_all",[36,33139,54],{"class":53},[36,33141,33099],{"class":49},[36,33143,33144],{"class":38,"line":17383},[36,33145,194],{"emptyLinePlaceholder":193},[36,33147,33148],{"class":38,"line":17406},[36,33149,33150],{"class":42},"    # 保存当前时间--->方便看每轮训练的时间\n",[36,33152,33153,33156,33158],{"class":38,"line":17420},[36,33154,33155],{"class":49},"    since",[36,33157,54],{"class":53},[36,33159,33160],{"class":49},"time.time()\n",[36,33162,33163],{"class":38,"line":17440},[36,33164,194],{"emptyLinePlaceholder":193},[36,33166,33167],{"class":38,"line":17446},[36,33168,194],{"emptyLinePlaceholder":193},[36,33170,33171],{"class":38,"line":17457},[36,33172,33173],{"class":42},"    # 准备工作完成--->开始训练模型\n",[36,33175,33176,33178,33181,33183,33186],{"class":38,"line":17480},[36,33177,3950],{"class":53},[36,33179,33180],{"class":49}," epoch ",[36,33182,26788],{"class":53},[36,33184,33185],{"class":60}," range",[36,33187,33188],{"class":49},"(num_epochs):\n",[36,33190,33191,33194,33196,33199,33202,33204,33206,33208,33211,33213,33215],{"class":38,"line":17502},[36,33192,33193],{"class":60},"        print",[36,33195,901],{"class":49},[36,33197,33198],{"class":998},"\"Epoch ",[36,33200,33201],{"class":60},"{}",[36,33203,1466],{"class":998},[36,33205,33201],{"class":60},[36,33207,1141],{"class":998},[36,33209,33210],{"class":49},".format(epoch,num_epochs",[36,33212,1414],{"class":53},[36,33214,61],{"class":60},[36,33216,31239],{"class":49},[36,33218,33219,33221,33223,33226,33228,33230],{"class":38,"line":17507},[36,33220,33193],{"class":60},[36,33222,901],{"class":49},[36,33224,33225],{"class":998},"\"-\"",[36,33227,1339],{"class":53},[36,33229,332],{"class":60},[36,33231,75],{"class":49},[36,33233,33234],{"class":38,"line":17513},[36,33235,194],{"emptyLinePlaceholder":193},[36,33237,33238],{"class":38,"line":17527},[36,33239,33240],{"class":42},"        # 初始化参数\n",[36,33242,33243],{"class":38,"line":17540},[36,33244,33245],{"class":42},"        # 训练集损失函数\n",[36,33247,33248,33251,33253],{"class":38,"line":17545},[36,33249,33250],{"class":49},"        train_loss",[36,33252,54],{"class":53},[36,33254,33084],{"class":60},[36,33256,33257],{"class":38,"line":17559},[36,33258,33259],{"class":42},"        # 训练集准确度\n",[36,33261,33262,33265,33267],{"class":38,"line":17564},[36,33263,33264],{"class":49},"        train_corrects",[36,33266,54],{"class":53},[36,33268,3834],{"class":60},[36,33270,33271],{"class":38,"line":17570},[36,33272,33273],{"class":42},"        # 验证集损失函数\n",[36,33275,33276,33279,33281],{"class":38,"line":17575},[36,33277,33278],{"class":49},"        val_loss",[36,33280,54],{"class":53},[36,33282,33084],{"class":60},[36,33284,33285],{"class":38,"line":17589},[36,33286,33287],{"class":42},"        # 验证集准确度\n",[36,33289,33290,33293,33295],{"class":38,"line":17594},[36,33291,33292],{"class":49},"        val_corrects",[36,33294,54],{"class":53},[36,33296,3834],{"class":60},[36,33298,33299],{"class":38,"line":17599},[36,33300,33301],{"class":42},"        # 训练集样本数量\n",[36,33303,33304,33307,33309],{"class":38,"line":17613},[36,33305,33306],{"class":49},"        train_num",[36,33308,54],{"class":53},[36,33310,3834],{"class":60},[36,33312,33313],{"class":38,"line":17625},[36,33314,33315],{"class":42},"        # 验证集样本数量\n",[36,33317,33318,33321,33323],{"class":38,"line":17630},[36,33319,33320],{"class":49},"        val_num",[36,33322,54],{"class":53},[36,33324,3834],{"class":60},[36,33326,33327],{"class":38,"line":17643},[36,33328,33329],{"class":42},"        # 将数据放到设备,并开始训练\n",[36,33331,33332,33334,33336,33338,33340],{"class":38,"line":17648},[36,33333,4152],{"class":53},[36,33335,32343],{"class":49},[36,33337,26788],{"class":53},[36,33339,32348],{"class":60},[36,33341,33342],{"class":49},"(train_dataloader):\n",[36,33344,33345],{"class":38,"line":17653},[36,33346,33347],{"class":42},"            # 将特征放入到训练设备\n",[36,33349,33350,33353,33355],{"class":38,"line":17658},[36,33351,33352],{"class":49},"            b_x",[36,33354,54],{"class":53},[36,33356,33357],{"class":49},"b_x.to(device)\n",[36,33359,33360],{"class":38,"line":17671},[36,33361,33362],{"class":42},"            # 将标签放入到训练设备当中\n",[36,33364,33365,33368,33370],{"class":38,"line":17676},[36,33366,33367],{"class":49},"            b_y",[36,33369,54],{"class":53},[36,33371,33372],{"class":49},"b_y.to(device)\n",[36,33374,33376],{"class":38,"line":33375},98,[36,33377,33378],{"class":42},"            # 设置模型为训练模式\n",[36,33380,33382],{"class":38,"line":33381},99,[36,33383,33384],{"class":49},"            model.train()\n",[36,33386,33388],{"class":38,"line":33387},100,[36,33389,33390],{"class":42},"            # 将数据放到模型当中,开始前向传播\n",[36,33392,33394],{"class":38,"line":33393},101,[36,33395,33396],{"class":42},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[36,33398,33400,33403,33405],{"class":38,"line":33399},102,[36,33401,33402],{"class":49},"            output",[36,33404,54],{"class":53},[36,33406,33407],{"class":49},"model(b_x)\n",[36,33409,33411],{"class":38,"line":33410},103,[36,33412,33413],{"class":42},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[36,33415,33417,33420,33422,33425,33428,33430,33432],{"class":38,"line":33416},104,[36,33418,33419],{"class":49},"            pre_lab",[36,33421,54],{"class":53},[36,33423,33424],{"class":49},"torch.argmax(output,",[36,33426,33427],{"class":416},"dim",[36,33429,54],{"class":53},[36,33431,61],{"class":60},[36,33433,75],{"class":49},[36,33435,33437],{"class":38,"line":33436},105,[36,33438,33439],{"class":42},"            # 计算每一个batch的损失函数\n",[36,33441,33443,33446,33448],{"class":38,"line":33442},106,[36,33444,33445],{"class":49},"            loss",[36,33447,54],{"class":53},[36,33449,33450],{"class":49},"criterion(output,b_y)\n",[36,33452,33454],{"class":38,"line":33453},107,[36,33455,33456],{"class":42},"            # 将梯度初始化为0\n",[36,33458,33460],{"class":38,"line":33459},108,[36,33461,33462],{"class":49},"            optimizer.zero_grad()\n",[36,33464,33466],{"class":38,"line":33465},109,[36,33467,33468],{"class":42},"            # 梯度置为0后再进行反向传播\n",[36,33470,33472],{"class":38,"line":33471},110,[36,33473,33474],{"class":49},"            loss.backward()\n",[36,33476,33478],{"class":38,"line":33477},111,[36,33479,33480],{"class":42},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[36,33482,33484],{"class":38,"line":33483},112,[36,33485,33486],{"class":49},"            optimizer.step()\n",[36,33488,33490],{"class":38,"line":33489},113,[36,33491,33492],{"class":42},"            # loss.item()指的是batch的平均损失\n",[36,33494,33496,33499,33501,33504,33506,33509,33511],{"class":38,"line":33495},114,[36,33497,33498],{"class":49},"            train_loss",[36,33500,10224],{"class":53},[36,33502,33503],{"class":49},"loss.item()",[36,33505,1339],{"class":53},[36,33507,33508],{"class":49},"b_x.size(",[36,33510,643],{"class":60},[36,33512,75],{"class":49},[36,33514,33516],{"class":38,"line":33515},115,[36,33517,33518],{"class":42},"            # 计算每个批次中正确预测的数量\n",[36,33520,33522,33525,33527,33530,33532],{"class":38,"line":33521},116,[36,33523,33524],{"class":49},"            train_corrects",[36,33526,10224],{"class":53},[36,33528,33529],{"class":49},"torch.sum(pre_lab",[36,33531,3698],{"class":53},[36,33533,33534],{"class":49},"b_y.data)\n",[36,33536,33538],{"class":38,"line":33537},117,[36,33539,33540],{"class":42},"            # 计算目前为止一共处理了多少样本\n",[36,33542,33544,33547,33549,33551,33553],{"class":38,"line":33543},118,[36,33545,33546],{"class":49},"            train_num",[36,33548,10224],{"class":53},[36,33550,33508],{"class":49},[36,33552,643],{"class":60},[36,33554,75],{"class":49},[36,33556,33558],{"class":38,"line":33557},119,[36,33559,33560],{"class":42},"        # 验证数据\n",[36,33562,33564,33566,33569,33571,33573],{"class":38,"line":33563},120,[36,33565,4152],{"class":53},[36,33567,33568],{"class":49}," step ,(b_x,b_y) ",[36,33570,26788],{"class":53},[36,33572,32348],{"class":60},[36,33574,33575],{"class":49},"(val_dataloader):\n",[36,33577,33579],{"class":38,"line":33578},121,[36,33580,33581],{"class":42},"            # 将特征放到验证设备当中\n",[36,33583,33585,33587,33589],{"class":38,"line":33584},122,[36,33586,33352],{"class":49},[36,33588,54],{"class":53},[36,33590,33357],{"class":49},[36,33592,33594],{"class":38,"line":33593},123,[36,33595,33596],{"class":42},"            # 将标签放到放到训练设备当中\n",[36,33598,33600,33602,33604],{"class":38,"line":33599},124,[36,33601,33367],{"class":49},[36,33603,54],{"class":53},[36,33605,33372],{"class":49},[36,33607,33609],{"class":38,"line":33608},125,[36,33610,33611],{"class":42},"            # 开启验证模式，设置模型为评估模式\n",[36,33613,33615],{"class":38,"line":33614},126,[36,33616,33617],{"class":49},"            model.eval()\n",[36,33619,33621,33624],{"class":38,"line":33620},127,[36,33622,33623],{"class":53},"            with",[36,33625,33626],{"class":49}," torch.no_grad():\n",[36,33628,33630],{"class":38,"line":33629},128,[36,33631,33632],{"class":42},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[36,33634,33636,33639,33641],{"class":38,"line":33635},129,[36,33637,33638],{"class":49},"                output ",[36,33640,54],{"class":53},[36,33642,33643],{"class":49}," model(b_x)\n",[36,33645,33647],{"class":38,"line":33646},130,[36,33648,33649],{"class":42},"                # 查找每一行中最大值对应的下标\n",[36,33651,33653,33656,33658,33661,33663,33665,33667],{"class":38,"line":33652},131,[36,33654,33655],{"class":49},"                pre_lab ",[36,33657,54],{"class":53},[36,33659,33660],{"class":49}," torch.argmax(output, ",[36,33662,33427],{"class":416},[36,33664,54],{"class":53},[36,33666,61],{"class":60},[36,33668,75],{"class":49},[36,33670,33672],{"class":38,"line":33671},132,[36,33673,33674],{"class":42},"                # 计算验证集上的当前 batch 损失\n",[36,33676,33678,33681,33683],{"class":38,"line":33677},133,[36,33679,33680],{"class":49},"                val_batch_loss ",[36,33682,54],{"class":53},[36,33684,33685],{"class":49}," criterion(output, b_y)\n",[36,33687,33689],{"class":38,"line":33688},134,[36,33690,33691],{"class":42},"                # 对损失函数进行累加（按样本数加权）\n",[36,33693,33695,33698,33700,33703,33705,33708,33710],{"class":38,"line":33694},135,[36,33696,33697],{"class":49},"                val_loss ",[36,33699,10224],{"class":53},[36,33701,33702],{"class":49}," val_batch_loss.item() ",[36,33704,1339],{"class":53},[36,33706,33707],{"class":49}," b_x.size(",[36,33709,643],{"class":60},[36,33711,75],{"class":49},[36,33713,33715,33718,33720,33723,33725],{"class":38,"line":33714},136,[36,33716,33717],{"class":49},"                val_corrects ",[36,33719,10224],{"class":53},[36,33721,33722],{"class":49}," torch.sum(pre_lab ",[36,33724,3698],{"class":53},[36,33726,33727],{"class":49}," b_y.data)\n",[36,33729,33731],{"class":38,"line":33730},137,[36,33732,33733],{"class":42},"                # 当前用于验证的样本数量\n",[36,33735,33737,33740,33742,33744,33746],{"class":38,"line":33736},138,[36,33738,33739],{"class":49},"            val_num ",[36,33741,10224],{"class":53},[36,33743,33707],{"class":49},[36,33745,643],{"class":60},[36,33747,75],{"class":49},[36,33749,33751],{"class":38,"line":33750},139,[36,33752,33753],{"class":42},"        # 计算并保存每一次迭代的loss值和准确率\n",[36,33755,33757],{"class":38,"line":33756},140,[36,33758,33759],{"class":42},"        # 计算并保存训练集的loss值\n",[36,33761,33763,33766,33768],{"class":38,"line":33762},141,[36,33764,33765],{"class":49},"        train_loss_all.append(train_loss",[36,33767,1466],{"class":53},[36,33769,33770],{"class":49},"train_num)\n",[36,33772,33774],{"class":38,"line":33773},142,[36,33775,33776],{"class":42},"        # 取双精度\n",[36,33778,33780],{"class":38,"line":33779},143,[36,33781,33782],{"class":42},"        # 计算并保存训练集的准确率\n",[36,33784,33786,33789,33791],{"class":38,"line":33785},144,[36,33787,33788],{"class":49},"        train_acc_all.append(train_corrects.double().item()",[36,33790,1466],{"class":53},[36,33792,33770],{"class":49},[36,33794,33796],{"class":38,"line":33795},145,[36,33797,33798],{"class":42},"        # 计算并保存验证集的loss值\n",[36,33800,33802,33805,33807],{"class":38,"line":33801},146,[36,33803,33804],{"class":49},"        val_loss_all.append(val_loss",[36,33806,1466],{"class":53},[36,33808,33809],{"class":49},"val_num)\n",[36,33811,33813],{"class":38,"line":33812},147,[36,33814,33815],{"class":42},"        # 计算并保存验证集的准确率\n",[36,33817,33819,33822,33824],{"class":38,"line":33818},148,[36,33820,33821],{"class":49},"        val_acc_all.append(val_corrects.double().item()",[36,33823,1466],{"class":53},[36,33825,33809],{"class":49},[36,33827,33829],{"class":38,"line":33828},149,[36,33830,194],{"emptyLinePlaceholder":193},[36,33832,33834],{"class":38,"line":33833},150,[36,33835,33836],{"class":42},"        # 打印训练一轮的loss值和准确率\n",[36,33838,33840,33842,33844,33846,33848,33851,33853,33856,33858,33861,33863,33865,33867,33869,33872,33874,33876,33879,33881,33883],{"class":38,"line":33839},151,[36,33841,33193],{"class":60},[36,33843,901],{"class":49},[36,33845,4341],{"class":998},[36,33847,33201],{"class":60},[36,33849,33850],{"class":998},"train loss:",[36,33852,1775],{"class":60},[36,33854,33855],{"class":53},":.4f",[36,33857,1825],{"class":60},[36,33859,33860],{"class":998}," train acc:",[36,33862,1775],{"class":60},[36,33864,33855],{"class":53},[36,33866,1825],{"class":60},[36,33868,4341],{"class":998},[36,33870,33871],{"class":49},".format(epoch,train_loss_all[",[36,33873,1414],{"class":53},[36,33875,61],{"class":60},[36,33877,33878],{"class":49},"],train_acc_all[",[36,33880,1414],{"class":53},[36,33882,61],{"class":60},[36,33884,33885],{"class":49},"]))\n",[36,33887,33889,33891,33893,33895,33897,33900,33902,33904,33906,33909,33911,33913,33915,33917,33920,33922,33924,33927,33929,33931],{"class":38,"line":33888},152,[36,33890,33193],{"class":60},[36,33892,901],{"class":49},[36,33894,4341],{"class":998},[36,33896,33201],{"class":60},[36,33898,33899],{"class":998},"val loss:",[36,33901,1775],{"class":60},[36,33903,33855],{"class":53},[36,33905,1825],{"class":60},[36,33907,33908],{"class":998}," val acc:",[36,33910,1775],{"class":60},[36,33912,33855],{"class":53},[36,33914,1825],{"class":60},[36,33916,4341],{"class":998},[36,33918,33919],{"class":49},".format(epoch,val_loss_all[",[36,33921,1414],{"class":53},[36,33923,61],{"class":60},[36,33925,33926],{"class":49},"],val_acc_all[",[36,33928,1414],{"class":53},[36,33930,61],{"class":60},[36,33932,33885],{"class":49},[36,33934,33936],{"class":38,"line":33935},153,[36,33937,194],{"emptyLinePlaceholder":193},[36,33939,33941],{"class":38,"line":33940},154,[36,33942,33943],{"class":42},"        # 判断准确度--->保存最优模型\n",[36,33945,33947,33949,33952,33954,33956,33958,33960],{"class":38,"line":33946},155,[36,33948,3246],{"class":53},[36,33950,33951],{"class":49}," val_acc_all[",[36,33953,1414],{"class":53},[36,33955,61],{"class":60},[36,33957,1819],{"class":49},[36,33959,1839],{"class":53},[36,33961,33962],{"class":49},"best_acc:\n",[36,33964,33966],{"class":38,"line":33965},156,[36,33967,33968],{"class":42},"            # 保存当前模型准确度\n",[36,33970,33972,33975,33977,33979,33982,33984,33986],{"class":38,"line":33971},157,[36,33973,33974],{"class":49},"            best_acc:",[36,33976,478],{"class":60},[36,33978,54],{"class":53},[36,33980,33981],{"class":49},"val_acc_all[",[36,33983,1414],{"class":53},[36,33985,61],{"class":60},[36,33987,33988],{"class":49},"]\n",[36,33990,33992],{"class":38,"line":33991},158,[36,33993,33994],{"class":42},"            # 保存当前的准确度\n",[36,33996,33998],{"class":38,"line":33997},159,[36,33999,34000],{"class":42},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[36,34002,34004,34007,34009],{"class":38,"line":34003},160,[36,34005,34006],{"class":49},"            best_model_wts",[36,34008,54],{"class":53},[36,34010,33056],{"class":49},[36,34012,34014],{"class":38,"line":34013},161,[36,34015,194],{"emptyLinePlaceholder":193},[36,34017,34019],{"class":38,"line":34018},162,[36,34020,34021],{"class":42},"        # 计算耗时\n",[36,34023,34025,34028,34030,34033,34035],{"class":38,"line":34024},163,[36,34026,34027],{"class":49},"        time_use",[36,34029,54],{"class":53},[36,34031,34032],{"class":49},"time.time()",[36,34034,1414],{"class":53},[36,34036,34037],{"class":49},"since\n",[36,34039,34041,34043,34045,34048,34050,34053,34055,34057,34059,34061,34063,34066,34069,34072,34074,34077,34079,34081],{"class":38,"line":34040},164,[36,34042,33193],{"class":60},[36,34044,901],{"class":49},[36,34046,34047],{"class":998},"'训练和验证耗费的时间",[36,34049,1775],{"class":60},[36,34051,34052],{"class":53},":.0f",[36,34054,1825],{"class":60},[36,34056,1426],{"class":998},[36,34058,1775],{"class":60},[36,34060,34052],{"class":53},[36,34062,1825],{"class":60},[36,34064,34065],{"class":998},"s'",[36,34067,34068],{"class":49},".format(time_use",[36,34070,34071],{"class":53},"\u002F\u002F",[36,34073,1786],{"class":60},[36,34075,34076],{"class":49},",time_use",[36,34078,1214],{"class":53},[36,34080,1786],{"class":60},[36,34082,31239],{"class":49},[36,34084,34086],{"class":38,"line":34085},165,[36,34087,34088],{"class":42},"    # 选择最优参数\n",[36,34090,34092],{"class":38,"line":34091},166,[36,34093,34094],{"class":42},"    # 加载最高准确率下的模型参数\n",[36,34096,34098],{"class":38,"line":34097},167,[36,34099,34100],{"class":42},"    # model.load_state_dict(best_model_wts)\n",[36,34102,34104,34107,34110],{"class":38,"line":34103},168,[36,34105,34106],{"class":49},"    torch.save(model.state_dict(best_model_wts), ",[36,34108,34109],{"class":998},"'.\u002Fbest_model.pth'",[36,34111,75],{"class":49},[36,34113,34115],{"class":38,"line":34114},169,[36,34116,34117],{"class":42},"    # 或者写成\n",[36,34119,34121],{"class":38,"line":34120},170,[36,34122,34123],{"class":42},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[36,34125,34127],{"class":38,"line":34126},171,[36,34128,34129],{"class":42},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[36,34131,34133,34136,34138,34141,34144,34146],{"class":38,"line":34132},172,[36,34134,34135],{"class":49},"    train_process",[36,34137,54],{"class":53},[36,34139,34140],{"class":49},"pd.DataFrame(",[36,34142,34143],{"class":416},"data",[36,34145,54],{"class":53},[36,34147,2296],{"class":49},[36,34149,34151,34154,34156,34159],{"class":38,"line":34150},173,[36,34152,34153],{"class":998},"        \"epoch\"",[36,34155,1738],{"class":49},[36,34157,34158],{"class":60},"range",[36,34160,34161],{"class":49},"(num_epochs),\n",[36,34163,34165,34168],{"class":38,"line":34164},174,[36,34166,34167],{"class":998},"        \"train_loss_all\"",[36,34169,34170],{"class":49},":train_loss_all,\n",[36,34172,34174,34177],{"class":38,"line":34173},175,[36,34175,34176],{"class":998},"        \"val_loss_all\"",[36,34178,34179],{"class":49},":val_loss_all,\n",[36,34181,34183,34186],{"class":38,"line":34182},176,[36,34184,34185],{"class":998},"        \"train_acc_all\"",[36,34187,34188],{"class":49},":train_acc_all,\n",[36,34190,34192,34195],{"class":38,"line":34191},177,[36,34193,34194],{"class":998},"        \"val_acc_all\"",[36,34196,34197],{"class":49},":val_acc_all\n",[36,34199,34201],{"class":38,"line":34200},178,[36,34202,34203],{"class":49},"    })\n",[36,34205,34207],{"class":38,"line":34206},179,[36,34208,34209],{"class":42},"    # 返回训练保存的过程\n",[36,34211,34213,34215],{"class":38,"line":34212},180,[36,34214,4839],{"class":53},[36,34216,34217],{"class":49}," train_process\n",[36,34219,34221],{"class":38,"line":34220},181,[36,34222,194],{"emptyLinePlaceholder":193},[36,34224,34226],{"class":38,"line":34225},182,[36,34227,34228],{"class":42},"# 将loss值和精度按照图片的形式展示出来\n",[36,34230,34232,34234,34237],{"class":38,"line":34231},183,[36,34233,32689],{"class":53},[36,34235,34236],{"class":2713}," matplot_acc_loss",[36,34238,34239],{"class":49},"(train_process):\n",[36,34241,34243],{"class":38,"line":34242},184,[36,34244,34245],{"class":42},"    # 设置图的大小\n",[36,34247,34249,34252,34254,34256,34258,34260,34262,34264],{"class":38,"line":34248},185,[36,34250,34251],{"class":49},"    plt.figure(",[36,34253,32435],{"class":416},[36,34255,54],{"class":53},[36,34257,901],{"class":49},[36,34259,625],{"class":60},[36,34261,64],{"class":49},[36,34263,186],{"class":60},[36,34265,31239],{"class":49},[36,34267,34269],{"class":38,"line":34268},186,[36,34270,34271],{"class":42},"    # 设置图中有几张图\n",[36,34273,34275],{"class":38,"line":34274},187,[36,34276,34277],{"class":42},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[36,34279,34281],{"class":38,"line":34280},188,[36,34282,34283],{"class":42},"    # ①loss图\n",[36,34285,34287,34289,34291,34293,34295,34297,34299],{"class":38,"line":34286},189,[36,34288,32469],{"class":49},[36,34290,61],{"class":60},[36,34292,64],{"class":49},[36,34294,181],{"class":60},[36,34296,64],{"class":49},[36,34298,61],{"class":60},[36,34300,75],{"class":49},[36,34302,34304],{"class":38,"line":34303},190,[36,34305,34306],{"class":42},"    # 补充:\n",[36,34308,34310],{"class":38,"line":34309},191,[36,34311,34312],{"class":42},"    # plt.subplot(nrows, ncols, index)\n",[36,34314,34316],{"class":38,"line":34315},192,[36,34317,34318],{"class":42},"    # nrows：行数\n",[36,34320,34322],{"class":38,"line":34321},193,[36,34323,34324],{"class":42},"    # ncols：列数\n",[36,34326,34328],{"class":38,"line":34327},194,[36,34329,34330],{"class":42},"    # index：目前选中第几个子图（从1开始）\n",[36,34332,34334,34337,34340,34343,34346,34348,34351,34353,34356],{"class":38,"line":34333},195,[36,34335,34336],{"class":49},"    plt.plot(train_process[",[36,34338,34339],{"class":998},"\"epoch\"",[36,34341,34342],{"class":49},"],train_process.train_loss_all,",[36,34344,34345],{"class":998},"'ro-'",[36,34347,64],{"class":49},[36,34349,34350],{"class":416},"label",[36,34352,54],{"class":53},[36,34354,34355],{"class":998},"'train loss'",[36,34357,75],{"class":49},[36,34359,34361,34363,34365,34368,34371,34373,34375,34377,34380],{"class":38,"line":34360},196,[36,34362,34336],{"class":49},[36,34364,34339],{"class":998},[36,34366,34367],{"class":49},"],train_process.val_loss_all,",[36,34369,34370],{"class":998},"'bs--'",[36,34372,64],{"class":49},[36,34374,34350],{"class":416},[36,34376,54],{"class":53},[36,34378,34379],{"class":998},"'val loss'",[36,34381,75],{"class":49},[36,34383,34385],{"class":38,"line":34384},197,[36,34386,34387],{"class":42},"    # 添加一个图例\n",[36,34389,34391],{"class":38,"line":34390},198,[36,34392,34393],{"class":49},"    plt.legend()\n",[36,34395,34397],{"class":38,"line":34396},199,[36,34398,34399],{"class":42},"    # 给轴添加标签\n",[36,34401,34403,34406,34409],{"class":38,"line":34402},200,[36,34404,34405],{"class":49},"    plt.xlabel(",[36,34407,34408],{"class":998},"'epoch'",[36,34410,75],{"class":49},[36,34412,34414,34417,34420],{"class":38,"line":34413},201,[36,34415,34416],{"class":49},"    plt.ylabel(",[36,34418,34419],{"class":998},"'loss'",[36,34421,75],{"class":49},[36,34423,34425],{"class":38,"line":34424},202,[36,34426,34427],{"class":42},"    # ②准确度图\n",[36,34429,34431,34433,34435,34437,34439,34441,34443],{"class":38,"line":34430},203,[36,34432,32469],{"class":49},[36,34434,61],{"class":60},[36,34436,64],{"class":49},[36,34438,181],{"class":60},[36,34440,64],{"class":49},[36,34442,181],{"class":60},[36,34444,75],{"class":49},[36,34446,34448,34450,34452,34455,34457,34459,34461,34463,34466],{"class":38,"line":34447},204,[36,34449,34336],{"class":49},[36,34451,34339],{"class":998},[36,34453,34454],{"class":49},"],train_process.train_acc_all,",[36,34456,34345],{"class":998},[36,34458,64],{"class":49},[36,34460,34350],{"class":416},[36,34462,54],{"class":53},[36,34464,34465],{"class":998},"'train acc'",[36,34467,75],{"class":49},[36,34469,34471,34473,34475,34478,34480,34482,34484,34486,34489],{"class":38,"line":34470},205,[36,34472,34336],{"class":49},[36,34474,34339],{"class":998},[36,34476,34477],{"class":49},"],train_process.val_acc_all,",[36,34479,34370],{"class":998},[36,34481,64],{"class":49},[36,34483,34350],{"class":416},[36,34485,54],{"class":53},[36,34487,34488],{"class":998},"'val acc'",[36,34490,75],{"class":49},[36,34492,34494],{"class":38,"line":34493},206,[36,34495,34496],{"class":42},"    # 添加图例\n",[36,34498,34500],{"class":38,"line":34499},207,[36,34501,34393],{"class":49},[36,34503,34505,34507,34509],{"class":38,"line":34504},208,[36,34506,34405],{"class":49},[36,34508,34339],{"class":998},[36,34510,75],{"class":49},[36,34512,34514,34516,34519],{"class":38,"line":34513},209,[36,34515,34416],{"class":49},[36,34517,34518],{"class":998},"\"acc\"",[36,34520,75],{"class":49},[36,34522,34524],{"class":38,"line":34523},210,[36,34525,34526],{"class":49},"    plt.show()\n",[36,34528,34530],{"class":38,"line":34529},211,[36,34531,194],{"emptyLinePlaceholder":193},[36,34533,34535],{"class":38,"line":34534},212,[36,34536,34537],{"class":42},"# 正式开始训练:\n",[36,34539,34541,34543,34545,34547,34549],{"class":38,"line":34540},213,[36,34542,2281],{"class":53},[36,34544,31962],{"class":60},[36,34546,3698],{"class":53},[36,34548,31967],{"class":998},[36,34550,4488],{"class":49},[36,34552,34554],{"class":38,"line":34553},214,[36,34555,34556],{"class":42},"    # 将模型实例化\n",[36,34558,34560,34563,34565],{"class":38,"line":34559},215,[36,34561,34562],{"class":49},"    LeNet",[36,34564,54],{"class":53},[36,34566,34567],{"class":49},"LeNet()\n",[36,34569,34571,34574,34576],{"class":38,"line":34570},216,[36,34572,34573],{"class":49},"    train_dataloader,val_dataloader",[36,34575,54],{"class":53},[36,34577,34578],{"class":49},"train_val_data_process()\n",[36,34580,34582,34584,34586,34589,34592,34594,34596],{"class":38,"line":34581},217,[36,34583,34135],{"class":49},[36,34585,54],{"class":53},[36,34587,34588],{"class":49},"train_model_process(LeNet,train_dataloader,val_dataloader,",[36,34590,34591],{"class":416},"num_epochs",[36,34593,54],{"class":53},[36,34595,72],{"class":60},[36,34597,75],{"class":49},[36,34599,34601],{"class":38,"line":34600},218,[36,34602,34603],{"class":49},"    matplot_acc_loss(train_process)\n",[14,34605,34606],{},"画图的补充点学习：",[14,34608,34609],{},[2212,34610],{"alt":31,"src":34611},"\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",[851,34613,34614],{"start":78},[854,34615,34616],{},"测试",[26,34618,34620],{"className":28,"code":34619,"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,34621,34622,34628,34638,34650,34660,34665,34675,34685,34689,34694,34703,34720,34732,34749,34760,34776,34781,34792,34803,34814,34821,34825,34830,34840,34845,34862,34870,34874,34879,34888,34897,34901,34906,34911,34916,34923,34928,34940,34950,34960,34965,34969,34974,34983,34988,35004,35009,35014,35019,35033,35038,35052,35056,35061,35076,35081,35093,35097,35102,35114,35119,35127,35132,35137,35147,35152,35161,35166,35171,35175,35180,35185,35201,35209,35214,35219,35278,35284,35289,35300,35308,35316,35320,35325,35329,35334,35342,35347,35363,35368,35378,35388],{"__ignoreMap":31},[36,34623,34624,34626],{"class":38,"line":39},[36,34625,31135],{"class":53},[36,34627,31138],{"class":49},[36,34629,34630,34632,34634,34636],{"class":38,"line":46},[36,34631,31135],{"class":53},[36,34633,32157],{"class":49},[36,34635,32125],{"class":53},[36,34637,32162],{"class":49},[36,34639,34640,34642,34645,34647],{"class":38,"line":78},[36,34641,31479],{"class":53},[36,34643,34644],{"class":49}," jupyter_client.consoleapp ",[36,34646,31135],{"class":53},[36,34648,34649],{"class":49}," classes\n",[36,34651,34652,34654,34656,34658],{"class":38,"line":125},[36,34653,31479],{"class":53},[36,34655,32140],{"class":49},[36,34657,31135],{"class":53},[36,34659,32145],{"class":49},[36,34661,34662],{"class":38,"line":131},[36,34663,34664],{"class":42},"# 导入数据集\n",[36,34666,34667,34669,34671,34673],{"class":38,"line":396},[36,34668,31479],{"class":53},[36,34670,32110],{"class":49},[36,34672,31135],{"class":53},[36,34674,32115],{"class":49},[36,34676,34677,34679,34681,34683],{"class":38,"line":407},[36,34678,31479],{"class":53},[36,34680,32656],{"class":49},[36,34682,31135],{"class":53},[36,34684,32661],{"class":49},[36,34686,34687],{"class":38,"line":2061},[36,34688,194],{"emptyLinePlaceholder":193},[36,34690,34691],{"class":38,"line":2067},[36,34692,34693],{"class":42},"# 测试数据处理\n",[36,34695,34696,34698,34701],{"class":38,"line":2079},[36,34697,32689],{"class":53},[36,34699,34700],{"class":2713}," test_data_process",[36,34702,32695],{"class":49},[36,34704,34705,34708,34710,34712,34714,34716,34718],{"class":38,"line":2362},[36,34706,34707],{"class":49},"    test_data",[36,34709,54],{"class":53},[36,34711,32197],{"class":49},[36,34713,32200],{"class":416},[36,34715,54],{"class":53},[36,34717,32205],{"class":998},[36,34719,32208],{"class":49},[36,34721,34722,34725,34727,34730],{"class":38,"line":2367},[36,34723,34724],{"class":416},"                           train",[36,34726,54],{"class":53},[36,34728,34729],{"class":60},"False",[36,34731,32208],{"class":49},[36,34733,34734,34737,34739,34741,34743,34745,34747],{"class":38,"line":2373},[36,34735,34736],{"class":416},"                           transform",[36,34738,54],{"class":53},[36,34740,32235],{"class":49},[36,34742,32238],{"class":416},[36,34744,54],{"class":53},[36,34746,1780],{"class":60},[36,34748,32246],{"class":49},[36,34750,34751,34754,34756,34758],{"class":38,"line":2378},[36,34752,34753],{"class":416},"                           download",[36,34755,54],{"class":53},[36,34757,32218],{"class":60},[36,34759,75],{"class":49},[36,34761,34762,34765,34767,34769,34771,34773],{"class":38,"line":2392},[36,34763,34764],{"class":49},"    test_dataloader",[36,34766,54],{"class":53},[36,34768,32276],{"class":49},[36,34770,32279],{"class":416},[36,34772,54],{"class":53},[36,34774,34775],{"class":49},"test_data,\n",[36,34777,34778],{"class":38,"line":2397},[36,34779,34780],{"class":42},"                                    # 这里是一张一张进行测试\n",[36,34782,34783,34786,34788,34790],{"class":38,"line":2403},[36,34784,34785],{"class":416},"                                    batch_size",[36,34787,54],{"class":53},[36,34789,61],{"class":60},[36,34791,32208],{"class":49},[36,34793,34794,34797,34799,34801],{"class":38,"line":2424},[36,34795,34796],{"class":416},"                                    shuffle",[36,34798,54],{"class":53},[36,34800,32218],{"class":60},[36,34802,32208],{"class":49},[36,34804,34805,34808,34810,34812],{"class":38,"line":2429},[36,34806,34807],{"class":416},"                                    num_workers",[36,34809,54],{"class":53},[36,34811,643],{"class":60},[36,34813,75],{"class":49},[36,34815,34816,34818],{"class":38,"line":2443},[36,34817,4839],{"class":53},[36,34819,34820],{"class":49}," test_dataloader\n",[36,34822,34823],{"class":38,"line":2448},[36,34824,194],{"emptyLinePlaceholder":193},[36,34826,34827],{"class":38,"line":2477},[36,34828,34829],{"class":42},"# 定义模型测试函数\n",[36,34831,34832,34834,34837],{"class":38,"line":2482},[36,34833,32689],{"class":53},[36,34835,34836],{"class":2713}," test_model_process",[36,34838,34839],{"class":49},"(model,test_dataloader):\n",[36,34841,34842],{"class":38,"line":2499},[36,34843,34844],{"class":42},"    # 将模型放到设备当中，先进行判断\n",[36,34846,34847,34849,34851,34853,34855,34857,34859],{"class":38,"line":2504},[36,34848,31979],{"class":49},[36,34850,54],{"class":53},[36,34852,31986],{"class":998},[36,34854,2454],{"class":53},[36,34856,31991],{"class":49},[36,34858,2451],{"class":53},[36,34860,34861],{"class":998}," \"cpu\"\n",[36,34863,34864,34866,34868],{"class":38,"line":2509},[36,34865,32031],{"class":49},[36,34867,54],{"class":53},[36,34869,33031],{"class":49},[36,34871,34872],{"class":38,"line":2514},[36,34873,194],{"emptyLinePlaceholder":193},[36,34875,34876],{"class":38,"line":2528},[36,34877,34878],{"class":42},"    # 设置初始化参数\n",[36,34880,34881,34884,34886],{"class":38,"line":2533},[36,34882,34883],{"class":49},"    test_corrects",[36,34885,54],{"class":53},[36,34887,33084],{"class":60},[36,34889,34890,34893,34895],{"class":38,"line":3326},[36,34891,34892],{"class":49},"    test_num",[36,34894,54],{"class":53},[36,34896,3834],{"class":60},[36,34898,34899],{"class":38,"line":3340},[36,34900,194],{"emptyLinePlaceholder":193},[36,34902,34903],{"class":38,"line":3348},[36,34904,34905],{"class":42},"    # 进行模型测试\n",[36,34907,34908],{"class":38,"line":3353},[36,34909,34910],{"class":42},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[36,34912,34913],{"class":38,"line":3359},[36,34914,34915],{"class":42},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[36,34917,34918,34921],{"class":38,"line":3365},[36,34919,34920],{"class":53},"    with",[36,34922,33626],{"class":49},[36,34924,34925],{"class":38,"line":3370},[36,34926,34927],{"class":42},"        # 从数据中进行\n",[36,34929,34930,34932,34935,34937],{"class":38,"line":8695},[36,34931,4152],{"class":53},[36,34933,34934],{"class":49}," test_data_x,test_data_y ",[36,34936,26788],{"class":53},[36,34938,34939],{"class":49}," test_dataloader:\n",[36,34941,34942,34945,34947],{"class":38,"line":8719},[36,34943,34944],{"class":49},"            test_data_x",[36,34946,54],{"class":53},[36,34948,34949],{"class":49},"test_data_x.to(device)\n",[36,34951,34952,34955,34957],{"class":38,"line":8724},[36,34953,34954],{"class":49},"            test_data_y",[36,34956,54],{"class":53},[36,34958,34959],{"class":49},"test_data_y.to(device)\n",[36,34961,34962],{"class":38,"line":8730},[36,34963,34964],{"class":42},"            # 设置为验证模式\n",[36,34966,34967],{"class":38,"line":8757},[36,34968,33617],{"class":49},[36,34970,34971],{"class":38,"line":8762},[36,34972,34973],{"class":42},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[36,34975,34976,34978,34980],{"class":38,"line":8768},[36,34977,33402],{"class":49},[36,34979,54],{"class":53},[36,34981,34982],{"class":49},"model(test_data_x)\n",[36,34984,34985],{"class":38,"line":8780},[36,34986,34987],{"class":42},"            # 查找每一行中最大值对应的下标\n",[36,34989,34990,34992,34994,34996,34998,35000,35002],{"class":38,"line":8792},[36,34991,33419],{"class":49},[36,34993,54],{"class":53},[36,34995,33424],{"class":49},[36,34997,33427],{"class":416},[36,34999,54],{"class":53},[36,35001,61],{"class":60},[36,35003,75],{"class":49},[36,35005,35006],{"class":38,"line":8804},[36,35007,35008],{"class":42},"            # 计算正确率\n",[36,35010,35011],{"class":38,"line":10463},[36,35012,35013],{"class":42},"            # .data表示是一个不带梯度信息的tensor\n",[36,35015,35016],{"class":38,"line":10488},[36,35017,35018],{"class":42},"            # 如果预测正确，则准确度test_corrects加1\n",[36,35020,35021,35024,35026,35028,35030],{"class":38,"line":10511},[36,35022,35023],{"class":49},"            test_corrects",[36,35025,10224],{"class":53},[36,35027,33529],{"class":49},[36,35029,3698],{"class":53},[36,35031,35032],{"class":49},"test_data_y.data)\n",[36,35034,35035],{"class":38,"line":10535},[36,35036,35037],{"class":42},"            # 将所有的测试样本进行累计\n",[36,35039,35040,35043,35045,35048,35050],{"class":38,"line":10540},[36,35041,35042],{"class":49},"            test_num",[36,35044,10224],{"class":53},[36,35046,35047],{"class":49},"test_data_x.size(",[36,35049,643],{"class":60},[36,35051,75],{"class":49},[36,35053,35054],{"class":38,"line":10545},[36,35055,194],{"emptyLinePlaceholder":193},[36,35057,35058],{"class":38,"line":10550},[36,35059,35060],{"class":42},"        # 计算准确度\n",[36,35062,35063,35066,35068,35071,35073],{"class":38,"line":10559},[36,35064,35065],{"class":49},"        test_acc",[36,35067,54],{"class":53},[36,35069,35070],{"class":49},"test_corrects.double().item()",[36,35072,1466],{"class":53},[36,35074,35075],{"class":49},"test_num\n",[36,35077,35078],{"class":38,"line":10564},[36,35079,35080],{"class":42},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[36,35082,35083,35085,35087,35090],{"class":38,"line":10570},[36,35084,33193],{"class":60},[36,35086,901],{"class":49},[36,35088,35089],{"class":998},"\"测试的准确率：\"",[36,35091,35092],{"class":49},",test_acc)\n",[36,35094,35095],{"class":38,"line":10591},[36,35096,194],{"emptyLinePlaceholder":193},[36,35098,35099],{"class":38,"line":10597},[36,35100,35101],{"class":42},"# 实现模型的测试功能\n",[36,35103,35104,35106,35108,35110,35112],{"class":38,"line":10611},[36,35105,2281],{"class":53},[36,35107,31962],{"class":60},[36,35109,3698],{"class":53},[36,35111,31967],{"class":998},[36,35113,4488],{"class":49},[36,35115,35116],{"class":38,"line":10617},[36,35117,35118],{"class":42},"    # 加载模型\n",[36,35120,35121,35123,35125],{"class":38,"line":10644},[36,35122,32031],{"class":49},[36,35124,54],{"class":53},[36,35126,34567],{"class":49},[36,35128,35129],{"class":38,"line":10653},[36,35130,35131],{"class":42},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[36,35133,35134],{"class":38,"line":10659},[36,35135,35136],{"class":42},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[36,35138,35139,35142,35145],{"class":38,"line":10667},[36,35140,35141],{"class":49},"    model.load_state_dict(torch.load(",[36,35143,35144],{"class":998},"'best_model.pth'",[36,35146,31239],{"class":49},[36,35148,35149],{"class":38,"line":10672},[36,35150,35151],{"class":42},"    # 数据加载\n",[36,35153,35154,35156,35158],{"class":38,"line":17348},[36,35155,34764],{"class":49},[36,35157,54],{"class":53},[36,35159,35160],{"class":49},"test_data_process()\n",[36,35162,35163],{"class":38,"line":17354},[36,35164,35165],{"class":42},"    # 加载模型测试的函数\n",[36,35167,35168],{"class":38,"line":17377},[36,35169,35170],{"class":49},"    test_model_process(model,test_dataloader)\n",[36,35172,35173],{"class":38,"line":17383},[36,35174,194],{"emptyLinePlaceholder":193},[36,35176,35177],{"class":38,"line":17406},[36,35178,35179],{"class":42},"    # 验证集推理实现：\n",[36,35181,35182],{"class":38,"line":17420},[36,35183,35184],{"class":42},"    # 加载数据加载的更详细一些\n",[36,35186,35187,35189,35191,35193,35195,35197,35199],{"class":38,"line":17440},[36,35188,31979],{"class":49},[36,35190,54],{"class":53},[36,35192,31986],{"class":998},[36,35194,2454],{"class":53},[36,35196,31991],{"class":49},[36,35198,2451],{"class":53},[36,35200,34861],{"class":998},[36,35202,35203,35205,35207],{"class":38,"line":17446},[36,35204,32031],{"class":49},[36,35206,54],{"class":53},[36,35208,33031],{"class":49},[36,35210,35211],{"class":38,"line":17457},[36,35212,35213],{"class":42},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[36,35215,35216],{"class":38,"line":17480},[36,35217,35218],{"class":42},"    # 顺序不可改变\n",[36,35220,35221,35224,35226,35228,35231,35233,35236,35238,35241,35243,35246,35248,35251,35253,35256,35258,35261,35263,35266,35268,35271,35273,35276],{"class":38,"line":17502},[36,35222,35223],{"class":49},"    classes",[36,35225,54],{"class":53},[36,35227,1769],{"class":49},[36,35229,35230],{"class":998},"'T-shirt\u002Ftop'",[36,35232,64],{"class":49},[36,35234,35235],{"class":998},"'Trouser'",[36,35237,64],{"class":49},[36,35239,35240],{"class":998},"'Pullover'",[36,35242,64],{"class":49},[36,35244,35245],{"class":998},"'Dress'",[36,35247,64],{"class":49},[36,35249,35250],{"class":998},"'Coat'",[36,35252,64],{"class":49},[36,35254,35255],{"class":998},"'Sandal'",[36,35257,64],{"class":49},[36,35259,35260],{"class":998},"'Shirt'",[36,35262,64],{"class":49},[36,35264,35265],{"class":998},"'Sneaker'",[36,35267,64],{"class":49},[36,35269,35270],{"class":998},"'Bag'",[36,35272,64],{"class":49},[36,35274,35275],{"class":998},"'Ankle boot'",[36,35277,33988],{"class":49},[36,35279,35280,35282],{"class":38,"line":17507},[36,35281,34920],{"class":53},[36,35283,33626],{"class":49},[36,35285,35286],{"class":38,"line":17513},[36,35287,35288],{"class":42},"        # 将数据和标签都放到设备当中\n",[36,35290,35291,35293,35296,35298],{"class":38,"line":17527},[36,35292,4152],{"class":53},[36,35294,35295],{"class":49}," b_x,b_y ",[36,35297,26788],{"class":53},[36,35299,34939],{"class":49},[36,35301,35302,35304,35306],{"class":38,"line":17540},[36,35303,33352],{"class":49},[36,35305,54],{"class":53},[36,35307,33357],{"class":49},[36,35309,35310,35312,35314],{"class":38,"line":17545},[36,35311,33367],{"class":49},[36,35313,54],{"class":53},[36,35315,33372],{"class":49},[36,35317,35318],{"class":38,"line":17559},[36,35319,194],{"emptyLinePlaceholder":193},[36,35321,35322],{"class":38,"line":17564},[36,35323,35324],{"class":42},"            # 设置模型为验证模式\n",[36,35326,35327],{"class":38,"line":17570},[36,35328,33617],{"class":49},[36,35330,35331],{"class":38,"line":17575},[36,35332,35333],{"class":42},"            # 模型推理结果\n",[36,35335,35336,35338,35340],{"class":38,"line":17589},[36,35337,33402],{"class":49},[36,35339,54],{"class":53},[36,35341,33407],{"class":49},[36,35343,35344],{"class":38,"line":17594},[36,35345,35346],{"class":42},"            # 获取最大下标，最大下标就是类别号\n",[36,35348,35349,35351,35353,35355,35357,35359,35361],{"class":38,"line":17599},[36,35350,33419],{"class":49},[36,35352,54],{"class":53},[36,35354,33424],{"class":49},[36,35356,33427],{"class":416},[36,35358,54],{"class":53},[36,35360,61],{"class":60},[36,35362,75],{"class":49},[36,35364,35365],{"class":38,"line":17613},[36,35366,35367],{"class":42},"            # 取出张量中的数值\n",[36,35369,35370,35373,35375],{"class":38,"line":17625},[36,35371,35372],{"class":49},"            result",[36,35374,54],{"class":53},[36,35376,35377],{"class":49},"pre_lab.item()\n",[36,35379,35380,35383,35385],{"class":38,"line":17630},[36,35381,35382],{"class":49},"            label",[36,35384,54],{"class":53},[36,35386,35387],{"class":49},"b_y.item()\n",[36,35389,35390,35393,35395,35398,35401,35404,35406,35409],{"class":38,"line":17643},[36,35391,35392],{"class":60},"            print",[36,35394,901],{"class":49},[36,35396,35397],{"class":998},"\"预测值：\"",[36,35399,35400],{"class":49},",classes[result],",[36,35402,35403],{"class":998},"\"------\"",[36,35405,64],{"class":49},[36,35407,35408],{"class":998},"\"真实值：\"",[36,35410,35411],{"class":49},",classes[label])\n",[14,35413,35414],{},"（2）AlexNet",[851,35416,35417],{},[854,35418,35419],{},"神经网络构建",[26,35421,35423],{"className":28,"code":35422,"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,35424,35425,35431,35441,35451,35463,35467,35484,35492,35507,35519,35561,35588,35631,35657,35701,35744,35787,35814,35818,35828,35833,35861,35880,35899,35903,35908,35916,35931,35941,35955,35965,35980,35995,36010,36021,36025,36030,36040,36055,36060,36074,36089,36101,36106,36117,36122,36128,36133,36145,36165,36170,36179],{"__ignoreMap":31},[36,35426,35427,35429],{"class":38,"line":39},[36,35428,31135],{"class":53},[36,35430,31138],{"class":49},[36,35432,35433,35435,35437,35439],{"class":38,"line":46},[36,35434,31479],{"class":53},[36,35436,31482],{"class":49},[36,35438,31135],{"class":53},[36,35440,31487],{"class":49},[36,35442,35443,35445,35447,35449],{"class":38,"line":78},[36,35444,31479],{"class":53},[36,35446,31499],{"class":49},[36,35448,31135],{"class":53},[36,35450,31504],{"class":49},[36,35452,35453,35455,35458,35460],{"class":38,"line":125},[36,35454,31135],{"class":53},[36,35456,35457],{"class":49}," torch.nn.functional ",[36,35459,32125],{"class":53},[36,35461,35462],{"class":49}," F\n",[36,35464,35465],{"class":38,"line":131},[36,35466,194],{"emptyLinePlaceholder":193},[36,35468,35469,35471,35474,35476,35478,35480,35482],{"class":38,"line":396},[36,35470,15438],{"class":53},[36,35472,35473],{"class":2713}," AlexNet",[36,35475,901],{"class":49},[36,35477,31520],{"class":2713},[36,35479,1440],{"class":49},[36,35481,31525],{"class":2713},[36,35483,31528],{"class":49},[36,35485,35486,35488,35490],{"class":38,"line":407},[36,35487,31543],{"class":53},[36,35489,31546],{"class":60},[36,35491,31549],{"class":49},[36,35493,35494,35496,35499,35501,35503,35505],{"class":38,"line":2061},[36,35495,31559],{"class":60},[36,35497,35498],{"class":49},"(AlexNet,",[36,35500,31565],{"class":60},[36,35502,31568],{"class":49},[36,35504,31571],{"class":60},[36,35506,2726],{"class":49},[36,35508,35509,35511,35514,35516],{"class":38,"line":2067},[36,35510,31587],{"class":60},[36,35512,35513],{"class":49},".ReLu",[36,35515,54],{"class":53},[36,35517,35518],{"class":49},"nn.ReLU()\n",[36,35520,35521,35523,35525,35527,35529,35531,35533,35535,35537,35539,35541,35543,35545,35547,35549,35551,35553,35555,35557,35559],{"class":38,"line":2079},[36,35522,31587],{"class":60},[36,35524,31590],{"class":49},[36,35526,54],{"class":53},[36,35528,31595],{"class":49},[36,35530,31598],{"class":416},[36,35532,54],{"class":53},[36,35534,61],{"class":60},[36,35536,64],{"class":49},[36,35538,31607],{"class":416},[36,35540,54],{"class":53},[36,35542,1101],{"class":60},[36,35544,64],{"class":49},[36,35546,31616],{"class":416},[36,35548,54],{"class":53},[36,35550,1356],{"class":60},[36,35552,64],{"class":49},[36,35554,31671],{"class":416},[36,35556,54],{"class":53},[36,35558,186],{"class":60},[36,35560,75],{"class":49},[36,35562,35563,35565,35567,35569,35572,35574,35576,35578,35580,35582,35584,35586],{"class":38,"line":2362},[36,35564,31587],{"class":60},[36,35566,31655],{"class":49},[36,35568,54],{"class":53},[36,35570,35571],{"class":49},"nn.MaxPool2d(",[36,35573,31616],{"class":416},[36,35575,54],{"class":53},[36,35577,162],{"class":60},[36,35579,64],{"class":49},[36,35581,31671],{"class":416},[36,35583,54],{"class":53},[36,35585,181],{"class":60},[36,35587,75],{"class":49},[36,35589,35590,35592,35594,35596,35598,35600,35602,35604,35606,35608,35610,35613,35615,35617,35619,35621,35623,35625,35627,35629],{"class":38,"line":2367},[36,35591,31587],{"class":60},[36,35593,31684],{"class":49},[36,35595,54],{"class":53},[36,35597,31595],{"class":49},[36,35599,31598],{"class":416},[36,35601,54],{"class":53},[36,35603,1101],{"class":60},[36,35605,64],{"class":49},[36,35607,31607],{"class":416},[36,35609,54],{"class":53},[36,35611,35612],{"class":60},"256",[36,35614,64],{"class":49},[36,35616,31616],{"class":416},[36,35618,54],{"class":53},[36,35620,157],{"class":60},[36,35622,64],{"class":49},[36,35624,31625],{"class":416},[36,35626,54],{"class":53},[36,35628,181],{"class":60},[36,35630,75],{"class":49},[36,35632,35633,35635,35637,35639,35641,35643,35645,35647,35649,35651,35653,35655],{"class":38,"line":2373},[36,35634,31587],{"class":60},[36,35636,31719],{"class":49},[36,35638,54],{"class":53},[36,35640,35571],{"class":49},[36,35642,31616],{"class":416},[36,35644,54],{"class":53},[36,35646,162],{"class":60},[36,35648,64],{"class":49},[36,35650,31671],{"class":416},[36,35652,54],{"class":53},[36,35654,181],{"class":60},[36,35656,75],{"class":49},[36,35658,35659,35661,35664,35666,35668,35670,35672,35674,35676,35678,35680,35683,35685,35687,35689,35691,35693,35695,35697,35699],{"class":38,"line":2378},[36,35660,31587],{"class":60},[36,35662,35663],{"class":49},".c5",[36,35665,54],{"class":53},[36,35667,31595],{"class":49},[36,35669,31598],{"class":416},[36,35671,54],{"class":53},[36,35673,35612],{"class":60},[36,35675,64],{"class":49},[36,35677,31607],{"class":416},[36,35679,54],{"class":53},[36,35681,35682],{"class":60},"384",[36,35684,64],{"class":49},[36,35686,31616],{"class":416},[36,35688,54],{"class":53},[36,35690,162],{"class":60},[36,35692,64],{"class":49},[36,35694,31625],{"class":416},[36,35696,54],{"class":53},[36,35698,61],{"class":60},[36,35700,75],{"class":49},[36,35702,35703,35705,35708,35710,35712,35714,35716,35718,35720,35722,35724,35726,35728,35730,35732,35734,35736,35738,35740,35742],{"class":38,"line":2392},[36,35704,31587],{"class":60},[36,35706,35707],{"class":49},".c6",[36,35709,54],{"class":53},[36,35711,31595],{"class":49},[36,35713,31598],{"class":416},[36,35715,54],{"class":53},[36,35717,35682],{"class":60},[36,35719,64],{"class":49},[36,35721,31607],{"class":416},[36,35723,54],{"class":53},[36,35725,35682],{"class":60},[36,35727,64],{"class":49},[36,35729,31616],{"class":416},[36,35731,54],{"class":53},[36,35733,162],{"class":60},[36,35735,64],{"class":49},[36,35737,31625],{"class":416},[36,35739,54],{"class":53},[36,35741,61],{"class":60},[36,35743,75],{"class":49},[36,35745,35746,35748,35751,35753,35755,35757,35759,35761,35763,35765,35767,35769,35771,35773,35775,35777,35779,35781,35783,35785],{"class":38,"line":2397},[36,35747,31587],{"class":60},[36,35749,35750],{"class":49},".c7",[36,35752,54],{"class":53},[36,35754,31595],{"class":49},[36,35756,31598],{"class":416},[36,35758,54],{"class":53},[36,35760,35682],{"class":60},[36,35762,64],{"class":49},[36,35764,31607],{"class":416},[36,35766,54],{"class":53},[36,35768,35612],{"class":60},[36,35770,64],{"class":49},[36,35772,31616],{"class":416},[36,35774,54],{"class":53},[36,35776,162],{"class":60},[36,35778,64],{"class":49},[36,35780,31625],{"class":416},[36,35782,54],{"class":53},[36,35784,61],{"class":60},[36,35786,75],{"class":49},[36,35788,35789,35791,35794,35796,35798,35800,35802,35804,35806,35808,35810,35812],{"class":38,"line":2403},[36,35790,31587],{"class":60},[36,35792,35793],{"class":49},".s8",[36,35795,54],{"class":53},[36,35797,35571],{"class":49},[36,35799,31616],{"class":416},[36,35801,54],{"class":53},[36,35803,162],{"class":60},[36,35805,64],{"class":49},[36,35807,31671],{"class":416},[36,35809,54],{"class":53},[36,35811,181],{"class":60},[36,35813,75],{"class":49},[36,35815,35816],{"class":38,"line":2424},[36,35817,31744],{"class":42},[36,35819,35820,35822,35824,35826],{"class":38,"line":2429},[36,35821,31587],{"class":60},[36,35823,31751],{"class":49},[36,35825,54],{"class":53},[36,35827,31756],{"class":49},[36,35829,35830],{"class":38,"line":2443},[36,35831,35832],{"class":42},"       # 定义全连接层\n",[36,35834,35835,35837,35840,35842,35844,35846,35848,35850,35852,35854,35856,35859],{"class":38,"line":2448},[36,35836,31587],{"class":60},[36,35838,35839],{"class":49},".f1",[36,35841,54],{"class":53},[36,35843,31773],{"class":49},[36,35845,1230],{"class":60},[36,35847,1339],{"class":53},[36,35849,1230],{"class":60},[36,35851,1339],{"class":53},[36,35853,35612],{"class":60},[36,35855,64],{"class":49},[36,35857,35858],{"class":60},"4096",[36,35860,75],{"class":49},[36,35862,35863,35865,35868,35870,35872,35874,35876,35878],{"class":38,"line":2477},[36,35864,31587],{"class":60},[36,35866,35867],{"class":49},".f2",[36,35869,54],{"class":53},[36,35871,31773],{"class":49},[36,35873,35858],{"class":60},[36,35875,64],{"class":49},[36,35877,35858],{"class":60},[36,35879,75],{"class":49},[36,35881,35882,35884,35887,35889,35891,35893,35895,35897],{"class":38,"line":2482},[36,35883,31587],{"class":60},[36,35885,35886],{"class":49},".f3",[36,35888,54],{"class":53},[36,35890,31773],{"class":49},[36,35892,35858],{"class":60},[36,35894,64],{"class":49},[36,35896,332],{"class":60},[36,35898,75],{"class":49},[36,35900,35901],{"class":38,"line":2499},[36,35902,194],{"emptyLinePlaceholder":193},[36,35904,35905],{"class":38,"line":2504},[36,35906,35907],{"class":42},"    # 定义前向传播\n",[36,35909,35910,35912,35914],{"class":38,"line":2509},[36,35911,31543],{"class":53},[36,35913,31835],{"class":2713},[36,35915,31838],{"class":49},[36,35917,35918,35920,35922,35924,35927,35929],{"class":38,"line":2514},[36,35919,31843],{"class":49},[36,35921,54],{"class":53},[36,35923,31565],{"class":60},[36,35925,35926],{"class":49},".ReLu(",[36,35928,31565],{"class":60},[36,35930,31855],{"class":49},[36,35932,35933,35935,35937,35939],{"class":38,"line":2528},[36,35934,31843],{"class":49},[36,35936,54],{"class":53},[36,35938,31565],{"class":60},[36,35940,31866],{"class":49},[36,35942,35943,35945,35947,35949,35951,35953],{"class":38,"line":2533},[36,35944,31843],{"class":49},[36,35946,54],{"class":53},[36,35948,31565],{"class":60},[36,35950,35926],{"class":49},[36,35952,31565],{"class":60},[36,35954,31881],{"class":49},[36,35956,35957,35959,35961,35963],{"class":38,"line":3326},[36,35958,31843],{"class":49},[36,35960,54],{"class":53},[36,35962,31565],{"class":60},[36,35964,31892],{"class":49},[36,35966,35967,35969,35971,35973,35975,35977],{"class":38,"line":3340},[36,35968,31843],{"class":49},[36,35970,54],{"class":53},[36,35972,31565],{"class":60},[36,35974,35926],{"class":49},[36,35976,31565],{"class":60},[36,35978,35979],{"class":49},".c5(x))\n",[36,35981,35982,35984,35986,35988,35990,35992],{"class":38,"line":3348},[36,35983,31843],{"class":49},[36,35985,54],{"class":53},[36,35987,31565],{"class":60},[36,35989,35926],{"class":49},[36,35991,31565],{"class":60},[36,35993,35994],{"class":49},".c6(x))\n",[36,35996,35997,35999,36001,36003,36005,36007],{"class":38,"line":3353},[36,35998,31843],{"class":49},[36,36000,54],{"class":53},[36,36002,31565],{"class":60},[36,36004,35926],{"class":49},[36,36006,31565],{"class":60},[36,36008,36009],{"class":49},".c7(x))\n",[36,36011,36012,36014,36016,36018],{"class":38,"line":3359},[36,36013,31843],{"class":49},[36,36015,54],{"class":53},[36,36017,31565],{"class":60},[36,36019,36020],{"class":49},".s8(x)\n",[36,36022,36023],{"class":38,"line":3365},[36,36024,194],{"emptyLinePlaceholder":193},[36,36026,36027],{"class":38,"line":3370},[36,36028,36029],{"class":42},"        # 展平加线性全连接层\n",[36,36031,36032,36034,36036,36038],{"class":38,"line":8695},[36,36033,31843],{"class":49},[36,36035,54],{"class":53},[36,36037,31565],{"class":60},[36,36039,31903],{"class":49},[36,36041,36042,36044,36046,36048,36050,36052],{"class":38,"line":8719},[36,36043,31843],{"class":49},[36,36045,54],{"class":53},[36,36047,31565],{"class":60},[36,36049,35926],{"class":49},[36,36051,31565],{"class":60},[36,36053,36054],{"class":49},".f1(x))\n",[36,36056,36057],{"class":38,"line":8724},[36,36058,36059],{"class":42},"        # 还需要dropout对神经元随机进行失活\n",[36,36061,36062,36064,36066,36069,36072],{"class":38,"line":8730},[36,36063,31843],{"class":49},[36,36065,54],{"class":53},[36,36067,36068],{"class":49},"F.dropout(x,",[36,36070,36071],{"class":60},"0.5",[36,36073,75],{"class":49},[36,36075,36076,36078,36080,36082,36084,36086],{"class":38,"line":8757},[36,36077,31843],{"class":49},[36,36079,54],{"class":53},[36,36081,31565],{"class":60},[36,36083,35926],{"class":49},[36,36085,31565],{"class":60},[36,36087,36088],{"class":49},".f2(x))\n",[36,36090,36091,36093,36095,36097,36099],{"class":38,"line":8762},[36,36092,31843],{"class":49},[36,36094,54],{"class":53},[36,36096,36068],{"class":49},[36,36098,36071],{"class":60},[36,36100,75],{"class":49},[36,36102,36103],{"class":38,"line":8768},[36,36104,36105],{"class":42},"        # 直接输出\n",[36,36107,36108,36110,36112,36114],{"class":38,"line":8780},[36,36109,31843],{"class":49},[36,36111,54],{"class":53},[36,36113,31565],{"class":60},[36,36115,36116],{"class":49},".f3(x)\n",[36,36118,36119],{"class":38,"line":8792},[36,36120,36121],{"class":42},"        # 前向传播输出\n",[36,36123,36124,36126],{"class":38,"line":8804},[36,36125,15496],{"class":53},[36,36127,31951],{"class":49},[36,36129,36130],{"class":38,"line":10463},[36,36131,36132],{"class":42},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[36,36134,36135,36137,36139,36141,36143],{"class":38,"line":10488},[36,36136,2281],{"class":53},[36,36138,31962],{"class":60},[36,36140,3698],{"class":53},[36,36142,31967],{"class":998},[36,36144,4488],{"class":49},[36,36146,36147,36149,36151,36153,36155,36157,36159,36161,36163],{"class":38,"line":10511},[36,36148,31979],{"class":49},[36,36150,54],{"class":53},[36,36152,31193],{"class":49},[36,36154,31986],{"class":998},[36,36156,2454],{"class":53},[36,36158,31991],{"class":49},[36,36160,2451],{"class":53},[36,36162,31218],{"class":998},[36,36164,75],{"class":49},[36,36166,36167],{"class":38,"line":10535},[36,36168,36169],{"class":42},"    # 模型实例化，然后将实例化的模型放到设备中\n",[36,36171,36172,36174,36176],{"class":38,"line":10540},[36,36173,32031],{"class":49},[36,36175,54],{"class":53},[36,36177,36178],{"class":49},"AlexNet().to(device)\n",[36,36180,36181,36183,36185,36187,36189,36192,36194,36196],{"class":38,"line":10545},[36,36182,32041],{"class":60},[36,36184,32044],{"class":49},[36,36186,61],{"class":60},[36,36188,64],{"class":49},[36,36190,36191],{"class":60},"227",[36,36193,64],{"class":49},[36,36195,36191],{"class":60},[36,36197,32057],{"class":49},[851,36199,36200],{"start":46},[854,36201,32070],{},[26,36203,36205],{"className":28,"code":36204,"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,36206,36207,36213,36219,36229,36235,36245,36255,36265,36275,36285,36289,36300,36310,36314,36318,36322,36330,36342,36352,36368,36378,36410,36424,36434,36444,36448,36458,36472,36482,36492,36502,36508,36512,36516,36520,36524,36528,36536,36556,36560,36564,36568,36572,36576,36592,36596,36600,36608,36612,36616,36624,36628,36632,36636,36644,36648,36652,36656,36660,36668,36672,36680,36684,36692,36696,36704,36708,36716,36720,36724,36732,36736,36740,36744,36756,36780,36794,36798,36802,36806,36814,36818,36826,36830,36838,36842,36850,36854,36862,36866,36874,36878,36890,36894,36902,36906,36914,36918,36922,36926,36930,36938,36942,36958,36962,36970,36974,36978,36982,36986,36990,36994,36998,37014,37018,37030,37034,37046,37050,37062,37066,37074,37078,37086,37090,37094,37099,37105,37109,37118,37122,37139,37143,37152,37156,37174,37187,37192,37205,37209,37213,37221,37225,37229,37237,37241,37249,37253,37261,37265,37269,37311,37353,37357,37361,37377,37381,37397,37401,37405,37413,37417,37421,37433,37471,37476,37481,37490,37494,37508,37518,37524,37530,37536,37542,37546,37550,37556,37560,37564,37572,37576,37594,37598,37602,37606,37622,37626,37630,37634,37638,37642,37662,37682,37686,37690,37694,37702,37710,37714,37730,37750,37770,37774,37778,37786,37794,37798,37802,37806,37818,37822,37832,37840,37857],{"__ignoreMap":31},[36,36208,36209,36211],{"class":38,"line":39},[36,36210,31135],{"class":53},[36,36212,32564],{"class":49},[36,36214,36215,36217],{"class":38,"line":46},[36,36216,31135],{"class":53},[36,36218,32571],{"class":49},[36,36220,36221,36223,36225,36227],{"class":38,"line":78},[36,36222,31135],{"class":53},[36,36224,32582],{"class":49},[36,36226,32125],{"class":53},[36,36228,32587],{"class":49},[36,36230,36231,36233],{"class":38,"line":125},[36,36232,31135],{"class":53},[36,36234,31138],{"class":49},[36,36236,36237,36239,36241,36243],{"class":38,"line":131},[36,36238,31479],{"class":53},[36,36240,32157],{"class":49},[36,36242,31135],{"class":53},[36,36244,32604],{"class":49},[36,36246,36247,36249,36251,36253],{"class":38,"line":396},[36,36248,31479],{"class":53},[36,36250,32110],{"class":49},[36,36252,31135],{"class":53},[36,36254,32115],{"class":49},[36,36256,36257,36259,36261,36263],{"class":38,"line":407},[36,36258,31479],{"class":53},[36,36260,32140],{"class":49},[36,36262,31135],{"class":53},[36,36264,32145],{"class":49},[36,36266,36267,36269,36271,36273],{"class":38,"line":2061},[36,36268,31135],{"class":53},[36,36270,32157],{"class":49},[36,36272,32125],{"class":53},[36,36274,32162],{"class":49},[36,36276,36277,36279,36281,36283],{"class":38,"line":2067},[36,36278,31135],{"class":53},[36,36280,32174],{"class":49},[36,36282,32125],{"class":53},[36,36284,32179],{"class":49},[36,36286,36287],{"class":38,"line":2079},[36,36288,32649],{"class":42},[36,36290,36291,36293,36295,36297],{"class":38,"line":2362},[36,36292,31479],{"class":53},[36,36294,32656],{"class":49},[36,36296,31135],{"class":53},[36,36298,36299],{"class":49}," AlexNet\n",[36,36301,36302,36304,36306,36308],{"class":38,"line":2367},[36,36303,31479],{"class":53},[36,36305,31482],{"class":49},[36,36307,31135],{"class":53},[36,36309,31487],{"class":49},[36,36311,36312],{"class":38,"line":2373},[36,36313,194],{"emptyLinePlaceholder":193},[36,36315,36316],{"class":38,"line":2378},[36,36317,194],{"emptyLinePlaceholder":193},[36,36319,36320],{"class":38,"line":2392},[36,36321,32684],{"class":42},[36,36323,36324,36326,36328],{"class":38,"line":2397},[36,36325,32689],{"class":53},[36,36327,32692],{"class":2713},[36,36329,32695],{"class":49},[36,36331,36332,36334,36336,36338,36340],{"class":38,"line":2403},[36,36333,32700],{"class":49},[36,36335,54],{"class":53},[36,36337,32197],{"class":49},[36,36339,32205],{"class":998},[36,36341,32208],{"class":49},[36,36343,36344,36346,36348,36350],{"class":38,"line":2424},[36,36345,32713],{"class":416},[36,36347,54],{"class":53},[36,36349,32218],{"class":60},[36,36351,32208],{"class":49},[36,36353,36354,36356,36358,36360,36362,36364,36366],{"class":38,"line":2429},[36,36355,32724],{"class":416},[36,36357,54],{"class":53},[36,36359,32235],{"class":49},[36,36361,32238],{"class":416},[36,36363,54],{"class":53},[36,36365,36191],{"class":60},[36,36367,32246],{"class":49},[36,36369,36370,36372,36374,36376],{"class":38,"line":2443},[36,36371,32741],{"class":416},[36,36373,54],{"class":53},[36,36375,32218],{"class":60},[36,36377,75],{"class":49},[36,36379,36380,36382,36384,36386,36388,36390,36392,36394,36396,36398,36400,36402,36404,36406,36408],{"class":38,"line":2448},[36,36381,32752],{"class":49},[36,36383,54],{"class":53},[36,36385,32757],{"class":49},[36,36387,32760],{"class":60},[36,36389,901],{"class":49},[36,36391,32765],{"class":60},[36,36393,1339],{"class":53},[36,36395,8105],{"class":60},[36,36397,32772],{"class":49},[36,36399,32760],{"class":60},[36,36401,901],{"class":49},[36,36403,32779],{"class":60},[36,36405,1339],{"class":53},[36,36407,8105],{"class":60},[36,36409,32786],{"class":49},[36,36411,36412,36414,36416,36418,36420,36422],{"class":38,"line":2477},[36,36413,32791],{"class":49},[36,36415,54],{"class":53},[36,36417,32796],{"class":49},[36,36419,32279],{"class":416},[36,36421,54],{"class":53},[36,36423,32284],{"class":49},[36,36425,36426,36428,36430,36432],{"class":38,"line":2482},[36,36427,32807],{"class":416},[36,36429,54],{"class":53},[36,36431,32812],{"class":60},[36,36433,32208],{"class":49},[36,36435,36436,36438,36440,36442],{"class":38,"line":2499},[36,36437,32819],{"class":416},[36,36439,54],{"class":53},[36,36441,32218],{"class":60},[36,36443,32208],{"class":49},[36,36445,36446],{"class":38,"line":2504},[36,36447,32830],{"class":42},[36,36449,36450,36452,36454,36456],{"class":38,"line":2509},[36,36451,32835],{"class":416},[36,36453,54],{"class":53},[36,36455,1280],{"class":60},[36,36457,75],{"class":49},[36,36459,36460,36462,36464,36466,36468,36470],{"class":38,"line":2514},[36,36461,32846],{"class":49},[36,36463,54],{"class":53},[36,36465,32276],{"class":49},[36,36467,32279],{"class":416},[36,36469,54],{"class":53},[36,36471,32857],{"class":49},[36,36473,36474,36476,36478,36480],{"class":38,"line":2528},[36,36475,32862],{"class":416},[36,36477,54],{"class":53},[36,36479,32812],{"class":60},[36,36481,32208],{"class":49},[36,36483,36484,36486,36488,36490],{"class":38,"line":2533},[36,36485,32873],{"class":416},[36,36487,54],{"class":53},[36,36489,32218],{"class":60},[36,36491,32208],{"class":49},[36,36493,36494,36496,36498,36500],{"class":38,"line":3326},[36,36495,32884],{"class":416},[36,36497,54],{"class":53},[36,36499,1280],{"class":60},[36,36501,75],{"class":49},[36,36503,36504,36506],{"class":38,"line":3340},[36,36505,4839],{"class":53},[36,36507,32897],{"class":49},[36,36509,36510],{"class":38,"line":3348},[36,36511,194],{"emptyLinePlaceholder":193},[36,36513,36514],{"class":38,"line":3353},[36,36515,32906],{"class":42},[36,36517,36518],{"class":38,"line":3359},[36,36519,32911],{"class":42},[36,36521,36522],{"class":38,"line":3365},[36,36523,194],{"emptyLinePlaceholder":193},[36,36525,36526],{"class":38,"line":3370},[36,36527,32920],{"class":42},[36,36529,36530,36532,36534],{"class":38,"line":8695},[36,36531,32689],{"class":53},[36,36533,32927],{"class":2713},[36,36535,32930],{"class":49},[36,36537,36538,36540,36542,36544,36546,36548,36550,36552,36554],{"class":38,"line":8719},[36,36539,31979],{"class":49},[36,36541,54],{"class":53},[36,36543,31193],{"class":49},[36,36545,31986],{"class":998},[36,36547,2454],{"class":53},[36,36549,31991],{"class":49},[36,36551,2451],{"class":53},[36,36553,32949],{"class":998},[36,36555,75],{"class":49},[36,36557,36558],{"class":38,"line":8724},[36,36559,194],{"emptyLinePlaceholder":193},[36,36561,36562],{"class":38,"line":8730},[36,36563,194],{"emptyLinePlaceholder":193},[36,36565,36566],{"class":38,"line":8757},[36,36567,32964],{"class":42},[36,36569,36570],{"class":38,"line":8762},[36,36571,32969],{"class":42},[36,36573,36574],{"class":38,"line":8768},[36,36575,32974],{"class":42},[36,36577,36578,36580,36582,36584,36586,36588,36590],{"class":38,"line":8780},[36,36579,32979],{"class":49},[36,36581,54],{"class":53},[36,36583,32984],{"class":49},[36,36585,32987],{"class":416},[36,36587,54],{"class":53},[36,36589,32992],{"class":60},[36,36591,75],{"class":49},[36,36593,36594],{"class":38,"line":8792},[36,36595,194],{"emptyLinePlaceholder":193},[36,36597,36598],{"class":38,"line":8804},[36,36599,33003],{"class":42},[36,36601,36602,36604,36606],{"class":38,"line":10463},[36,36603,33008],{"class":49},[36,36605,54],{"class":53},[36,36607,33013],{"class":49},[36,36609,36610],{"class":38,"line":10488},[36,36611,194],{"emptyLinePlaceholder":193},[36,36613,36614],{"class":38,"line":10511},[36,36615,33022],{"class":42},[36,36617,36618,36620,36622],{"class":38,"line":10535},[36,36619,32031],{"class":49},[36,36621,54],{"class":53},[36,36623,33031],{"class":49},[36,36625,36626],{"class":38,"line":10540},[36,36627,33036],{"class":42},[36,36629,36630],{"class":38,"line":10545},[36,36631,33041],{"class":42},[36,36633,36634],{"class":38,"line":10550},[36,36635,33046],{"class":42},[36,36637,36638,36640,36642],{"class":38,"line":10559},[36,36639,33051],{"class":49},[36,36641,54],{"class":53},[36,36643,33056],{"class":49},[36,36645,36646],{"class":38,"line":10564},[36,36647,194],{"emptyLinePlaceholder":193},[36,36649,36650],{"class":38,"line":10570},[36,36651,194],{"emptyLinePlaceholder":193},[36,36653,36654],{"class":38,"line":10591},[36,36655,33069],{"class":42},[36,36657,36658],{"class":38,"line":10597},[36,36659,33074],{"class":42},[36,36661,36662,36664,36666],{"class":38,"line":10611},[36,36663,33079],{"class":49},[36,36665,54],{"class":53},[36,36667,33084],{"class":60},[36,36669,36670],{"class":38,"line":10617},[36,36671,33089],{"class":42},[36,36673,36674,36676,36678],{"class":38,"line":10644},[36,36675,33094],{"class":49},[36,36677,54],{"class":53},[36,36679,33099],{"class":49},[36,36681,36682],{"class":38,"line":10653},[36,36683,33104],{"class":42},[36,36685,36686,36688,36690],{"class":38,"line":10659},[36,36687,33109],{"class":49},[36,36689,54],{"class":53},[36,36691,33099],{"class":49},[36,36693,36694],{"class":38,"line":10667},[36,36695,33118],{"class":42},[36,36697,36698,36700,36702],{"class":38,"line":10672},[36,36699,33123],{"class":49},[36,36701,54],{"class":53},[36,36703,33099],{"class":49},[36,36705,36706],{"class":38,"line":17348},[36,36707,33132],{"class":42},[36,36709,36710,36712,36714],{"class":38,"line":17354},[36,36711,33137],{"class":49},[36,36713,54],{"class":53},[36,36715,33099],{"class":49},[36,36717,36718],{"class":38,"line":17377},[36,36719,194],{"emptyLinePlaceholder":193},[36,36721,36722],{"class":38,"line":17383},[36,36723,33150],{"class":42},[36,36725,36726,36728,36730],{"class":38,"line":17406},[36,36727,33155],{"class":49},[36,36729,54],{"class":53},[36,36731,33160],{"class":49},[36,36733,36734],{"class":38,"line":17420},[36,36735,194],{"emptyLinePlaceholder":193},[36,36737,36738],{"class":38,"line":17440},[36,36739,194],{"emptyLinePlaceholder":193},[36,36741,36742],{"class":38,"line":17446},[36,36743,33173],{"class":42},[36,36745,36746,36748,36750,36752,36754],{"class":38,"line":17457},[36,36747,3950],{"class":53},[36,36749,33180],{"class":49},[36,36751,26788],{"class":53},[36,36753,33185],{"class":60},[36,36755,33188],{"class":49},[36,36757,36758,36760,36762,36764,36766,36768,36770,36772,36774,36776,36778],{"class":38,"line":17480},[36,36759,33193],{"class":60},[36,36761,901],{"class":49},[36,36763,33198],{"class":998},[36,36765,33201],{"class":60},[36,36767,1466],{"class":998},[36,36769,33201],{"class":60},[36,36771,1141],{"class":998},[36,36773,33210],{"class":49},[36,36775,1414],{"class":53},[36,36777,61],{"class":60},[36,36779,31239],{"class":49},[36,36781,36782,36784,36786,36788,36790,36792],{"class":38,"line":17502},[36,36783,33193],{"class":60},[36,36785,901],{"class":49},[36,36787,33225],{"class":998},[36,36789,1339],{"class":53},[36,36791,332],{"class":60},[36,36793,75],{"class":49},[36,36795,36796],{"class":38,"line":17507},[36,36797,194],{"emptyLinePlaceholder":193},[36,36799,36800],{"class":38,"line":17513},[36,36801,33240],{"class":42},[36,36803,36804],{"class":38,"line":17527},[36,36805,33245],{"class":42},[36,36807,36808,36810,36812],{"class":38,"line":17540},[36,36809,33250],{"class":49},[36,36811,54],{"class":53},[36,36813,33084],{"class":60},[36,36815,36816],{"class":38,"line":17545},[36,36817,33259],{"class":42},[36,36819,36820,36822,36824],{"class":38,"line":17559},[36,36821,33264],{"class":49},[36,36823,54],{"class":53},[36,36825,3834],{"class":60},[36,36827,36828],{"class":38,"line":17564},[36,36829,33273],{"class":42},[36,36831,36832,36834,36836],{"class":38,"line":17570},[36,36833,33278],{"class":49},[36,36835,54],{"class":53},[36,36837,33084],{"class":60},[36,36839,36840],{"class":38,"line":17575},[36,36841,33287],{"class":42},[36,36843,36844,36846,36848],{"class":38,"line":17589},[36,36845,33292],{"class":49},[36,36847,54],{"class":53},[36,36849,3834],{"class":60},[36,36851,36852],{"class":38,"line":17594},[36,36853,33301],{"class":42},[36,36855,36856,36858,36860],{"class":38,"line":17599},[36,36857,33306],{"class":49},[36,36859,54],{"class":53},[36,36861,3834],{"class":60},[36,36863,36864],{"class":38,"line":17613},[36,36865,33315],{"class":42},[36,36867,36868,36870,36872],{"class":38,"line":17625},[36,36869,33320],{"class":49},[36,36871,54],{"class":53},[36,36873,3834],{"class":60},[36,36875,36876],{"class":38,"line":17630},[36,36877,33329],{"class":42},[36,36879,36880,36882,36884,36886,36888],{"class":38,"line":17643},[36,36881,4152],{"class":53},[36,36883,32343],{"class":49},[36,36885,26788],{"class":53},[36,36887,32348],{"class":60},[36,36889,33342],{"class":49},[36,36891,36892],{"class":38,"line":17648},[36,36893,33347],{"class":42},[36,36895,36896,36898,36900],{"class":38,"line":17653},[36,36897,33352],{"class":49},[36,36899,54],{"class":53},[36,36901,33357],{"class":49},[36,36903,36904],{"class":38,"line":17658},[36,36905,33362],{"class":42},[36,36907,36908,36910,36912],{"class":38,"line":17671},[36,36909,33367],{"class":49},[36,36911,54],{"class":53},[36,36913,33372],{"class":49},[36,36915,36916],{"class":38,"line":17676},[36,36917,33378],{"class":42},[36,36919,36920],{"class":38,"line":33375},[36,36921,33384],{"class":49},[36,36923,36924],{"class":38,"line":33381},[36,36925,33390],{"class":42},[36,36927,36928],{"class":38,"line":33387},[36,36929,33396],{"class":42},[36,36931,36932,36934,36936],{"class":38,"line":33393},[36,36933,33402],{"class":49},[36,36935,54],{"class":53},[36,36937,33407],{"class":49},[36,36939,36940],{"class":38,"line":33399},[36,36941,33413],{"class":42},[36,36943,36944,36946,36948,36950,36952,36954,36956],{"class":38,"line":33410},[36,36945,33419],{"class":49},[36,36947,54],{"class":53},[36,36949,33424],{"class":49},[36,36951,33427],{"class":416},[36,36953,54],{"class":53},[36,36955,61],{"class":60},[36,36957,75],{"class":49},[36,36959,36960],{"class":38,"line":33416},[36,36961,33439],{"class":42},[36,36963,36964,36966,36968],{"class":38,"line":33436},[36,36965,33445],{"class":49},[36,36967,54],{"class":53},[36,36969,33450],{"class":49},[36,36971,36972],{"class":38,"line":33442},[36,36973,33456],{"class":42},[36,36975,36976],{"class":38,"line":33453},[36,36977,33462],{"class":49},[36,36979,36980],{"class":38,"line":33459},[36,36981,33468],{"class":42},[36,36983,36984],{"class":38,"line":33465},[36,36985,33474],{"class":49},[36,36987,36988],{"class":38,"line":33471},[36,36989,33480],{"class":42},[36,36991,36992],{"class":38,"line":33477},[36,36993,33486],{"class":49},[36,36995,36996],{"class":38,"line":33483},[36,36997,33492],{"class":42},[36,36999,37000,37002,37004,37006,37008,37010,37012],{"class":38,"line":33489},[36,37001,33498],{"class":49},[36,37003,10224],{"class":53},[36,37005,33503],{"class":49},[36,37007,1339],{"class":53},[36,37009,33508],{"class":49},[36,37011,643],{"class":60},[36,37013,75],{"class":49},[36,37015,37016],{"class":38,"line":33495},[36,37017,33518],{"class":42},[36,37019,37020,37022,37024,37026,37028],{"class":38,"line":33515},[36,37021,33524],{"class":49},[36,37023,10224],{"class":53},[36,37025,33529],{"class":49},[36,37027,3698],{"class":53},[36,37029,33534],{"class":49},[36,37031,37032],{"class":38,"line":33521},[36,37033,33540],{"class":42},[36,37035,37036,37038,37040,37042,37044],{"class":38,"line":33537},[36,37037,33546],{"class":49},[36,37039,10224],{"class":53},[36,37041,33508],{"class":49},[36,37043,643],{"class":60},[36,37045,75],{"class":49},[36,37047,37048],{"class":38,"line":33543},[36,37049,33560],{"class":42},[36,37051,37052,37054,37056,37058,37060],{"class":38,"line":33557},[36,37053,4152],{"class":53},[36,37055,33568],{"class":49},[36,37057,26788],{"class":53},[36,37059,32348],{"class":60},[36,37061,33575],{"class":49},[36,37063,37064],{"class":38,"line":33563},[36,37065,33581],{"class":42},[36,37067,37068,37070,37072],{"class":38,"line":33578},[36,37069,33352],{"class":49},[36,37071,54],{"class":53},[36,37073,33357],{"class":49},[36,37075,37076],{"class":38,"line":33584},[36,37077,33596],{"class":42},[36,37079,37080,37082,37084],{"class":38,"line":33593},[36,37081,33367],{"class":49},[36,37083,54],{"class":53},[36,37085,33372],{"class":49},[36,37087,37088],{"class":38,"line":33599},[36,37089,33611],{"class":42},[36,37091,37092],{"class":38,"line":33608},[36,37093,33617],{"class":49},[36,37095,37096],{"class":38,"line":33614},[36,37097,37098],{"class":42},"            # 验证时不计算梯度以节省内存\u002F计算\n",[36,37100,37101,37103],{"class":38,"line":33620},[36,37102,33623],{"class":53},[36,37104,33626],{"class":49},[36,37106,37107],{"class":38,"line":33629},[36,37108,33632],{"class":42},[36,37110,37111,37114,37116],{"class":38,"line":33635},[36,37112,37113],{"class":49},"                output",[36,37115,54],{"class":53},[36,37117,33407],{"class":49},[36,37119,37120],{"class":38,"line":33646},[36,37121,33649],{"class":42},[36,37123,37124,37127,37129,37131,37133,37135,37137],{"class":38,"line":33652},[36,37125,37126],{"class":49},"                pre_lab",[36,37128,54],{"class":53},[36,37130,33424],{"class":49},[36,37132,33427],{"class":416},[36,37134,54],{"class":53},[36,37136,61],{"class":60},[36,37138,75],{"class":49},[36,37140,37141],{"class":38,"line":33671},[36,37142,33674],{"class":42},[36,37144,37145,37148,37150],{"class":38,"line":33677},[36,37146,37147],{"class":49},"                val_batch_loss",[36,37149,54],{"class":53},[36,37151,33450],{"class":49},[36,37153,37154],{"class":38,"line":33688},[36,37155,33691],{"class":42},[36,37157,37158,37161,37163,37166,37168,37170,37172],{"class":38,"line":33694},[36,37159,37160],{"class":49},"                val_loss",[36,37162,10224],{"class":53},[36,37164,37165],{"class":49},"val_batch_loss.item()",[36,37167,1339],{"class":53},[36,37169,33508],{"class":49},[36,37171,643],{"class":60},[36,37173,75],{"class":49},[36,37175,37176,37179,37181,37183,37185],{"class":38,"line":33714},[36,37177,37178],{"class":49},"                val_corrects",[36,37180,10224],{"class":53},[36,37182,33529],{"class":49},[36,37184,3698],{"class":53},[36,37186,33534],{"class":49},[36,37188,37189],{"class":38,"line":33730},[36,37190,37191],{"class":42},"            # 当前用于验证的样本数量\n",[36,37193,37194,37197,37199,37201,37203],{"class":38,"line":33736},[36,37195,37196],{"class":49},"            val_num",[36,37198,10224],{"class":53},[36,37200,33508],{"class":49},[36,37202,643],{"class":60},[36,37204,75],{"class":49},[36,37206,37207],{"class":38,"line":33750},[36,37208,33753],{"class":42},[36,37210,37211],{"class":38,"line":33756},[36,37212,33759],{"class":42},[36,37214,37215,37217,37219],{"class":38,"line":33762},[36,37216,33765],{"class":49},[36,37218,1466],{"class":53},[36,37220,33770],{"class":49},[36,37222,37223],{"class":38,"line":33773},[36,37224,33776],{"class":42},[36,37226,37227],{"class":38,"line":33779},[36,37228,33782],{"class":42},[36,37230,37231,37233,37235],{"class":38,"line":33785},[36,37232,33788],{"class":49},[36,37234,1466],{"class":53},[36,37236,33770],{"class":49},[36,37238,37239],{"class":38,"line":33795},[36,37240,33798],{"class":42},[36,37242,37243,37245,37247],{"class":38,"line":33801},[36,37244,33804],{"class":49},[36,37246,1466],{"class":53},[36,37248,33809],{"class":49},[36,37250,37251],{"class":38,"line":33812},[36,37252,33815],{"class":42},[36,37254,37255,37257,37259],{"class":38,"line":33818},[36,37256,33821],{"class":49},[36,37258,1466],{"class":53},[36,37260,33809],{"class":49},[36,37262,37263],{"class":38,"line":33828},[36,37264,194],{"emptyLinePlaceholder":193},[36,37266,37267],{"class":38,"line":33833},[36,37268,33836],{"class":42},[36,37270,37271,37273,37275,37277,37279,37281,37283,37285,37287,37289,37291,37293,37295,37297,37299,37301,37303,37305,37307,37309],{"class":38,"line":33839},[36,37272,33193],{"class":60},[36,37274,901],{"class":49},[36,37276,4341],{"class":998},[36,37278,33201],{"class":60},[36,37280,33850],{"class":998},[36,37282,1775],{"class":60},[36,37284,33855],{"class":53},[36,37286,1825],{"class":60},[36,37288,33860],{"class":998},[36,37290,1775],{"class":60},[36,37292,33855],{"class":53},[36,37294,1825],{"class":60},[36,37296,4341],{"class":998},[36,37298,33871],{"class":49},[36,37300,1414],{"class":53},[36,37302,61],{"class":60},[36,37304,33878],{"class":49},[36,37306,1414],{"class":53},[36,37308,61],{"class":60},[36,37310,33885],{"class":49},[36,37312,37313,37315,37317,37319,37321,37323,37325,37327,37329,37331,37333,37335,37337,37339,37341,37343,37345,37347,37349,37351],{"class":38,"line":33888},[36,37314,33193],{"class":60},[36,37316,901],{"class":49},[36,37318,4341],{"class":998},[36,37320,33201],{"class":60},[36,37322,33899],{"class":998},[36,37324,1775],{"class":60},[36,37326,33855],{"class":53},[36,37328,1825],{"class":60},[36,37330,33908],{"class":998},[36,37332,1775],{"class":60},[36,37334,33855],{"class":53},[36,37336,1825],{"class":60},[36,37338,4341],{"class":998},[36,37340,33919],{"class":49},[36,37342,1414],{"class":53},[36,37344,61],{"class":60},[36,37346,33926],{"class":49},[36,37348,1414],{"class":53},[36,37350,61],{"class":60},[36,37352,33885],{"class":49},[36,37354,37355],{"class":38,"line":33935},[36,37356,194],{"emptyLinePlaceholder":193},[36,37358,37359],{"class":38,"line":33940},[36,37360,33943],{"class":42},[36,37362,37363,37365,37367,37369,37371,37373,37375],{"class":38,"line":33946},[36,37364,3246],{"class":53},[36,37366,33951],{"class":49},[36,37368,1414],{"class":53},[36,37370,61],{"class":60},[36,37372,1819],{"class":49},[36,37374,1839],{"class":53},[36,37376,33962],{"class":49},[36,37378,37379],{"class":38,"line":33965},[36,37380,33968],{"class":42},[36,37382,37383,37385,37387,37389,37391,37393,37395],{"class":38,"line":33971},[36,37384,33974],{"class":49},[36,37386,478],{"class":60},[36,37388,54],{"class":53},[36,37390,33981],{"class":49},[36,37392,1414],{"class":53},[36,37394,61],{"class":60},[36,37396,33988],{"class":49},[36,37398,37399],{"class":38,"line":33991},[36,37400,33994],{"class":42},[36,37402,37403],{"class":38,"line":33997},[36,37404,34000],{"class":42},[36,37406,37407,37409,37411],{"class":38,"line":34003},[36,37408,34006],{"class":49},[36,37410,54],{"class":53},[36,37412,33056],{"class":49},[36,37414,37415],{"class":38,"line":34013},[36,37416,194],{"emptyLinePlaceholder":193},[36,37418,37419],{"class":38,"line":34018},[36,37420,34021],{"class":42},[36,37422,37423,37425,37427,37429,37431],{"class":38,"line":34024},[36,37424,34027],{"class":49},[36,37426,54],{"class":53},[36,37428,34032],{"class":49},[36,37430,1414],{"class":53},[36,37432,34037],{"class":49},[36,37434,37435,37437,37439,37441,37443,37445,37447,37449,37451,37453,37455,37457,37459,37461,37463,37465,37467,37469],{"class":38,"line":34040},[36,37436,33193],{"class":60},[36,37438,901],{"class":49},[36,37440,34047],{"class":998},[36,37442,1775],{"class":60},[36,37444,34052],{"class":53},[36,37446,1825],{"class":60},[36,37448,1426],{"class":998},[36,37450,1775],{"class":60},[36,37452,34052],{"class":53},[36,37454,1825],{"class":60},[36,37456,34065],{"class":998},[36,37458,34068],{"class":49},[36,37460,34071],{"class":53},[36,37462,1786],{"class":60},[36,37464,34076],{"class":49},[36,37466,1214],{"class":53},[36,37468,1786],{"class":60},[36,37470,31239],{"class":49},[36,37472,37473],{"class":38,"line":34085},[36,37474,37475],{"class":42},"    # 选择最优参数并保存\n",[36,37477,37478],{"class":38,"line":34091},[36,37479,37480],{"class":42},"    # 保存最佳模型权重字典\n",[36,37482,37483,37486,37488],{"class":38,"line":34097},[36,37484,37485],{"class":49},"    torch.save(best_model_wts,",[36,37487,34109],{"class":998},[36,37489,75],{"class":49},[36,37491,37492],{"class":38,"line":34103},[36,37493,34129],{"class":42},[36,37495,37496,37498,37500,37502,37504,37506],{"class":38,"line":34114},[36,37497,34135],{"class":49},[36,37499,54],{"class":53},[36,37501,34140],{"class":49},[36,37503,34143],{"class":416},[36,37505,54],{"class":53},[36,37507,2296],{"class":49},[36,37509,37510,37512,37514,37516],{"class":38,"line":34120},[36,37511,34153],{"class":998},[36,37513,1738],{"class":49},[36,37515,34158],{"class":60},[36,37517,34161],{"class":49},[36,37519,37520,37522],{"class":38,"line":34126},[36,37521,34167],{"class":998},[36,37523,34170],{"class":49},[36,37525,37526,37528],{"class":38,"line":34132},[36,37527,34176],{"class":998},[36,37529,34179],{"class":49},[36,37531,37532,37534],{"class":38,"line":34150},[36,37533,34185],{"class":998},[36,37535,34188],{"class":49},[36,37537,37538,37540],{"class":38,"line":34164},[36,37539,34194],{"class":998},[36,37541,34197],{"class":49},[36,37543,37544],{"class":38,"line":34173},[36,37545,34203],{"class":49},[36,37547,37548],{"class":38,"line":34182},[36,37549,34209],{"class":42},[36,37551,37552,37554],{"class":38,"line":34191},[36,37553,4839],{"class":53},[36,37555,34217],{"class":49},[36,37557,37558],{"class":38,"line":34200},[36,37559,194],{"emptyLinePlaceholder":193},[36,37561,37562],{"class":38,"line":34206},[36,37563,34228],{"class":42},[36,37565,37566,37568,37570],{"class":38,"line":34212},[36,37567,32689],{"class":53},[36,37569,34236],{"class":2713},[36,37571,34239],{"class":49},[36,37573,37574],{"class":38,"line":34220},[36,37575,34245],{"class":42},[36,37577,37578,37580,37582,37584,37586,37588,37590,37592],{"class":38,"line":34225},[36,37579,34251],{"class":49},[36,37581,32435],{"class":416},[36,37583,54],{"class":53},[36,37585,901],{"class":49},[36,37587,625],{"class":60},[36,37589,64],{"class":49},[36,37591,186],{"class":60},[36,37593,31239],{"class":49},[36,37595,37596],{"class":38,"line":34231},[36,37597,34271],{"class":42},[36,37599,37600],{"class":38,"line":34242},[36,37601,34277],{"class":42},[36,37603,37604],{"class":38,"line":34248},[36,37605,34283],{"class":42},[36,37607,37608,37610,37612,37614,37616,37618,37620],{"class":38,"line":34268},[36,37609,32469],{"class":49},[36,37611,61],{"class":60},[36,37613,64],{"class":49},[36,37615,181],{"class":60},[36,37617,64],{"class":49},[36,37619,61],{"class":60},[36,37621,75],{"class":49},[36,37623,37624],{"class":38,"line":34274},[36,37625,34306],{"class":42},[36,37627,37628],{"class":38,"line":34280},[36,37629,34312],{"class":42},[36,37631,37632],{"class":38,"line":34286},[36,37633,34318],{"class":42},[36,37635,37636],{"class":38,"line":34303},[36,37637,34324],{"class":42},[36,37639,37640],{"class":38,"line":34309},[36,37641,34330],{"class":42},[36,37643,37644,37646,37648,37650,37652,37654,37656,37658,37660],{"class":38,"line":34315},[36,37645,34336],{"class":49},[36,37647,34339],{"class":998},[36,37649,34342],{"class":49},[36,37651,34345],{"class":998},[36,37653,64],{"class":49},[36,37655,34350],{"class":416},[36,37657,54],{"class":53},[36,37659,34355],{"class":998},[36,37661,75],{"class":49},[36,37663,37664,37666,37668,37670,37672,37674,37676,37678,37680],{"class":38,"line":34321},[36,37665,34336],{"class":49},[36,37667,34339],{"class":998},[36,37669,34367],{"class":49},[36,37671,34370],{"class":998},[36,37673,64],{"class":49},[36,37675,34350],{"class":416},[36,37677,54],{"class":53},[36,37679,34379],{"class":998},[36,37681,75],{"class":49},[36,37683,37684],{"class":38,"line":34327},[36,37685,34387],{"class":42},[36,37687,37688],{"class":38,"line":34333},[36,37689,34393],{"class":49},[36,37691,37692],{"class":38,"line":34360},[36,37693,34399],{"class":42},[36,37695,37696,37698,37700],{"class":38,"line":34384},[36,37697,34405],{"class":49},[36,37699,34408],{"class":998},[36,37701,75],{"class":49},[36,37703,37704,37706,37708],{"class":38,"line":34390},[36,37705,34416],{"class":49},[36,37707,34419],{"class":998},[36,37709,75],{"class":49},[36,37711,37712],{"class":38,"line":34396},[36,37713,34427],{"class":42},[36,37715,37716,37718,37720,37722,37724,37726,37728],{"class":38,"line":34402},[36,37717,32469],{"class":49},[36,37719,61],{"class":60},[36,37721,64],{"class":49},[36,37723,181],{"class":60},[36,37725,64],{"class":49},[36,37727,181],{"class":60},[36,37729,75],{"class":49},[36,37731,37732,37734,37736,37738,37740,37742,37744,37746,37748],{"class":38,"line":34413},[36,37733,34336],{"class":49},[36,37735,34339],{"class":998},[36,37737,34454],{"class":49},[36,37739,34345],{"class":998},[36,37741,64],{"class":49},[36,37743,34350],{"class":416},[36,37745,54],{"class":53},[36,37747,34465],{"class":998},[36,37749,75],{"class":49},[36,37751,37752,37754,37756,37758,37760,37762,37764,37766,37768],{"class":38,"line":34424},[36,37753,34336],{"class":49},[36,37755,34339],{"class":998},[36,37757,34477],{"class":49},[36,37759,34370],{"class":998},[36,37761,64],{"class":49},[36,37763,34350],{"class":416},[36,37765,54],{"class":53},[36,37767,34488],{"class":998},[36,37769,75],{"class":49},[36,37771,37772],{"class":38,"line":34430},[36,37773,34496],{"class":42},[36,37775,37776],{"class":38,"line":34447},[36,37777,34393],{"class":49},[36,37779,37780,37782,37784],{"class":38,"line":34470},[36,37781,34405],{"class":49},[36,37783,34339],{"class":998},[36,37785,75],{"class":49},[36,37787,37788,37790,37792],{"class":38,"line":34493},[36,37789,34416],{"class":49},[36,37791,34518],{"class":998},[36,37793,75],{"class":49},[36,37795,37796],{"class":38,"line":34499},[36,37797,34526],{"class":49},[36,37799,37800],{"class":38,"line":34504},[36,37801,194],{"emptyLinePlaceholder":193},[36,37803,37804],{"class":38,"line":34513},[36,37805,34537],{"class":42},[36,37807,37808,37810,37812,37814,37816],{"class":38,"line":34523},[36,37809,2281],{"class":53},[36,37811,31962],{"class":60},[36,37813,3698],{"class":53},[36,37815,31967],{"class":998},[36,37817,4488],{"class":49},[36,37819,37820],{"class":38,"line":34529},[36,37821,34556],{"class":42},[36,37823,37824,37827,37829],{"class":38,"line":34534},[36,37825,37826],{"class":49},"    AlexNet",[36,37828,54],{"class":53},[36,37830,37831],{"class":49},"AlexNet()\n",[36,37833,37834,37836,37838],{"class":38,"line":34540},[36,37835,34573],{"class":49},[36,37837,54],{"class":53},[36,37839,34578],{"class":49},[36,37841,37842,37844,37846,37849,37851,37853,37855],{"class":38,"line":34553},[36,37843,34135],{"class":49},[36,37845,54],{"class":53},[36,37847,37848],{"class":49},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[36,37850,34591],{"class":416},[36,37852,54],{"class":53},[36,37854,72],{"class":60},[36,37856,75],{"class":49},[36,37858,37859],{"class":38,"line":34559},[36,37860,34603],{"class":49},[851,37862,37863],{"start":78},[854,37864,34616],{},[26,37866,37868],{"className":28,"code":37867,"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,37869,37870,37876,37886,37896,37906,37910,37920,37930,37941,37945,37949,37953,37961,37977,37987,38003,38013,38027,38031,38041,38051,38061,38067,38071,38075,38083,38087,38103,38111,38115,38119,38127,38135,38139,38143,38147,38151,38157,38161,38171,38179,38187,38191,38195,38199,38207,38211,38227,38231,38235,38239,38251,38255,38267,38271,38275,38287,38291,38301,38305,38309,38321,38325,38333,38337,38341,38349,38353,38361,38365,38369,38373,38377,38381,38397,38405,38409,38413,38461,38467,38471,38481,38489,38497,38501,38505,38509,38513,38521,38525,38541,38545,38553,38561],{"__ignoreMap":31},[36,37871,37872,37874],{"class":38,"line":39},[36,37873,31135],{"class":53},[36,37875,31138],{"class":49},[36,37877,37878,37880,37882,37884],{"class":38,"line":46},[36,37879,31135],{"class":53},[36,37881,32157],{"class":49},[36,37883,32125],{"class":53},[36,37885,32162],{"class":49},[36,37887,37888,37890,37892,37894],{"class":38,"line":78},[36,37889,31479],{"class":53},[36,37891,34644],{"class":49},[36,37893,31135],{"class":53},[36,37895,34649],{"class":49},[36,37897,37898,37900,37902,37904],{"class":38,"line":125},[36,37899,31479],{"class":53},[36,37901,32140],{"class":49},[36,37903,31135],{"class":53},[36,37905,32145],{"class":49},[36,37907,37908],{"class":38,"line":131},[36,37909,34664],{"class":42},[36,37911,37912,37914,37916,37918],{"class":38,"line":396},[36,37913,31479],{"class":53},[36,37915,32110],{"class":49},[36,37917,31135],{"class":53},[36,37919,32115],{"class":49},[36,37921,37922,37924,37926,37928],{"class":38,"line":407},[36,37923,31479],{"class":53},[36,37925,32656],{"class":49},[36,37927,31135],{"class":53},[36,37929,36299],{"class":49},[36,37931,37932,37934,37937,37939],{"class":38,"line":2061},[36,37933,31479],{"class":53},[36,37935,37936],{"class":49}," 练习.AlexNet.model ",[36,37938,31135],{"class":53},[36,37940,36299],{"class":49},[36,37942,37943],{"class":38,"line":2067},[36,37944,194],{"emptyLinePlaceholder":193},[36,37946,37947],{"class":38,"line":2079},[36,37948,194],{"emptyLinePlaceholder":193},[36,37950,37951],{"class":38,"line":2362},[36,37952,34693],{"class":42},[36,37954,37955,37957,37959],{"class":38,"line":2367},[36,37956,32689],{"class":53},[36,37958,34700],{"class":2713},[36,37960,32695],{"class":49},[36,37962,37963,37965,37967,37969,37971,37973,37975],{"class":38,"line":2373},[36,37964,34707],{"class":49},[36,37966,54],{"class":53},[36,37968,32197],{"class":49},[36,37970,32200],{"class":416},[36,37972,54],{"class":53},[36,37974,32205],{"class":998},[36,37976,32208],{"class":49},[36,37978,37979,37981,37983,37985],{"class":38,"line":2378},[36,37980,34724],{"class":416},[36,37982,54],{"class":53},[36,37984,34729],{"class":60},[36,37986,32208],{"class":49},[36,37988,37989,37991,37993,37995,37997,37999,38001],{"class":38,"line":2392},[36,37990,34736],{"class":416},[36,37992,54],{"class":53},[36,37994,32235],{"class":49},[36,37996,32238],{"class":416},[36,37998,54],{"class":53},[36,38000,36191],{"class":60},[36,38002,32246],{"class":49},[36,38004,38005,38007,38009,38011],{"class":38,"line":2397},[36,38006,34753],{"class":416},[36,38008,54],{"class":53},[36,38010,32218],{"class":60},[36,38012,75],{"class":49},[36,38014,38015,38017,38019,38021,38023,38025],{"class":38,"line":2403},[36,38016,34764],{"class":49},[36,38018,54],{"class":53},[36,38020,32276],{"class":49},[36,38022,32279],{"class":416},[36,38024,54],{"class":53},[36,38026,34775],{"class":49},[36,38028,38029],{"class":38,"line":2424},[36,38030,34780],{"class":42},[36,38032,38033,38035,38037,38039],{"class":38,"line":2429},[36,38034,34785],{"class":416},[36,38036,54],{"class":53},[36,38038,61],{"class":60},[36,38040,32208],{"class":49},[36,38042,38043,38045,38047,38049],{"class":38,"line":2443},[36,38044,34796],{"class":416},[36,38046,54],{"class":53},[36,38048,32218],{"class":60},[36,38050,32208],{"class":49},[36,38052,38053,38055,38057,38059],{"class":38,"line":2448},[36,38054,34807],{"class":416},[36,38056,54],{"class":53},[36,38058,643],{"class":60},[36,38060,75],{"class":49},[36,38062,38063,38065],{"class":38,"line":2477},[36,38064,4839],{"class":53},[36,38066,34820],{"class":49},[36,38068,38069],{"class":38,"line":2482},[36,38070,194],{"emptyLinePlaceholder":193},[36,38072,38073],{"class":38,"line":2499},[36,38074,34829],{"class":42},[36,38076,38077,38079,38081],{"class":38,"line":2504},[36,38078,32689],{"class":53},[36,38080,34836],{"class":2713},[36,38082,34839],{"class":49},[36,38084,38085],{"class":38,"line":2509},[36,38086,34844],{"class":42},[36,38088,38089,38091,38093,38095,38097,38099,38101],{"class":38,"line":2514},[36,38090,31979],{"class":49},[36,38092,54],{"class":53},[36,38094,31986],{"class":998},[36,38096,2454],{"class":53},[36,38098,31991],{"class":49},[36,38100,2451],{"class":53},[36,38102,34861],{"class":998},[36,38104,38105,38107,38109],{"class":38,"line":2528},[36,38106,32031],{"class":49},[36,38108,54],{"class":53},[36,38110,33031],{"class":49},[36,38112,38113],{"class":38,"line":2533},[36,38114,194],{"emptyLinePlaceholder":193},[36,38116,38117],{"class":38,"line":3326},[36,38118,34878],{"class":42},[36,38120,38121,38123,38125],{"class":38,"line":3340},[36,38122,34883],{"class":49},[36,38124,54],{"class":53},[36,38126,33084],{"class":60},[36,38128,38129,38131,38133],{"class":38,"line":3348},[36,38130,34892],{"class":49},[36,38132,54],{"class":53},[36,38134,3834],{"class":60},[36,38136,38137],{"class":38,"line":3353},[36,38138,194],{"emptyLinePlaceholder":193},[36,38140,38141],{"class":38,"line":3359},[36,38142,34905],{"class":42},[36,38144,38145],{"class":38,"line":3365},[36,38146,34910],{"class":42},[36,38148,38149],{"class":38,"line":3370},[36,38150,34915],{"class":42},[36,38152,38153,38155],{"class":38,"line":8695},[36,38154,34920],{"class":53},[36,38156,33626],{"class":49},[36,38158,38159],{"class":38,"line":8719},[36,38160,34927],{"class":42},[36,38162,38163,38165,38167,38169],{"class":38,"line":8724},[36,38164,4152],{"class":53},[36,38166,34934],{"class":49},[36,38168,26788],{"class":53},[36,38170,34939],{"class":49},[36,38172,38173,38175,38177],{"class":38,"line":8730},[36,38174,34944],{"class":49},[36,38176,54],{"class":53},[36,38178,34949],{"class":49},[36,38180,38181,38183,38185],{"class":38,"line":8757},[36,38182,34954],{"class":49},[36,38184,54],{"class":53},[36,38186,34959],{"class":49},[36,38188,38189],{"class":38,"line":8762},[36,38190,34964],{"class":42},[36,38192,38193],{"class":38,"line":8768},[36,38194,33617],{"class":49},[36,38196,38197],{"class":38,"line":8780},[36,38198,34973],{"class":42},[36,38200,38201,38203,38205],{"class":38,"line":8792},[36,38202,33402],{"class":49},[36,38204,54],{"class":53},[36,38206,34982],{"class":49},[36,38208,38209],{"class":38,"line":8804},[36,38210,34987],{"class":42},[36,38212,38213,38215,38217,38219,38221,38223,38225],{"class":38,"line":10463},[36,38214,33419],{"class":49},[36,38216,54],{"class":53},[36,38218,33424],{"class":49},[36,38220,33427],{"class":416},[36,38222,54],{"class":53},[36,38224,61],{"class":60},[36,38226,75],{"class":49},[36,38228,38229],{"class":38,"line":10488},[36,38230,35008],{"class":42},[36,38232,38233],{"class":38,"line":10511},[36,38234,35013],{"class":42},[36,38236,38237],{"class":38,"line":10535},[36,38238,35018],{"class":42},[36,38240,38241,38243,38245,38247,38249],{"class":38,"line":10540},[36,38242,35023],{"class":49},[36,38244,10224],{"class":53},[36,38246,33529],{"class":49},[36,38248,3698],{"class":53},[36,38250,35032],{"class":49},[36,38252,38253],{"class":38,"line":10545},[36,38254,35037],{"class":42},[36,38256,38257,38259,38261,38263,38265],{"class":38,"line":10550},[36,38258,35042],{"class":49},[36,38260,10224],{"class":53},[36,38262,35047],{"class":49},[36,38264,643],{"class":60},[36,38266,75],{"class":49},[36,38268,38269],{"class":38,"line":10559},[36,38270,194],{"emptyLinePlaceholder":193},[36,38272,38273],{"class":38,"line":10564},[36,38274,35060],{"class":42},[36,38276,38277,38279,38281,38283,38285],{"class":38,"line":10570},[36,38278,35065],{"class":49},[36,38280,54],{"class":53},[36,38282,35070],{"class":49},[36,38284,1466],{"class":53},[36,38286,35075],{"class":49},[36,38288,38289],{"class":38,"line":10591},[36,38290,35080],{"class":42},[36,38292,38293,38295,38297,38299],{"class":38,"line":10597},[36,38294,33193],{"class":60},[36,38296,901],{"class":49},[36,38298,35089],{"class":998},[36,38300,35092],{"class":49},[36,38302,38303],{"class":38,"line":10611},[36,38304,194],{"emptyLinePlaceholder":193},[36,38306,38307],{"class":38,"line":10617},[36,38308,35101],{"class":42},[36,38310,38311,38313,38315,38317,38319],{"class":38,"line":10644},[36,38312,2281],{"class":53},[36,38314,31962],{"class":60},[36,38316,3698],{"class":53},[36,38318,31967],{"class":998},[36,38320,4488],{"class":49},[36,38322,38323],{"class":38,"line":10653},[36,38324,35118],{"class":42},[36,38326,38327,38329,38331],{"class":38,"line":10659},[36,38328,32031],{"class":49},[36,38330,54],{"class":53},[36,38332,37831],{"class":49},[36,38334,38335],{"class":38,"line":10667},[36,38336,35131],{"class":42},[36,38338,38339],{"class":38,"line":10672},[36,38340,35136],{"class":42},[36,38342,38343,38345,38347],{"class":38,"line":17348},[36,38344,35141],{"class":49},[36,38346,35144],{"class":998},[36,38348,31239],{"class":49},[36,38350,38351],{"class":38,"line":17354},[36,38352,35151],{"class":42},[36,38354,38355,38357,38359],{"class":38,"line":17377},[36,38356,34764],{"class":49},[36,38358,54],{"class":53},[36,38360,35160],{"class":49},[36,38362,38363],{"class":38,"line":17383},[36,38364,35165],{"class":42},[36,38366,38367],{"class":38,"line":17406},[36,38368,35170],{"class":49},[36,38370,38371],{"class":38,"line":17420},[36,38372,194],{"emptyLinePlaceholder":193},[36,38374,38375],{"class":38,"line":17440},[36,38376,35179],{"class":42},[36,38378,38379],{"class":38,"line":17446},[36,38380,35184],{"class":42},[36,38382,38383,38385,38387,38389,38391,38393,38395],{"class":38,"line":17457},[36,38384,31979],{"class":49},[36,38386,54],{"class":53},[36,38388,31986],{"class":998},[36,38390,2454],{"class":53},[36,38392,31991],{"class":49},[36,38394,2451],{"class":53},[36,38396,34861],{"class":998},[36,38398,38399,38401,38403],{"class":38,"line":17480},[36,38400,32031],{"class":49},[36,38402,54],{"class":53},[36,38404,33031],{"class":49},[36,38406,38407],{"class":38,"line":17502},[36,38408,35213],{"class":42},[36,38410,38411],{"class":38,"line":17507},[36,38412,35218],{"class":42},[36,38414,38415,38417,38419,38421,38423,38425,38427,38429,38431,38433,38435,38437,38439,38441,38443,38445,38447,38449,38451,38453,38455,38457,38459],{"class":38,"line":17513},[36,38416,35223],{"class":49},[36,38418,54],{"class":53},[36,38420,1769],{"class":49},[36,38422,35230],{"class":998},[36,38424,64],{"class":49},[36,38426,35235],{"class":998},[36,38428,64],{"class":49},[36,38430,35240],{"class":998},[36,38432,64],{"class":49},[36,38434,35245],{"class":998},[36,38436,64],{"class":49},[36,38438,35250],{"class":998},[36,38440,64],{"class":49},[36,38442,35255],{"class":998},[36,38444,64],{"class":49},[36,38446,35260],{"class":998},[36,38448,64],{"class":49},[36,38450,35265],{"class":998},[36,38452,64],{"class":49},[36,38454,35270],{"class":998},[36,38456,64],{"class":49},[36,38458,35275],{"class":998},[36,38460,33988],{"class":49},[36,38462,38463,38465],{"class":38,"line":17527},[36,38464,34920],{"class":53},[36,38466,33626],{"class":49},[36,38468,38469],{"class":38,"line":17540},[36,38470,35288],{"class":42},[36,38472,38473,38475,38477,38479],{"class":38,"line":17545},[36,38474,4152],{"class":53},[36,38476,35295],{"class":49},[36,38478,26788],{"class":53},[36,38480,34939],{"class":49},[36,38482,38483,38485,38487],{"class":38,"line":17559},[36,38484,33352],{"class":49},[36,38486,54],{"class":53},[36,38488,33357],{"class":49},[36,38490,38491,38493,38495],{"class":38,"line":17564},[36,38492,33367],{"class":49},[36,38494,54],{"class":53},[36,38496,33372],{"class":49},[36,38498,38499],{"class":38,"line":17570},[36,38500,194],{"emptyLinePlaceholder":193},[36,38502,38503],{"class":38,"line":17575},[36,38504,35324],{"class":42},[36,38506,38507],{"class":38,"line":17589},[36,38508,33617],{"class":49},[36,38510,38511],{"class":38,"line":17594},[36,38512,35333],{"class":42},[36,38514,38515,38517,38519],{"class":38,"line":17599},[36,38516,33402],{"class":49},[36,38518,54],{"class":53},[36,38520,33407],{"class":49},[36,38522,38523],{"class":38,"line":17613},[36,38524,35346],{"class":42},[36,38526,38527,38529,38531,38533,38535,38537,38539],{"class":38,"line":17625},[36,38528,33419],{"class":49},[36,38530,54],{"class":53},[36,38532,33424],{"class":49},[36,38534,33427],{"class":416},[36,38536,54],{"class":53},[36,38538,61],{"class":60},[36,38540,75],{"class":49},[36,38542,38543],{"class":38,"line":17630},[36,38544,35367],{"class":42},[36,38546,38547,38549,38551],{"class":38,"line":17643},[36,38548,35372],{"class":49},[36,38550,54],{"class":53},[36,38552,35377],{"class":49},[36,38554,38555,38557,38559],{"class":38,"line":17648},[36,38556,35382],{"class":49},[36,38558,54],{"class":53},[36,38560,35387],{"class":49},[36,38562,38563,38565,38567,38569,38571,38573,38575,38577],{"class":38,"line":17653},[36,38564,35392],{"class":60},[36,38566,901],{"class":49},[36,38568,35397],{"class":998},[36,38570,35400],{"class":49},[36,38572,35403],{"class":998},[36,38574,64],{"class":49},[36,38576,35408],{"class":998},[36,38578,35411],{"class":49},[868,38580,38582],{"id":38581},"_22vgg","2.2.VGG",[22742,38584,38586],{"id":38585},"_221原理","2.2.1.原理",[14,38588,38589],{},[2212,38590],{"alt":31,"src":38591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[14,38593,38594],{},[2212,38595],{"alt":31,"src":38596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[14,38598,38599],{},[2212,38600],{"alt":31,"src":38601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[14,38603,38604],{},"参数详细描述：",[14,38606,38607],{},[2212,38608],{"alt":31,"src":38609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[14,38611,38612],{},[2212,38613],{"alt":31,"src":38614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[14,38616,38617],{},[2212,38618],{"alt":31,"src":38619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[14,38621,38622],{},[2212,38623],{"alt":31,"src":38624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[14,38626,38627],{},[2212,38628],{"alt":31,"src":38629},"\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",[22742,38631,38633],{"id":38632},"_222代码实现","2.2.2.代码实现",[851,38635,38636],{},[854,38637,38638],{},"网络搭建",[26,38640,38642],{"className":28,"code":38641,"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,38643,38644,38650,38662,38672,38682,38686,38703,38711,38730,38735,38740,38752,38790,38795,38831,38835,38864,38869,38874,38885,38921,38925,38961,38965,38993,38997,39002,39013,39049,39053,39089,39093,39129,39133,39161,39165,39170,39181,39218,39222,39258,39262,39298,39302,39330,39334,39339,39350,39386,39390,39426,39430,39466,39470,39498,39502,39507,39518,39523,39528,39533,39554,39558,39570,39574,39586,39590,39594,39599,39604,39619,39624,39634,39639,39654,39659,39678,39683,39692,39697,39707,39712,39717,39731,39736,39750,39758,39762,39766,39774,39785,39796,39807,39818,39829,39840,39846,39850,39855,39868,39888,39894,39903],{"__ignoreMap":31},[36,38645,38646,38648],{"class":38,"line":39},[36,38647,31135],{"class":53},[36,38649,31138],{"class":49},[36,38651,38652,38654,38657,38659],{"class":38,"line":46},[36,38653,31479],{"class":53},[36,38655,38656],{"class":49}," sympy.core.sympify ",[36,38658,31135],{"class":53},[36,38660,38661],{"class":49}," kernS\n",[36,38663,38664,38666,38668,38670],{"class":38,"line":78},[36,38665,31479],{"class":53},[36,38667,31482],{"class":49},[36,38669,31135],{"class":53},[36,38671,31487],{"class":49},[36,38673,38674,38676,38678,38680],{"class":38,"line":125},[36,38675,31479],{"class":53},[36,38677,31499],{"class":49},[36,38679,31135],{"class":53},[36,38681,31504],{"class":49},[36,38683,38684],{"class":38,"line":131},[36,38685,194],{"emptyLinePlaceholder":193},[36,38687,38688,38690,38693,38695,38697,38699,38701],{"class":38,"line":396},[36,38689,15438],{"class":53},[36,38691,38692],{"class":2713}," VGG16",[36,38694,901],{"class":49},[36,38696,31520],{"class":2713},[36,38698,1440],{"class":49},[36,38700,31525],{"class":2713},[36,38702,31528],{"class":49},[36,38704,38705,38707,38709],{"class":38,"line":407},[36,38706,31543],{"class":53},[36,38708,31546],{"class":60},[36,38710,31549],{"class":49},[36,38712,38713,38715,38717,38720,38722,38724,38726,38728],{"class":38,"line":2061},[36,38714,31559],{"class":60},[36,38716,901],{"class":49},[36,38718,38719],{"class":60},"VGG16",[36,38721,154],{"class":49},[36,38723,31565],{"class":60},[36,38725,31568],{"class":49},[36,38727,31571],{"class":60},[36,38729,2726],{"class":49},[36,38731,38732],{"class":38,"line":2067},[36,38733,38734],{"class":42},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[36,38736,38737],{"class":38,"line":2079},[36,38738,38739],{"class":42},"        # 这里用的是灰度图\n",[36,38741,38742,38744,38747,38749],{"class":38,"line":2362},[36,38743,31587],{"class":60},[36,38745,38746],{"class":49},".block1",[36,38748,54],{"class":53},[36,38750,38751],{"class":49},"nn.Sequential(\n",[36,38753,38754,38757,38759,38761,38763,38765,38767,38769,38771,38773,38775,38777,38779,38781,38783,38785,38787],{"class":38,"line":2367},[36,38755,38756],{"class":49},"            nn.Conv2d(",[36,38758,31598],{"class":416},[36,38760,54],{"class":53},[36,38762,61],{"class":60},[36,38764,64],{"class":49},[36,38766,31607],{"class":416},[36,38768,54],{"class":53},[36,38770,1095],{"class":60},[36,38772,64],{"class":49},[36,38774,31616],{"class":416},[36,38776,54],{"class":53},[36,38778,162],{"class":60},[36,38780,64],{"class":49},[36,38782,31625],{"class":416},[36,38784,54],{"class":53},[36,38786,61],{"class":60},[36,38788,38789],{"class":49},"),\n",[36,38791,38792],{"class":38,"line":2373},[36,38793,38794],{"class":49},"            nn.ReLU(),\n",[36,38796,38797,38799,38801,38803,38805,38807,38809,38811,38813,38815,38817,38819,38821,38823,38825,38827,38829],{"class":38,"line":2378},[36,38798,38756],{"class":49},[36,38800,31598],{"class":416},[36,38802,54],{"class":53},[36,38804,1095],{"class":60},[36,38806,64],{"class":49},[36,38808,31607],{"class":416},[36,38810,54],{"class":53},[36,38812,1095],{"class":60},[36,38814,64],{"class":49},[36,38816,31616],{"class":416},[36,38818,54],{"class":53},[36,38820,162],{"class":60},[36,38822,64],{"class":49},[36,38824,31625],{"class":416},[36,38826,54],{"class":53},[36,38828,61],{"class":60},[36,38830,38789],{"class":49},[36,38832,38833],{"class":38,"line":2392},[36,38834,38794],{"class":49},[36,38836,38837,38840,38842,38844,38846,38848,38850,38852,38854,38856,38858,38860,38862],{"class":38,"line":2397},[36,38838,38839],{"class":49},"            nn.MaxPool2d(",[36,38841,31616],{"class":416},[36,38843,54],{"class":53},[36,38845,181],{"class":60},[36,38847,64],{"class":49},[36,38849,31671],{"class":416},[36,38851,54],{"class":53},[36,38853,181],{"class":60},[36,38855,64],{"class":49},[36,38857,31625],{"class":416},[36,38859,54],{"class":53},[36,38861,643],{"class":60},[36,38863,75],{"class":49},[36,38865,38866],{"class":38,"line":2403},[36,38867,38868],{"class":49},"        )\n",[36,38870,38871],{"class":38,"line":2424},[36,38872,38873],{"class":42},"        # 第二层\n",[36,38875,38876,38878,38881,38883],{"class":38,"line":2429},[36,38877,31587],{"class":60},[36,38879,38880],{"class":49},".block2",[36,38882,54],{"class":53},[36,38884,38751],{"class":49},[36,38886,38887,38889,38891,38893,38895,38897,38899,38901,38903,38905,38907,38909,38911,38913,38915,38917,38919],{"class":38,"line":2443},[36,38888,38756],{"class":49},[36,38890,31598],{"class":416},[36,38892,54],{"class":53},[36,38894,1095],{"class":60},[36,38896,64],{"class":49},[36,38898,31607],{"class":416},[36,38900,54],{"class":53},[36,38902,32812],{"class":60},[36,38904,64],{"class":49},[36,38906,31616],{"class":416},[36,38908,54],{"class":53},[36,38910,162],{"class":60},[36,38912,64],{"class":49},[36,38914,31625],{"class":416},[36,38916,54],{"class":53},[36,38918,61],{"class":60},[36,38920,38789],{"class":49},[36,38922,38923],{"class":38,"line":2448},[36,38924,38794],{"class":49},[36,38926,38927,38929,38931,38933,38935,38937,38939,38941,38943,38945,38947,38949,38951,38953,38955,38957,38959],{"class":38,"line":2477},[36,38928,38756],{"class":49},[36,38930,31598],{"class":416},[36,38932,54],{"class":53},[36,38934,32812],{"class":60},[36,38936,64],{"class":49},[36,38938,31607],{"class":416},[36,38940,54],{"class":53},[36,38942,32812],{"class":60},[36,38944,64],{"class":49},[36,38946,31616],{"class":416},[36,38948,54],{"class":53},[36,38950,162],{"class":60},[36,38952,64],{"class":49},[36,38954,31625],{"class":416},[36,38956,54],{"class":53},[36,38958,61],{"class":60},[36,38960,38789],{"class":49},[36,38962,38963],{"class":38,"line":2482},[36,38964,38794],{"class":49},[36,38966,38967,38969,38971,38973,38975,38977,38979,38981,38983,38985,38987,38989,38991],{"class":38,"line":2499},[36,38968,38839],{"class":49},[36,38970,31616],{"class":416},[36,38972,54],{"class":53},[36,38974,181],{"class":60},[36,38976,64],{"class":49},[36,38978,31671],{"class":416},[36,38980,54],{"class":53},[36,38982,181],{"class":60},[36,38984,64],{"class":49},[36,38986,31625],{"class":416},[36,38988,54],{"class":53},[36,38990,643],{"class":60},[36,38992,75],{"class":49},[36,38994,38995],{"class":38,"line":2504},[36,38996,38868],{"class":49},[36,38998,38999],{"class":38,"line":2509},[36,39000,39001],{"class":42},"        # 第三层\n",[36,39003,39004,39006,39009,39011],{"class":38,"line":2514},[36,39005,31587],{"class":60},[36,39007,39008],{"class":49},".block3",[36,39010,54],{"class":53},[36,39012,38751],{"class":49},[36,39014,39015,39017,39019,39021,39023,39025,39027,39029,39031,39033,39035,39037,39039,39041,39043,39045,39047],{"class":38,"line":2528},[36,39016,38756],{"class":49},[36,39018,31598],{"class":416},[36,39020,54],{"class":53},[36,39022,32812],{"class":60},[36,39024,64],{"class":49},[36,39026,31607],{"class":416},[36,39028,54],{"class":53},[36,39030,35612],{"class":60},[36,39032,64],{"class":49},[36,39034,31616],{"class":416},[36,39036,54],{"class":53},[36,39038,162],{"class":60},[36,39040,64],{"class":49},[36,39042,31625],{"class":416},[36,39044,54],{"class":53},[36,39046,61],{"class":60},[36,39048,38789],{"class":49},[36,39050,39051],{"class":38,"line":2533},[36,39052,38794],{"class":49},[36,39054,39055,39057,39059,39061,39063,39065,39067,39069,39071,39073,39075,39077,39079,39081,39083,39085,39087],{"class":38,"line":3326},[36,39056,38756],{"class":49},[36,39058,31598],{"class":416},[36,39060,54],{"class":53},[36,39062,35612],{"class":60},[36,39064,64],{"class":49},[36,39066,31607],{"class":416},[36,39068,54],{"class":53},[36,39070,35612],{"class":60},[36,39072,64],{"class":49},[36,39074,31616],{"class":416},[36,39076,54],{"class":53},[36,39078,162],{"class":60},[36,39080,64],{"class":49},[36,39082,31625],{"class":416},[36,39084,54],{"class":53},[36,39086,61],{"class":60},[36,39088,38789],{"class":49},[36,39090,39091],{"class":38,"line":3340},[36,39092,38794],{"class":49},[36,39094,39095,39097,39099,39101,39103,39105,39107,39109,39111,39113,39115,39117,39119,39121,39123,39125,39127],{"class":38,"line":3348},[36,39096,38756],{"class":49},[36,39098,31598],{"class":416},[36,39100,54],{"class":53},[36,39102,35612],{"class":60},[36,39104,64],{"class":49},[36,39106,31607],{"class":416},[36,39108,54],{"class":53},[36,39110,35612],{"class":60},[36,39112,64],{"class":49},[36,39114,31616],{"class":416},[36,39116,54],{"class":53},[36,39118,162],{"class":60},[36,39120,64],{"class":49},[36,39122,31625],{"class":416},[36,39124,54],{"class":53},[36,39126,61],{"class":60},[36,39128,38789],{"class":49},[36,39130,39131],{"class":38,"line":3353},[36,39132,38794],{"class":49},[36,39134,39135,39137,39139,39141,39143,39145,39147,39149,39151,39153,39155,39157,39159],{"class":38,"line":3359},[36,39136,38839],{"class":49},[36,39138,31616],{"class":416},[36,39140,54],{"class":53},[36,39142,181],{"class":60},[36,39144,64],{"class":49},[36,39146,31671],{"class":416},[36,39148,54],{"class":53},[36,39150,181],{"class":60},[36,39152,64],{"class":49},[36,39154,31625],{"class":416},[36,39156,54],{"class":53},[36,39158,643],{"class":60},[36,39160,75],{"class":49},[36,39162,39163],{"class":38,"line":3365},[36,39164,38868],{"class":49},[36,39166,39167],{"class":38,"line":3370},[36,39168,39169],{"class":42},"        # 第四层\n",[36,39171,39172,39174,39177,39179],{"class":38,"line":8695},[36,39173,31587],{"class":60},[36,39175,39176],{"class":49},".block4",[36,39178,54],{"class":53},[36,39180,38751],{"class":49},[36,39182,39183,39185,39187,39189,39191,39193,39195,39197,39200,39202,39204,39206,39208,39210,39212,39214,39216],{"class":38,"line":8719},[36,39184,38756],{"class":49},[36,39186,31598],{"class":416},[36,39188,54],{"class":53},[36,39190,35612],{"class":60},[36,39192,64],{"class":49},[36,39194,31607],{"class":416},[36,39196,54],{"class":53},[36,39198,39199],{"class":60},"512",[36,39201,64],{"class":49},[36,39203,31616],{"class":416},[36,39205,54],{"class":53},[36,39207,162],{"class":60},[36,39209,64],{"class":49},[36,39211,31625],{"class":416},[36,39213,54],{"class":53},[36,39215,61],{"class":60},[36,39217,38789],{"class":49},[36,39219,39220],{"class":38,"line":8724},[36,39221,38794],{"class":49},[36,39223,39224,39226,39228,39230,39232,39234,39236,39238,39240,39242,39244,39246,39248,39250,39252,39254,39256],{"class":38,"line":8730},[36,39225,38756],{"class":49},[36,39227,31598],{"class":416},[36,39229,54],{"class":53},[36,39231,39199],{"class":60},[36,39233,64],{"class":49},[36,39235,31607],{"class":416},[36,39237,54],{"class":53},[36,39239,39199],{"class":60},[36,39241,64],{"class":49},[36,39243,31616],{"class":416},[36,39245,54],{"class":53},[36,39247,162],{"class":60},[36,39249,64],{"class":49},[36,39251,31625],{"class":416},[36,39253,54],{"class":53},[36,39255,61],{"class":60},[36,39257,38789],{"class":49},[36,39259,39260],{"class":38,"line":8757},[36,39261,38794],{"class":49},[36,39263,39264,39266,39268,39270,39272,39274,39276,39278,39280,39282,39284,39286,39288,39290,39292,39294,39296],{"class":38,"line":8762},[36,39265,38756],{"class":49},[36,39267,31598],{"class":416},[36,39269,54],{"class":53},[36,39271,39199],{"class":60},[36,39273,64],{"class":49},[36,39275,31607],{"class":416},[36,39277,54],{"class":53},[36,39279,39199],{"class":60},[36,39281,64],{"class":49},[36,39283,31616],{"class":416},[36,39285,54],{"class":53},[36,39287,162],{"class":60},[36,39289,64],{"class":49},[36,39291,31625],{"class":416},[36,39293,54],{"class":53},[36,39295,61],{"class":60},[36,39297,38789],{"class":49},[36,39299,39300],{"class":38,"line":8768},[36,39301,38794],{"class":49},[36,39303,39304,39306,39308,39310,39312,39314,39316,39318,39320,39322,39324,39326,39328],{"class":38,"line":8780},[36,39305,38839],{"class":49},[36,39307,31616],{"class":416},[36,39309,54],{"class":53},[36,39311,181],{"class":60},[36,39313,64],{"class":49},[36,39315,31671],{"class":416},[36,39317,54],{"class":53},[36,39319,181],{"class":60},[36,39321,64],{"class":49},[36,39323,31625],{"class":416},[36,39325,54],{"class":53},[36,39327,643],{"class":60},[36,39329,75],{"class":49},[36,39331,39332],{"class":38,"line":8792},[36,39333,38868],{"class":49},[36,39335,39336],{"class":38,"line":8804},[36,39337,39338],{"class":42},"        # 第五层\n",[36,39340,39341,39343,39346,39348],{"class":38,"line":10463},[36,39342,31587],{"class":60},[36,39344,39345],{"class":49},".block5",[36,39347,54],{"class":53},[36,39349,38751],{"class":49},[36,39351,39352,39354,39356,39358,39360,39362,39364,39366,39368,39370,39372,39374,39376,39378,39380,39382,39384],{"class":38,"line":10488},[36,39353,38756],{"class":49},[36,39355,31598],{"class":416},[36,39357,54],{"class":53},[36,39359,39199],{"class":60},[36,39361,64],{"class":49},[36,39363,31607],{"class":416},[36,39365,54],{"class":53},[36,39367,39199],{"class":60},[36,39369,64],{"class":49},[36,39371,31616],{"class":416},[36,39373,54],{"class":53},[36,39375,162],{"class":60},[36,39377,64],{"class":49},[36,39379,31625],{"class":416},[36,39381,54],{"class":53},[36,39383,61],{"class":60},[36,39385,38789],{"class":49},[36,39387,39388],{"class":38,"line":10511},[36,39389,38794],{"class":49},[36,39391,39392,39394,39396,39398,39400,39402,39404,39406,39408,39410,39412,39414,39416,39418,39420,39422,39424],{"class":38,"line":10535},[36,39393,38756],{"class":49},[36,39395,31598],{"class":416},[36,39397,54],{"class":53},[36,39399,39199],{"class":60},[36,39401,64],{"class":49},[36,39403,31607],{"class":416},[36,39405,54],{"class":53},[36,39407,39199],{"class":60},[36,39409,64],{"class":49},[36,39411,31616],{"class":416},[36,39413,54],{"class":53},[36,39415,162],{"class":60},[36,39417,64],{"class":49},[36,39419,31625],{"class":416},[36,39421,54],{"class":53},[36,39423,61],{"class":60},[36,39425,38789],{"class":49},[36,39427,39428],{"class":38,"line":10540},[36,39429,38794],{"class":49},[36,39431,39432,39434,39436,39438,39440,39442,39444,39446,39448,39450,39452,39454,39456,39458,39460,39462,39464],{"class":38,"line":10545},[36,39433,38756],{"class":49},[36,39435,31598],{"class":416},[36,39437,54],{"class":53},[36,39439,39199],{"class":60},[36,39441,64],{"class":49},[36,39443,31607],{"class":416},[36,39445,54],{"class":53},[36,39447,39199],{"class":60},[36,39449,64],{"class":49},[36,39451,31616],{"class":416},[36,39453,54],{"class":53},[36,39455,162],{"class":60},[36,39457,64],{"class":49},[36,39459,31625],{"class":416},[36,39461,54],{"class":53},[36,39463,61],{"class":60},[36,39465,38789],{"class":49},[36,39467,39468],{"class":38,"line":10550},[36,39469,38794],{"class":49},[36,39471,39472,39474,39476,39478,39480,39482,39484,39486,39488,39490,39492,39494,39496],{"class":38,"line":10559},[36,39473,38839],{"class":49},[36,39475,31616],{"class":416},[36,39477,54],{"class":53},[36,39479,181],{"class":60},[36,39481,64],{"class":49},[36,39483,31671],{"class":416},[36,39485,54],{"class":53},[36,39487,181],{"class":60},[36,39489,64],{"class":49},[36,39491,31625],{"class":416},[36,39493,54],{"class":53},[36,39495,643],{"class":60},[36,39497,75],{"class":49},[36,39499,39500],{"class":38,"line":10564},[36,39501,38868],{"class":49},[36,39503,39504],{"class":38,"line":10570},[36,39505,39506],{"class":42},"        # 全连接层\n",[36,39508,39509,39511,39514,39516],{"class":38,"line":10591},[36,39510,31587],{"class":60},[36,39512,39513],{"class":49},".block6",[36,39515,54],{"class":53},[36,39517,38751],{"class":49},[36,39519,39520],{"class":38,"line":10597},[36,39521,39522],{"class":42},"            # 平展操作\n",[36,39524,39525],{"class":38,"line":10611},[36,39526,39527],{"class":42},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[36,39529,39530],{"class":38,"line":10617},[36,39531,39532],{"class":49},"            nn.Flatten(),\n",[36,39534,39535,39538,39540,39542,39544,39546,39548,39550,39552],{"class":38,"line":10644},[36,39536,39537],{"class":49},"            nn.Linear(",[36,39539,1255],{"class":60},[36,39541,1339],{"class":53},[36,39543,1255],{"class":60},[36,39545,1339],{"class":53},[36,39547,39199],{"class":60},[36,39549,64],{"class":49},[36,39551,35612],{"class":60},[36,39553,38789],{"class":49},[36,39555,39556],{"class":38,"line":10653},[36,39557,38794],{"class":49},[36,39559,39560,39562,39564,39566,39568],{"class":38,"line":10659},[36,39561,39537],{"class":49},[36,39563,35612],{"class":60},[36,39565,64],{"class":49},[36,39567,32812],{"class":60},[36,39569,38789],{"class":49},[36,39571,39572],{"class":38,"line":10667},[36,39573,38794],{"class":49},[36,39575,39576,39578,39580,39582,39584],{"class":38,"line":10672},[36,39577,39537],{"class":49},[36,39579,32812],{"class":60},[36,39581,64],{"class":49},[36,39583,332],{"class":60},[36,39585,75],{"class":49},[36,39587,39588],{"class":38,"line":17348},[36,39589,38868],{"class":49},[36,39591,39592],{"class":38,"line":17354},[36,39593,194],{"emptyLinePlaceholder":193},[36,39595,39596],{"class":38,"line":17377},[36,39597,39598],{"class":42},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[36,39600,39601],{"class":38,"line":17383},[36,39602,39603],{"class":42},"        # 循环遍历模型\n",[36,39605,39606,39608,39611,39613,39616],{"class":38,"line":17406},[36,39607,4152],{"class":53},[36,39609,39610],{"class":49}," m ",[36,39612,26788],{"class":53},[36,39614,39615],{"class":60}," self",[36,39617,39618],{"class":49},".modules():\n",[36,39620,39621],{"class":38,"line":17420},[36,39622,39623],{"class":42},"            # print(m)\n",[36,39625,39626,39628,39631],{"class":38,"line":17440},[36,39627,5391],{"class":53},[36,39629,39630],{"class":60}," isinstance",[36,39632,39633],{"class":49},"(m,nn.Conv2d):\n",[36,39635,39636],{"class":38,"line":17446},[36,39637,39638],{"class":42},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[36,39640,39641,39644,39647,39649,39652],{"class":38,"line":17457},[36,39642,39643],{"class":49},"                nn.init.kaiming_normal_(m.weight,",[36,39645,39646],{"class":416},"nonlinearity",[36,39648,54],{"class":53},[36,39650,39651],{"class":998},"'relu'",[36,39653,75],{"class":49},[36,39655,39656],{"class":38,"line":17480},[36,39657,39658],{"class":42},"                # 判断b参数是否存在\n",[36,39660,39661,39664,39667,39670,39673,39676],{"class":38,"line":17502},[36,39662,39663],{"class":53},"                if",[36,39665,39666],{"class":49}," m.bias ",[36,39668,39669],{"class":53},"is",[36,39671,39672],{"class":53}," not",[36,39674,39675],{"class":60}," None",[36,39677,4488],{"class":49},[36,39679,39680],{"class":38,"line":17507},[36,39681,39682],{"class":42},"                    # 如果参数不存在的化初始化b=0\n",[36,39684,39685,39688,39690],{"class":38,"line":17513},[36,39686,39687],{"class":49},"                    nn.init.constant_(m.bias,",[36,39689,643],{"class":60},[36,39691,75],{"class":49},[36,39693,39694],{"class":38,"line":17527},[36,39695,39696],{"class":42},"            # 全连接层初始化\n",[36,39698,39699,39702,39704],{"class":38,"line":17540},[36,39700,39701],{"class":53},"            elif",[36,39703,39630],{"class":60},[36,39705,39706],{"class":49},"(m,nn.Linear):\n",[36,39708,39709],{"class":38,"line":17545},[36,39710,39711],{"class":42},"                # 这个初始化方法是利用的是正太分布的方式\n",[36,39713,39714],{"class":38,"line":17559},[36,39715,39716],{"class":42},"                # 均值为0，方差为0.01\n",[36,39718,39719,39722,39724,39726,39729],{"class":38,"line":17564},[36,39720,39721],{"class":49},"                nn.init.normal_(m.weight,",[36,39723,643],{"class":60},[36,39725,64],{"class":49},[36,39727,39728],{"class":60},"0.01",[36,39730,75],{"class":49},[36,39732,39733],{"class":38,"line":17570},[36,39734,39735],{"class":42},"                # 初始化b参数\n",[36,39737,39738,39740,39742,39744,39746,39748],{"class":38,"line":17575},[36,39739,39663],{"class":53},[36,39741,39666],{"class":49},[36,39743,39669],{"class":53},[36,39745,39672],{"class":53},[36,39747,39675],{"class":60},[36,39749,4488],{"class":49},[36,39751,39752,39754,39756],{"class":38,"line":17589},[36,39753,39687],{"class":49},[36,39755,643],{"class":60},[36,39757,75],{"class":49},[36,39759,39760],{"class":38,"line":17594},[36,39761,194],{"emptyLinePlaceholder":193},[36,39763,39764],{"class":38,"line":17599},[36,39765,35907],{"class":42},[36,39767,39768,39770,39772],{"class":38,"line":17613},[36,39769,31543],{"class":53},[36,39771,31835],{"class":2713},[36,39773,31838],{"class":49},[36,39775,39776,39778,39780,39782],{"class":38,"line":17625},[36,39777,31843],{"class":49},[36,39779,54],{"class":53},[36,39781,31565],{"class":60},[36,39783,39784],{"class":49},".block1(x)\n",[36,39786,39787,39789,39791,39793],{"class":38,"line":17630},[36,39788,31843],{"class":49},[36,39790,54],{"class":53},[36,39792,31565],{"class":60},[36,39794,39795],{"class":49},".block2(x)\n",[36,39797,39798,39800,39802,39804],{"class":38,"line":17643},[36,39799,31843],{"class":49},[36,39801,54],{"class":53},[36,39803,31565],{"class":60},[36,39805,39806],{"class":49},".block3(x)\n",[36,39808,39809,39811,39813,39815],{"class":38,"line":17648},[36,39810,31843],{"class":49},[36,39812,54],{"class":53},[36,39814,31565],{"class":60},[36,39816,39817],{"class":49},".block4(x)\n",[36,39819,39820,39822,39824,39826],{"class":38,"line":17653},[36,39821,31843],{"class":49},[36,39823,54],{"class":53},[36,39825,31565],{"class":60},[36,39827,39828],{"class":49},".block5(x)\n",[36,39830,39831,39833,39835,39837],{"class":38,"line":17658},[36,39832,31843],{"class":49},[36,39834,54],{"class":53},[36,39836,31565],{"class":60},[36,39838,39839],{"class":49},".block6(x)\n",[36,39841,39842,39844],{"class":38,"line":17671},[36,39843,15496],{"class":53},[36,39845,31951],{"class":49},[36,39847,39848],{"class":38,"line":17676},[36,39849,194],{"emptyLinePlaceholder":193},[36,39851,39852],{"class":38,"line":33375},[36,39853,39854],{"class":42},"# 验证模型\n",[36,39856,39857,39859,39861,39863,39866],{"class":38,"line":33381},[36,39858,2281],{"class":53},[36,39860,31962],{"class":60},[36,39862,3698],{"class":53},[36,39864,39865],{"class":998},"'__main__'",[36,39867,4488],{"class":49},[36,39869,39870,39872,39874,39876,39878,39880,39882,39884,39886],{"class":38,"line":33387},[36,39871,31979],{"class":49},[36,39873,54],{"class":53},[36,39875,31193],{"class":49},[36,39877,31986],{"class":998},[36,39879,2454],{"class":53},[36,39881,31991],{"class":49},[36,39883,2451],{"class":53},[36,39885,31218],{"class":998},[36,39887,75],{"class":49},[36,39889,39890,39892],{"class":38,"line":33393},[36,39891,32041],{"class":60},[36,39893,31227],{"class":49},[36,39895,39896,39898,39900],{"class":38,"line":33399},[36,39897,32031],{"class":49},[36,39899,54],{"class":53},[36,39901,39902],{"class":49},"VGG16().to(device)\n",[36,39904,39905,39907,39909,39911,39913,39915,39917,39919],{"class":38,"line":33410},[36,39906,32041],{"class":60},[36,39908,32044],{"class":49},[36,39910,61],{"class":60},[36,39912,64],{"class":49},[36,39914,32243],{"class":60},[36,39916,64],{"class":49},[36,39918,32243],{"class":60},[36,39920,32057],{"class":49},[851,39922,39923],{"start":46},[854,39924,39925],{},"训练代码",[14,39927,39928],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39930,39931],{},"解决方式:",[14,39933,39934],{},"①权重初始化",[26,39936,39938],{"className":28,"code":39937,"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,39939,39940,39945,39950,39962,39967,39975,39980,39993,39998,40012,40017,40026,40031,40040,40045,40050,40063,40068,40082],{"__ignoreMap":31},[36,39941,39942],{"class":38,"line":39},[36,39943,39944],{"class":42},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[36,39946,39947],{"class":38,"line":46},[36,39948,39949],{"class":42},"# 循环遍历模型\n",[36,39951,39952,39954,39956,39958,39960],{"class":38,"line":78},[36,39953,3774],{"class":53},[36,39955,39610],{"class":49},[36,39957,26788],{"class":53},[36,39959,39615],{"class":60},[36,39961,39618],{"class":49},[36,39963,39964],{"class":38,"line":125},[36,39965,39966],{"class":42},"    # print(m)\n",[36,39968,39969,39971,39973],{"class":38,"line":131},[36,39970,3850],{"class":53},[36,39972,39630],{"class":60},[36,39974,39633],{"class":49},[36,39976,39977],{"class":38,"line":396},[36,39978,39979],{"class":42},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[36,39981,39982,39985,39987,39989,39991],{"class":38,"line":407},[36,39983,39984],{"class":49},"        nn.init.kaiming_normal_(m.weight,",[36,39986,39646],{"class":416},[36,39988,54],{"class":53},[36,39990,39651],{"class":998},[36,39992,75],{"class":49},[36,39994,39995],{"class":38,"line":2061},[36,39996,39997],{"class":42},"        # 判断b参数是否存在\n",[36,39999,40000,40002,40004,40006,40008,40010],{"class":38,"line":2067},[36,40001,3246],{"class":53},[36,40003,39666],{"class":49},[36,40005,39669],{"class":53},[36,40007,39672],{"class":53},[36,40009,39675],{"class":60},[36,40011,4488],{"class":49},[36,40013,40014],{"class":38,"line":2079},[36,40015,40016],{"class":42},"            # 如果参数不存在的化初始化b=0\n",[36,40018,40019,40022,40024],{"class":38,"line":2362},[36,40020,40021],{"class":49},"            nn.init.constant_(m.bias,",[36,40023,643],{"class":60},[36,40025,75],{"class":49},[36,40027,40028],{"class":38,"line":2367},[36,40029,40030],{"class":42},"    # 全连接层初始化\n",[36,40032,40033,40036,40038],{"class":38,"line":2373},[36,40034,40035],{"class":53},"    elif",[36,40037,39630],{"class":60},[36,40039,39706],{"class":49},[36,40041,40042],{"class":38,"line":2378},[36,40043,40044],{"class":42},"        # 这个初始化方法是利用的是正太分布的方式\n",[36,40046,40047],{"class":38,"line":2392},[36,40048,40049],{"class":42},"        # 均值为0，方差为0.01\n",[36,40051,40052,40055,40057,40059,40061],{"class":38,"line":2397},[36,40053,40054],{"class":49},"        nn.init.normal_(m.weight,",[36,40056,643],{"class":60},[36,40058,64],{"class":49},[36,40060,39728],{"class":60},[36,40062,75],{"class":49},[36,40064,40065],{"class":38,"line":2403},[36,40066,40067],{"class":42},"        # 初始化b参数\n",[36,40069,40070,40072,40074,40076,40078,40080],{"class":38,"line":2424},[36,40071,3246],{"class":53},[36,40073,39666],{"class":49},[36,40075,39669],{"class":53},[36,40077,39672],{"class":53},[36,40079,39675],{"class":60},[36,40081,4488],{"class":49},[36,40083,40084,40086,40088],{"class":38,"line":2429},[36,40085,40021],{"class":49},[36,40087,643],{"class":60},[36,40089,75],{"class":49},[14,40091,40092],{},"②尽可能地增加批次",[14,40094,40095],{},"训练完整代码：",[26,40097,40098],{"className":28,"code":38641,"language":30,"meta":31,"style":31},[33,40099,40100,40106,40116,40126,40136,40140,40156,40164,40182,40186,40190,40200,40236,40240,40276,40280,40308,40312,40316,40326,40362,40366,40402,40406,40434,40438,40442,40452,40488,40492,40528,40532,40568,40572,40600,40604,40608,40618,40654,40658,40694,40698,40734,40738,40766,40770,40774,40784,40820,40824,40860,40864,40900,40904,40932,40936,40940,40950,40954,40958,40962,40982,40986,40998,41002,41014,41018,41022,41026,41030,41042,41046,41054,41058,41070,41074,41088,41092,41100,41104,41112,41116,41120,41132,41136,41150,41158,41162,41166,41174,41184,41194,41204,41214,41224,41234,41240,41244,41248,41260,41280,41286,41294],{"__ignoreMap":31},[36,40101,40102,40104],{"class":38,"line":39},[36,40103,31135],{"class":53},[36,40105,31138],{"class":49},[36,40107,40108,40110,40112,40114],{"class":38,"line":46},[36,40109,31479],{"class":53},[36,40111,38656],{"class":49},[36,40113,31135],{"class":53},[36,40115,38661],{"class":49},[36,40117,40118,40120,40122,40124],{"class":38,"line":78},[36,40119,31479],{"class":53},[36,40121,31482],{"class":49},[36,40123,31135],{"class":53},[36,40125,31487],{"class":49},[36,40127,40128,40130,40132,40134],{"class":38,"line":125},[36,40129,31479],{"class":53},[36,40131,31499],{"class":49},[36,40133,31135],{"class":53},[36,40135,31504],{"class":49},[36,40137,40138],{"class":38,"line":131},[36,40139,194],{"emptyLinePlaceholder":193},[36,40141,40142,40144,40146,40148,40150,40152,40154],{"class":38,"line":396},[36,40143,15438],{"class":53},[36,40145,38692],{"class":2713},[36,40147,901],{"class":49},[36,40149,31520],{"class":2713},[36,40151,1440],{"class":49},[36,40153,31525],{"class":2713},[36,40155,31528],{"class":49},[36,40157,40158,40160,40162],{"class":38,"line":407},[36,40159,31543],{"class":53},[36,40161,31546],{"class":60},[36,40163,31549],{"class":49},[36,40165,40166,40168,40170,40172,40174,40176,40178,40180],{"class":38,"line":2061},[36,40167,31559],{"class":60},[36,40169,901],{"class":49},[36,40171,38719],{"class":60},[36,40173,154],{"class":49},[36,40175,31565],{"class":60},[36,40177,31568],{"class":49},[36,40179,31571],{"class":60},[36,40181,2726],{"class":49},[36,40183,40184],{"class":38,"line":2067},[36,40185,38734],{"class":42},[36,40187,40188],{"class":38,"line":2079},[36,40189,38739],{"class":42},[36,40191,40192,40194,40196,40198],{"class":38,"line":2362},[36,40193,31587],{"class":60},[36,40195,38746],{"class":49},[36,40197,54],{"class":53},[36,40199,38751],{"class":49},[36,40201,40202,40204,40206,40208,40210,40212,40214,40216,40218,40220,40222,40224,40226,40228,40230,40232,40234],{"class":38,"line":2367},[36,40203,38756],{"class":49},[36,40205,31598],{"class":416},[36,40207,54],{"class":53},[36,40209,61],{"class":60},[36,40211,64],{"class":49},[36,40213,31607],{"class":416},[36,40215,54],{"class":53},[36,40217,1095],{"class":60},[36,40219,64],{"class":49},[36,40221,31616],{"class":416},[36,40223,54],{"class":53},[36,40225,162],{"class":60},[36,40227,64],{"class":49},[36,40229,31625],{"class":416},[36,40231,54],{"class":53},[36,40233,61],{"class":60},[36,40235,38789],{"class":49},[36,40237,40238],{"class":38,"line":2373},[36,40239,38794],{"class":49},[36,40241,40242,40244,40246,40248,40250,40252,40254,40256,40258,40260,40262,40264,40266,40268,40270,40272,40274],{"class":38,"line":2378},[36,40243,38756],{"class":49},[36,40245,31598],{"class":416},[36,40247,54],{"class":53},[36,40249,1095],{"class":60},[36,40251,64],{"class":49},[36,40253,31607],{"class":416},[36,40255,54],{"class":53},[36,40257,1095],{"class":60},[36,40259,64],{"class":49},[36,40261,31616],{"class":416},[36,40263,54],{"class":53},[36,40265,162],{"class":60},[36,40267,64],{"class":49},[36,40269,31625],{"class":416},[36,40271,54],{"class":53},[36,40273,61],{"class":60},[36,40275,38789],{"class":49},[36,40277,40278],{"class":38,"line":2392},[36,40279,38794],{"class":49},[36,40281,40282,40284,40286,40288,40290,40292,40294,40296,40298,40300,40302,40304,40306],{"class":38,"line":2397},[36,40283,38839],{"class":49},[36,40285,31616],{"class":416},[36,40287,54],{"class":53},[36,40289,181],{"class":60},[36,40291,64],{"class":49},[36,40293,31671],{"class":416},[36,40295,54],{"class":53},[36,40297,181],{"class":60},[36,40299,64],{"class":49},[36,40301,31625],{"class":416},[36,40303,54],{"class":53},[36,40305,643],{"class":60},[36,40307,75],{"class":49},[36,40309,40310],{"class":38,"line":2403},[36,40311,38868],{"class":49},[36,40313,40314],{"class":38,"line":2424},[36,40315,38873],{"class":42},[36,40317,40318,40320,40322,40324],{"class":38,"line":2429},[36,40319,31587],{"class":60},[36,40321,38880],{"class":49},[36,40323,54],{"class":53},[36,40325,38751],{"class":49},[36,40327,40328,40330,40332,40334,40336,40338,40340,40342,40344,40346,40348,40350,40352,40354,40356,40358,40360],{"class":38,"line":2443},[36,40329,38756],{"class":49},[36,40331,31598],{"class":416},[36,40333,54],{"class":53},[36,40335,1095],{"class":60},[36,40337,64],{"class":49},[36,40339,31607],{"class":416},[36,40341,54],{"class":53},[36,40343,32812],{"class":60},[36,40345,64],{"class":49},[36,40347,31616],{"class":416},[36,40349,54],{"class":53},[36,40351,162],{"class":60},[36,40353,64],{"class":49},[36,40355,31625],{"class":416},[36,40357,54],{"class":53},[36,40359,61],{"class":60},[36,40361,38789],{"class":49},[36,40363,40364],{"class":38,"line":2448},[36,40365,38794],{"class":49},[36,40367,40368,40370,40372,40374,40376,40378,40380,40382,40384,40386,40388,40390,40392,40394,40396,40398,40400],{"class":38,"line":2477},[36,40369,38756],{"class":49},[36,40371,31598],{"class":416},[36,40373,54],{"class":53},[36,40375,32812],{"class":60},[36,40377,64],{"class":49},[36,40379,31607],{"class":416},[36,40381,54],{"class":53},[36,40383,32812],{"class":60},[36,40385,64],{"class":49},[36,40387,31616],{"class":416},[36,40389,54],{"class":53},[36,40391,162],{"class":60},[36,40393,64],{"class":49},[36,40395,31625],{"class":416},[36,40397,54],{"class":53},[36,40399,61],{"class":60},[36,40401,38789],{"class":49},[36,40403,40404],{"class":38,"line":2482},[36,40405,38794],{"class":49},[36,40407,40408,40410,40412,40414,40416,40418,40420,40422,40424,40426,40428,40430,40432],{"class":38,"line":2499},[36,40409,38839],{"class":49},[36,40411,31616],{"class":416},[36,40413,54],{"class":53},[36,40415,181],{"class":60},[36,40417,64],{"class":49},[36,40419,31671],{"class":416},[36,40421,54],{"class":53},[36,40423,181],{"class":60},[36,40425,64],{"class":49},[36,40427,31625],{"class":416},[36,40429,54],{"class":53},[36,40431,643],{"class":60},[36,40433,75],{"class":49},[36,40435,40436],{"class":38,"line":2504},[36,40437,38868],{"class":49},[36,40439,40440],{"class":38,"line":2509},[36,40441,39001],{"class":42},[36,40443,40444,40446,40448,40450],{"class":38,"line":2514},[36,40445,31587],{"class":60},[36,40447,39008],{"class":49},[36,40449,54],{"class":53},[36,40451,38751],{"class":49},[36,40453,40454,40456,40458,40460,40462,40464,40466,40468,40470,40472,40474,40476,40478,40480,40482,40484,40486],{"class":38,"line":2528},[36,40455,38756],{"class":49},[36,40457,31598],{"class":416},[36,40459,54],{"class":53},[36,40461,32812],{"class":60},[36,40463,64],{"class":49},[36,40465,31607],{"class":416},[36,40467,54],{"class":53},[36,40469,35612],{"class":60},[36,40471,64],{"class":49},[36,40473,31616],{"class":416},[36,40475,54],{"class":53},[36,40477,162],{"class":60},[36,40479,64],{"class":49},[36,40481,31625],{"class":416},[36,40483,54],{"class":53},[36,40485,61],{"class":60},[36,40487,38789],{"class":49},[36,40489,40490],{"class":38,"line":2533},[36,40491,38794],{"class":49},[36,40493,40494,40496,40498,40500,40502,40504,40506,40508,40510,40512,40514,40516,40518,40520,40522,40524,40526],{"class":38,"line":3326},[36,40495,38756],{"class":49},[36,40497,31598],{"class":416},[36,40499,54],{"class":53},[36,40501,35612],{"class":60},[36,40503,64],{"class":49},[36,40505,31607],{"class":416},[36,40507,54],{"class":53},[36,40509,35612],{"class":60},[36,40511,64],{"class":49},[36,40513,31616],{"class":416},[36,40515,54],{"class":53},[36,40517,162],{"class":60},[36,40519,64],{"class":49},[36,40521,31625],{"class":416},[36,40523,54],{"class":53},[36,40525,61],{"class":60},[36,40527,38789],{"class":49},[36,40529,40530],{"class":38,"line":3340},[36,40531,38794],{"class":49},[36,40533,40534,40536,40538,40540,40542,40544,40546,40548,40550,40552,40554,40556,40558,40560,40562,40564,40566],{"class":38,"line":3348},[36,40535,38756],{"class":49},[36,40537,31598],{"class":416},[36,40539,54],{"class":53},[36,40541,35612],{"class":60},[36,40543,64],{"class":49},[36,40545,31607],{"class":416},[36,40547,54],{"class":53},[36,40549,35612],{"class":60},[36,40551,64],{"class":49},[36,40553,31616],{"class":416},[36,40555,54],{"class":53},[36,40557,162],{"class":60},[36,40559,64],{"class":49},[36,40561,31625],{"class":416},[36,40563,54],{"class":53},[36,40565,61],{"class":60},[36,40567,38789],{"class":49},[36,40569,40570],{"class":38,"line":3353},[36,40571,38794],{"class":49},[36,40573,40574,40576,40578,40580,40582,40584,40586,40588,40590,40592,40594,40596,40598],{"class":38,"line":3359},[36,40575,38839],{"class":49},[36,40577,31616],{"class":416},[36,40579,54],{"class":53},[36,40581,181],{"class":60},[36,40583,64],{"class":49},[36,40585,31671],{"class":416},[36,40587,54],{"class":53},[36,40589,181],{"class":60},[36,40591,64],{"class":49},[36,40593,31625],{"class":416},[36,40595,54],{"class":53},[36,40597,643],{"class":60},[36,40599,75],{"class":49},[36,40601,40602],{"class":38,"line":3365},[36,40603,38868],{"class":49},[36,40605,40606],{"class":38,"line":3370},[36,40607,39169],{"class":42},[36,40609,40610,40612,40614,40616],{"class":38,"line":8695},[36,40611,31587],{"class":60},[36,40613,39176],{"class":49},[36,40615,54],{"class":53},[36,40617,38751],{"class":49},[36,40619,40620,40622,40624,40626,40628,40630,40632,40634,40636,40638,40640,40642,40644,40646,40648,40650,40652],{"class":38,"line":8719},[36,40621,38756],{"class":49},[36,40623,31598],{"class":416},[36,40625,54],{"class":53},[36,40627,35612],{"class":60},[36,40629,64],{"class":49},[36,40631,31607],{"class":416},[36,40633,54],{"class":53},[36,40635,39199],{"class":60},[36,40637,64],{"class":49},[36,40639,31616],{"class":416},[36,40641,54],{"class":53},[36,40643,162],{"class":60},[36,40645,64],{"class":49},[36,40647,31625],{"class":416},[36,40649,54],{"class":53},[36,40651,61],{"class":60},[36,40653,38789],{"class":49},[36,40655,40656],{"class":38,"line":8724},[36,40657,38794],{"class":49},[36,40659,40660,40662,40664,40666,40668,40670,40672,40674,40676,40678,40680,40682,40684,40686,40688,40690,40692],{"class":38,"line":8730},[36,40661,38756],{"class":49},[36,40663,31598],{"class":416},[36,40665,54],{"class":53},[36,40667,39199],{"class":60},[36,40669,64],{"class":49},[36,40671,31607],{"class":416},[36,40673,54],{"class":53},[36,40675,39199],{"class":60},[36,40677,64],{"class":49},[36,40679,31616],{"class":416},[36,40681,54],{"class":53},[36,40683,162],{"class":60},[36,40685,64],{"class":49},[36,40687,31625],{"class":416},[36,40689,54],{"class":53},[36,40691,61],{"class":60},[36,40693,38789],{"class":49},[36,40695,40696],{"class":38,"line":8757},[36,40697,38794],{"class":49},[36,40699,40700,40702,40704,40706,40708,40710,40712,40714,40716,40718,40720,40722,40724,40726,40728,40730,40732],{"class":38,"line":8762},[36,40701,38756],{"class":49},[36,40703,31598],{"class":416},[36,40705,54],{"class":53},[36,40707,39199],{"class":60},[36,40709,64],{"class":49},[36,40711,31607],{"class":416},[36,40713,54],{"class":53},[36,40715,39199],{"class":60},[36,40717,64],{"class":49},[36,40719,31616],{"class":416},[36,40721,54],{"class":53},[36,40723,162],{"class":60},[36,40725,64],{"class":49},[36,40727,31625],{"class":416},[36,40729,54],{"class":53},[36,40731,61],{"class":60},[36,40733,38789],{"class":49},[36,40735,40736],{"class":38,"line":8768},[36,40737,38794],{"class":49},[36,40739,40740,40742,40744,40746,40748,40750,40752,40754,40756,40758,40760,40762,40764],{"class":38,"line":8780},[36,40741,38839],{"class":49},[36,40743,31616],{"class":416},[36,40745,54],{"class":53},[36,40747,181],{"class":60},[36,40749,64],{"class":49},[36,40751,31671],{"class":416},[36,40753,54],{"class":53},[36,40755,181],{"class":60},[36,40757,64],{"class":49},[36,40759,31625],{"class":416},[36,40761,54],{"class":53},[36,40763,643],{"class":60},[36,40765,75],{"class":49},[36,40767,40768],{"class":38,"line":8792},[36,40769,38868],{"class":49},[36,40771,40772],{"class":38,"line":8804},[36,40773,39338],{"class":42},[36,40775,40776,40778,40780,40782],{"class":38,"line":10463},[36,40777,31587],{"class":60},[36,40779,39345],{"class":49},[36,40781,54],{"class":53},[36,40783,38751],{"class":49},[36,40785,40786,40788,40790,40792,40794,40796,40798,40800,40802,40804,40806,40808,40810,40812,40814,40816,40818],{"class":38,"line":10488},[36,40787,38756],{"class":49},[36,40789,31598],{"class":416},[36,40791,54],{"class":53},[36,40793,39199],{"class":60},[36,40795,64],{"class":49},[36,40797,31607],{"class":416},[36,40799,54],{"class":53},[36,40801,39199],{"class":60},[36,40803,64],{"class":49},[36,40805,31616],{"class":416},[36,40807,54],{"class":53},[36,40809,162],{"class":60},[36,40811,64],{"class":49},[36,40813,31625],{"class":416},[36,40815,54],{"class":53},[36,40817,61],{"class":60},[36,40819,38789],{"class":49},[36,40821,40822],{"class":38,"line":10511},[36,40823,38794],{"class":49},[36,40825,40826,40828,40830,40832,40834,40836,40838,40840,40842,40844,40846,40848,40850,40852,40854,40856,40858],{"class":38,"line":10535},[36,40827,38756],{"class":49},[36,40829,31598],{"class":416},[36,40831,54],{"class":53},[36,40833,39199],{"class":60},[36,40835,64],{"class":49},[36,40837,31607],{"class":416},[36,40839,54],{"class":53},[36,40841,39199],{"class":60},[36,40843,64],{"class":49},[36,40845,31616],{"class":416},[36,40847,54],{"class":53},[36,40849,162],{"class":60},[36,40851,64],{"class":49},[36,40853,31625],{"class":416},[36,40855,54],{"class":53},[36,40857,61],{"class":60},[36,40859,38789],{"class":49},[36,40861,40862],{"class":38,"line":10540},[36,40863,38794],{"class":49},[36,40865,40866,40868,40870,40872,40874,40876,40878,40880,40882,40884,40886,40888,40890,40892,40894,40896,40898],{"class":38,"line":10545},[36,40867,38756],{"class":49},[36,40869,31598],{"class":416},[36,40871,54],{"class":53},[36,40873,39199],{"class":60},[36,40875,64],{"class":49},[36,40877,31607],{"class":416},[36,40879,54],{"class":53},[36,40881,39199],{"class":60},[36,40883,64],{"class":49},[36,40885,31616],{"class":416},[36,40887,54],{"class":53},[36,40889,162],{"class":60},[36,40891,64],{"class":49},[36,40893,31625],{"class":416},[36,40895,54],{"class":53},[36,40897,61],{"class":60},[36,40899,38789],{"class":49},[36,40901,40902],{"class":38,"line":10550},[36,40903,38794],{"class":49},[36,40905,40906,40908,40910,40912,40914,40916,40918,40920,40922,40924,40926,40928,40930],{"class":38,"line":10559},[36,40907,38839],{"class":49},[36,40909,31616],{"class":416},[36,40911,54],{"class":53},[36,40913,181],{"class":60},[36,40915,64],{"class":49},[36,40917,31671],{"class":416},[36,40919,54],{"class":53},[36,40921,181],{"class":60},[36,40923,64],{"class":49},[36,40925,31625],{"class":416},[36,40927,54],{"class":53},[36,40929,643],{"class":60},[36,40931,75],{"class":49},[36,40933,40934],{"class":38,"line":10564},[36,40935,38868],{"class":49},[36,40937,40938],{"class":38,"line":10570},[36,40939,39506],{"class":42},[36,40941,40942,40944,40946,40948],{"class":38,"line":10591},[36,40943,31587],{"class":60},[36,40945,39513],{"class":49},[36,40947,54],{"class":53},[36,40949,38751],{"class":49},[36,40951,40952],{"class":38,"line":10597},[36,40953,39522],{"class":42},[36,40955,40956],{"class":38,"line":10611},[36,40957,39527],{"class":42},[36,40959,40960],{"class":38,"line":10617},[36,40961,39532],{"class":49},[36,40963,40964,40966,40968,40970,40972,40974,40976,40978,40980],{"class":38,"line":10644},[36,40965,39537],{"class":49},[36,40967,1255],{"class":60},[36,40969,1339],{"class":53},[36,40971,1255],{"class":60},[36,40973,1339],{"class":53},[36,40975,39199],{"class":60},[36,40977,64],{"class":49},[36,40979,35612],{"class":60},[36,40981,38789],{"class":49},[36,40983,40984],{"class":38,"line":10653},[36,40985,38794],{"class":49},[36,40987,40988,40990,40992,40994,40996],{"class":38,"line":10659},[36,40989,39537],{"class":49},[36,40991,35612],{"class":60},[36,40993,64],{"class":49},[36,40995,32812],{"class":60},[36,40997,38789],{"class":49},[36,40999,41000],{"class":38,"line":10667},[36,41001,38794],{"class":49},[36,41003,41004,41006,41008,41010,41012],{"class":38,"line":10672},[36,41005,39537],{"class":49},[36,41007,32812],{"class":60},[36,41009,64],{"class":49},[36,41011,332],{"class":60},[36,41013,75],{"class":49},[36,41015,41016],{"class":38,"line":17348},[36,41017,38868],{"class":49},[36,41019,41020],{"class":38,"line":17354},[36,41021,194],{"emptyLinePlaceholder":193},[36,41023,41024],{"class":38,"line":17377},[36,41025,39598],{"class":42},[36,41027,41028],{"class":38,"line":17383},[36,41029,39603],{"class":42},[36,41031,41032,41034,41036,41038,41040],{"class":38,"line":17406},[36,41033,4152],{"class":53},[36,41035,39610],{"class":49},[36,41037,26788],{"class":53},[36,41039,39615],{"class":60},[36,41041,39618],{"class":49},[36,41043,41044],{"class":38,"line":17420},[36,41045,39623],{"class":42},[36,41047,41048,41050,41052],{"class":38,"line":17440},[36,41049,5391],{"class":53},[36,41051,39630],{"class":60},[36,41053,39633],{"class":49},[36,41055,41056],{"class":38,"line":17446},[36,41057,39638],{"class":42},[36,41059,41060,41062,41064,41066,41068],{"class":38,"line":17457},[36,41061,39643],{"class":49},[36,41063,39646],{"class":416},[36,41065,54],{"class":53},[36,41067,39651],{"class":998},[36,41069,75],{"class":49},[36,41071,41072],{"class":38,"line":17480},[36,41073,39658],{"class":42},[36,41075,41076,41078,41080,41082,41084,41086],{"class":38,"line":17502},[36,41077,39663],{"class":53},[36,41079,39666],{"class":49},[36,41081,39669],{"class":53},[36,41083,39672],{"class":53},[36,41085,39675],{"class":60},[36,41087,4488],{"class":49},[36,41089,41090],{"class":38,"line":17507},[36,41091,39682],{"class":42},[36,41093,41094,41096,41098],{"class":38,"line":17513},[36,41095,39687],{"class":49},[36,41097,643],{"class":60},[36,41099,75],{"class":49},[36,41101,41102],{"class":38,"line":17527},[36,41103,39696],{"class":42},[36,41105,41106,41108,41110],{"class":38,"line":17540},[36,41107,39701],{"class":53},[36,41109,39630],{"class":60},[36,41111,39706],{"class":49},[36,41113,41114],{"class":38,"line":17545},[36,41115,39711],{"class":42},[36,41117,41118],{"class":38,"line":17559},[36,41119,39716],{"class":42},[36,41121,41122,41124,41126,41128,41130],{"class":38,"line":17564},[36,41123,39721],{"class":49},[36,41125,643],{"class":60},[36,41127,64],{"class":49},[36,41129,39728],{"class":60},[36,41131,75],{"class":49},[36,41133,41134],{"class":38,"line":17570},[36,41135,39735],{"class":42},[36,41137,41138,41140,41142,41144,41146,41148],{"class":38,"line":17575},[36,41139,39663],{"class":53},[36,41141,39666],{"class":49},[36,41143,39669],{"class":53},[36,41145,39672],{"class":53},[36,41147,39675],{"class":60},[36,41149,4488],{"class":49},[36,41151,41152,41154,41156],{"class":38,"line":17589},[36,41153,39687],{"class":49},[36,41155,643],{"class":60},[36,41157,75],{"class":49},[36,41159,41160],{"class":38,"line":17594},[36,41161,194],{"emptyLinePlaceholder":193},[36,41163,41164],{"class":38,"line":17599},[36,41165,35907],{"class":42},[36,41167,41168,41170,41172],{"class":38,"line":17613},[36,41169,31543],{"class":53},[36,41171,31835],{"class":2713},[36,41173,31838],{"class":49},[36,41175,41176,41178,41180,41182],{"class":38,"line":17625},[36,41177,31843],{"class":49},[36,41179,54],{"class":53},[36,41181,31565],{"class":60},[36,41183,39784],{"class":49},[36,41185,41186,41188,41190,41192],{"class":38,"line":17630},[36,41187,31843],{"class":49},[36,41189,54],{"class":53},[36,41191,31565],{"class":60},[36,41193,39795],{"class":49},[36,41195,41196,41198,41200,41202],{"class":38,"line":17643},[36,41197,31843],{"class":49},[36,41199,54],{"class":53},[36,41201,31565],{"class":60},[36,41203,39806],{"class":49},[36,41205,41206,41208,41210,41212],{"class":38,"line":17648},[36,41207,31843],{"class":49},[36,41209,54],{"class":53},[36,41211,31565],{"class":60},[36,41213,39817],{"class":49},[36,41215,41216,41218,41220,41222],{"class":38,"line":17653},[36,41217,31843],{"class":49},[36,41219,54],{"class":53},[36,41221,31565],{"class":60},[36,41223,39828],{"class":49},[36,41225,41226,41228,41230,41232],{"class":38,"line":17658},[36,41227,31843],{"class":49},[36,41229,54],{"class":53},[36,41231,31565],{"class":60},[36,41233,39839],{"class":49},[36,41235,41236,41238],{"class":38,"line":17671},[36,41237,15496],{"class":53},[36,41239,31951],{"class":49},[36,41241,41242],{"class":38,"line":17676},[36,41243,194],{"emptyLinePlaceholder":193},[36,41245,41246],{"class":38,"line":33375},[36,41247,39854],{"class":42},[36,41249,41250,41252,41254,41256,41258],{"class":38,"line":33381},[36,41251,2281],{"class":53},[36,41253,31962],{"class":60},[36,41255,3698],{"class":53},[36,41257,39865],{"class":998},[36,41259,4488],{"class":49},[36,41261,41262,41264,41266,41268,41270,41272,41274,41276,41278],{"class":38,"line":33387},[36,41263,31979],{"class":49},[36,41265,54],{"class":53},[36,41267,31193],{"class":49},[36,41269,31986],{"class":998},[36,41271,2454],{"class":53},[36,41273,31991],{"class":49},[36,41275,2451],{"class":53},[36,41277,31218],{"class":998},[36,41279,75],{"class":49},[36,41281,41282,41284],{"class":38,"line":33393},[36,41283,32041],{"class":60},[36,41285,31227],{"class":49},[36,41287,41288,41290,41292],{"class":38,"line":33399},[36,41289,32031],{"class":49},[36,41291,54],{"class":53},[36,41293,39902],{"class":49},[36,41295,41296,41298,41300,41302,41304,41306,41308,41310],{"class":38,"line":33410},[36,41297,32041],{"class":60},[36,41299,32044],{"class":49},[36,41301,61],{"class":60},[36,41303,64],{"class":49},[36,41305,32243],{"class":60},[36,41307,64],{"class":49},[36,41309,32243],{"class":60},[36,41311,32057],{"class":49},[851,41313,41314],{"start":78},[854,41315,41316],{},"测试代码",[26,41318,41320],{"className":28,"code":41319,"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,41321,41322,41328,41338,41348,41352,41362,41373,41377,41381,41385,41393,41409,41419,41435,41445,41459,41463,41473,41483,41493,41499,41503,41507,41515,41519,41535,41543,41547,41551,41559,41567,41571,41575,41579,41583,41589,41593,41603,41611,41619,41623,41627,41631,41639,41643,41659,41663,41667,41671,41683,41687,41699,41703,41707,41719,41723,41733,41737,41741,41753,41757,41766,41770,41774,41782,41786,41794,41798,41802,41806,41810,41814,41830,41838,41842,41846,41894,41900,41904,41914,41922,41930,41934,41938,41942,41946,41954,41958,41974,41978,41986,41994],{"__ignoreMap":31},[36,41323,41324,41326],{"class":38,"line":39},[36,41325,31135],{"class":53},[36,41327,31138],{"class":49},[36,41329,41330,41332,41334,41336],{"class":38,"line":46},[36,41331,31135],{"class":53},[36,41333,32157],{"class":49},[36,41335,32125],{"class":53},[36,41337,32162],{"class":49},[36,41339,41340,41342,41344,41346],{"class":38,"line":78},[36,41341,31479],{"class":53},[36,41343,32140],{"class":49},[36,41345,31135],{"class":53},[36,41347,32145],{"class":49},[36,41349,41350],{"class":38,"line":125},[36,41351,34664],{"class":42},[36,41353,41354,41356,41358,41360],{"class":38,"line":131},[36,41355,31479],{"class":53},[36,41357,32110],{"class":49},[36,41359,31135],{"class":53},[36,41361,32115],{"class":49},[36,41363,41364,41366,41368,41370],{"class":38,"line":396},[36,41365,31479],{"class":53},[36,41367,32656],{"class":49},[36,41369,31135],{"class":53},[36,41371,41372],{"class":60}," VGG16\n",[36,41374,41375],{"class":38,"line":407},[36,41376,194],{"emptyLinePlaceholder":193},[36,41378,41379],{"class":38,"line":2061},[36,41380,194],{"emptyLinePlaceholder":193},[36,41382,41383],{"class":38,"line":2067},[36,41384,34693],{"class":42},[36,41386,41387,41389,41391],{"class":38,"line":2079},[36,41388,32689],{"class":53},[36,41390,34700],{"class":2713},[36,41392,32695],{"class":49},[36,41394,41395,41397,41399,41401,41403,41405,41407],{"class":38,"line":2362},[36,41396,34707],{"class":49},[36,41398,54],{"class":53},[36,41400,32197],{"class":49},[36,41402,32200],{"class":416},[36,41404,54],{"class":53},[36,41406,32205],{"class":998},[36,41408,32208],{"class":49},[36,41410,41411,41413,41415,41417],{"class":38,"line":2367},[36,41412,34724],{"class":416},[36,41414,54],{"class":53},[36,41416,34729],{"class":60},[36,41418,32208],{"class":49},[36,41420,41421,41423,41425,41427,41429,41431,41433],{"class":38,"line":2373},[36,41422,34736],{"class":416},[36,41424,54],{"class":53},[36,41426,32235],{"class":49},[36,41428,32238],{"class":416},[36,41430,54],{"class":53},[36,41432,32243],{"class":60},[36,41434,32246],{"class":49},[36,41436,41437,41439,41441,41443],{"class":38,"line":2378},[36,41438,34753],{"class":416},[36,41440,54],{"class":53},[36,41442,32218],{"class":60},[36,41444,75],{"class":49},[36,41446,41447,41449,41451,41453,41455,41457],{"class":38,"line":2392},[36,41448,34764],{"class":49},[36,41450,54],{"class":53},[36,41452,32276],{"class":49},[36,41454,32279],{"class":416},[36,41456,54],{"class":53},[36,41458,34775],{"class":49},[36,41460,41461],{"class":38,"line":2397},[36,41462,34780],{"class":42},[36,41464,41465,41467,41469,41471],{"class":38,"line":2403},[36,41466,34785],{"class":416},[36,41468,54],{"class":53},[36,41470,61],{"class":60},[36,41472,32208],{"class":49},[36,41474,41475,41477,41479,41481],{"class":38,"line":2424},[36,41476,34796],{"class":416},[36,41478,54],{"class":53},[36,41480,32218],{"class":60},[36,41482,32208],{"class":49},[36,41484,41485,41487,41489,41491],{"class":38,"line":2429},[36,41486,34807],{"class":416},[36,41488,54],{"class":53},[36,41490,643],{"class":60},[36,41492,75],{"class":49},[36,41494,41495,41497],{"class":38,"line":2443},[36,41496,4839],{"class":53},[36,41498,34820],{"class":49},[36,41500,41501],{"class":38,"line":2448},[36,41502,194],{"emptyLinePlaceholder":193},[36,41504,41505],{"class":38,"line":2477},[36,41506,34829],{"class":42},[36,41508,41509,41511,41513],{"class":38,"line":2482},[36,41510,32689],{"class":53},[36,41512,34836],{"class":2713},[36,41514,34839],{"class":49},[36,41516,41517],{"class":38,"line":2499},[36,41518,34844],{"class":42},[36,41520,41521,41523,41525,41527,41529,41531,41533],{"class":38,"line":2504},[36,41522,31979],{"class":49},[36,41524,54],{"class":53},[36,41526,31986],{"class":998},[36,41528,2454],{"class":53},[36,41530,31991],{"class":49},[36,41532,2451],{"class":53},[36,41534,34861],{"class":998},[36,41536,41537,41539,41541],{"class":38,"line":2509},[36,41538,32031],{"class":49},[36,41540,54],{"class":53},[36,41542,33031],{"class":49},[36,41544,41545],{"class":38,"line":2514},[36,41546,194],{"emptyLinePlaceholder":193},[36,41548,41549],{"class":38,"line":2528},[36,41550,34878],{"class":42},[36,41552,41553,41555,41557],{"class":38,"line":2533},[36,41554,34883],{"class":49},[36,41556,54],{"class":53},[36,41558,33084],{"class":60},[36,41560,41561,41563,41565],{"class":38,"line":3326},[36,41562,34892],{"class":49},[36,41564,54],{"class":53},[36,41566,3834],{"class":60},[36,41568,41569],{"class":38,"line":3340},[36,41570,194],{"emptyLinePlaceholder":193},[36,41572,41573],{"class":38,"line":3348},[36,41574,34905],{"class":42},[36,41576,41577],{"class":38,"line":3353},[36,41578,34910],{"class":42},[36,41580,41581],{"class":38,"line":3359},[36,41582,34915],{"class":42},[36,41584,41585,41587],{"class":38,"line":3365},[36,41586,34920],{"class":53},[36,41588,33626],{"class":49},[36,41590,41591],{"class":38,"line":3370},[36,41592,34927],{"class":42},[36,41594,41595,41597,41599,41601],{"class":38,"line":8695},[36,41596,4152],{"class":53},[36,41598,34934],{"class":49},[36,41600,26788],{"class":53},[36,41602,34939],{"class":49},[36,41604,41605,41607,41609],{"class":38,"line":8719},[36,41606,34944],{"class":49},[36,41608,54],{"class":53},[36,41610,34949],{"class":49},[36,41612,41613,41615,41617],{"class":38,"line":8724},[36,41614,34954],{"class":49},[36,41616,54],{"class":53},[36,41618,34959],{"class":49},[36,41620,41621],{"class":38,"line":8730},[36,41622,34964],{"class":42},[36,41624,41625],{"class":38,"line":8757},[36,41626,33617],{"class":49},[36,41628,41629],{"class":38,"line":8762},[36,41630,34973],{"class":42},[36,41632,41633,41635,41637],{"class":38,"line":8768},[36,41634,33402],{"class":49},[36,41636,54],{"class":53},[36,41638,34982],{"class":49},[36,41640,41641],{"class":38,"line":8780},[36,41642,34987],{"class":42},[36,41644,41645,41647,41649,41651,41653,41655,41657],{"class":38,"line":8792},[36,41646,33419],{"class":49},[36,41648,54],{"class":53},[36,41650,33424],{"class":49},[36,41652,33427],{"class":416},[36,41654,54],{"class":53},[36,41656,61],{"class":60},[36,41658,75],{"class":49},[36,41660,41661],{"class":38,"line":8804},[36,41662,35008],{"class":42},[36,41664,41665],{"class":38,"line":10463},[36,41666,35013],{"class":42},[36,41668,41669],{"class":38,"line":10488},[36,41670,35018],{"class":42},[36,41672,41673,41675,41677,41679,41681],{"class":38,"line":10511},[36,41674,35023],{"class":49},[36,41676,10224],{"class":53},[36,41678,33529],{"class":49},[36,41680,3698],{"class":53},[36,41682,35032],{"class":49},[36,41684,41685],{"class":38,"line":10535},[36,41686,35037],{"class":42},[36,41688,41689,41691,41693,41695,41697],{"class":38,"line":10540},[36,41690,35042],{"class":49},[36,41692,10224],{"class":53},[36,41694,35047],{"class":49},[36,41696,643],{"class":60},[36,41698,75],{"class":49},[36,41700,41701],{"class":38,"line":10545},[36,41702,194],{"emptyLinePlaceholder":193},[36,41704,41705],{"class":38,"line":10550},[36,41706,35060],{"class":42},[36,41708,41709,41711,41713,41715,41717],{"class":38,"line":10559},[36,41710,35065],{"class":49},[36,41712,54],{"class":53},[36,41714,35070],{"class":49},[36,41716,1466],{"class":53},[36,41718,35075],{"class":49},[36,41720,41721],{"class":38,"line":10564},[36,41722,35080],{"class":42},[36,41724,41725,41727,41729,41731],{"class":38,"line":10570},[36,41726,33193],{"class":60},[36,41728,901],{"class":49},[36,41730,35089],{"class":998},[36,41732,35092],{"class":49},[36,41734,41735],{"class":38,"line":10591},[36,41736,194],{"emptyLinePlaceholder":193},[36,41738,41739],{"class":38,"line":10597},[36,41740,35101],{"class":42},[36,41742,41743,41745,41747,41749,41751],{"class":38,"line":10611},[36,41744,2281],{"class":53},[36,41746,31962],{"class":60},[36,41748,3698],{"class":53},[36,41750,31967],{"class":998},[36,41752,4488],{"class":49},[36,41754,41755],{"class":38,"line":10617},[36,41756,35118],{"class":42},[36,41758,41759,41761,41763],{"class":38,"line":10644},[36,41760,32031],{"class":49},[36,41762,54],{"class":53},[36,41764,41765],{"class":49},"VGG16()\n",[36,41767,41768],{"class":38,"line":10653},[36,41769,35131],{"class":42},[36,41771,41772],{"class":38,"line":10659},[36,41773,35136],{"class":42},[36,41775,41776,41778,41780],{"class":38,"line":10667},[36,41777,35141],{"class":49},[36,41779,35144],{"class":998},[36,41781,31239],{"class":49},[36,41783,41784],{"class":38,"line":10672},[36,41785,35151],{"class":42},[36,41787,41788,41790,41792],{"class":38,"line":17348},[36,41789,34764],{"class":49},[36,41791,54],{"class":53},[36,41793,35160],{"class":49},[36,41795,41796],{"class":38,"line":17354},[36,41797,35165],{"class":42},[36,41799,41800],{"class":38,"line":17377},[36,41801,35170],{"class":49},[36,41803,41804],{"class":38,"line":17383},[36,41805,194],{"emptyLinePlaceholder":193},[36,41807,41808],{"class":38,"line":17406},[36,41809,35179],{"class":42},[36,41811,41812],{"class":38,"line":17420},[36,41813,35184],{"class":42},[36,41815,41816,41818,41820,41822,41824,41826,41828],{"class":38,"line":17440},[36,41817,31979],{"class":49},[36,41819,54],{"class":53},[36,41821,31986],{"class":998},[36,41823,2454],{"class":53},[36,41825,31991],{"class":49},[36,41827,2451],{"class":53},[36,41829,34861],{"class":998},[36,41831,41832,41834,41836],{"class":38,"line":17446},[36,41833,32031],{"class":49},[36,41835,54],{"class":53},[36,41837,33031],{"class":49},[36,41839,41840],{"class":38,"line":17457},[36,41841,35213],{"class":42},[36,41843,41844],{"class":38,"line":17480},[36,41845,35218],{"class":42},[36,41847,41848,41850,41852,41854,41856,41858,41860,41862,41864,41866,41868,41870,41872,41874,41876,41878,41880,41882,41884,41886,41888,41890,41892],{"class":38,"line":17502},[36,41849,35223],{"class":49},[36,41851,54],{"class":53},[36,41853,1769],{"class":49},[36,41855,35230],{"class":998},[36,41857,64],{"class":49},[36,41859,35235],{"class":998},[36,41861,64],{"class":49},[36,41863,35240],{"class":998},[36,41865,64],{"class":49},[36,41867,35245],{"class":998},[36,41869,64],{"class":49},[36,41871,35250],{"class":998},[36,41873,64],{"class":49},[36,41875,35255],{"class":998},[36,41877,64],{"class":49},[36,41879,35260],{"class":998},[36,41881,64],{"class":49},[36,41883,35265],{"class":998},[36,41885,64],{"class":49},[36,41887,35270],{"class":998},[36,41889,64],{"class":49},[36,41891,35275],{"class":998},[36,41893,33988],{"class":49},[36,41895,41896,41898],{"class":38,"line":17507},[36,41897,34920],{"class":53},[36,41899,33626],{"class":49},[36,41901,41902],{"class":38,"line":17513},[36,41903,35288],{"class":42},[36,41905,41906,41908,41910,41912],{"class":38,"line":17527},[36,41907,4152],{"class":53},[36,41909,35295],{"class":49},[36,41911,26788],{"class":53},[36,41913,34939],{"class":49},[36,41915,41916,41918,41920],{"class":38,"line":17540},[36,41917,33352],{"class":49},[36,41919,54],{"class":53},[36,41921,33357],{"class":49},[36,41923,41924,41926,41928],{"class":38,"line":17545},[36,41925,33367],{"class":49},[36,41927,54],{"class":53},[36,41929,33372],{"class":49},[36,41931,41932],{"class":38,"line":17559},[36,41933,194],{"emptyLinePlaceholder":193},[36,41935,41936],{"class":38,"line":17564},[36,41937,35324],{"class":42},[36,41939,41940],{"class":38,"line":17570},[36,41941,33617],{"class":49},[36,41943,41944],{"class":38,"line":17575},[36,41945,35333],{"class":42},[36,41947,41948,41950,41952],{"class":38,"line":17589},[36,41949,33402],{"class":49},[36,41951,54],{"class":53},[36,41953,33407],{"class":49},[36,41955,41956],{"class":38,"line":17594},[36,41957,35346],{"class":42},[36,41959,41960,41962,41964,41966,41968,41970,41972],{"class":38,"line":17599},[36,41961,33419],{"class":49},[36,41963,54],{"class":53},[36,41965,33424],{"class":49},[36,41967,33427],{"class":416},[36,41969,54],{"class":53},[36,41971,61],{"class":60},[36,41973,75],{"class":49},[36,41975,41976],{"class":38,"line":17613},[36,41977,35367],{"class":42},[36,41979,41980,41982,41984],{"class":38,"line":17625},[36,41981,35372],{"class":49},[36,41983,54],{"class":53},[36,41985,35377],{"class":49},[36,41987,41988,41990,41992],{"class":38,"line":17630},[36,41989,35382],{"class":49},[36,41991,54],{"class":53},[36,41993,35387],{"class":49},[36,41995,41996,41998,42000,42002,42004,42006,42008,42010],{"class":38,"line":17643},[36,41997,35392],{"class":60},[36,41999,901],{"class":49},[36,42001,35397],{"class":998},[36,42003,35400],{"class":49},[36,42005,35403],{"class":998},[36,42007,64],{"class":49},[36,42009,35408],{"class":998},[36,42011,35411],{"class":49},[868,42013,42015],{"id":42014},"_23googlenet","2.3.GoogLeNet",[22742,42017,42019],{"id":42018},"_231原理","2.3.1.原理",[851,42021,42022],{},[854,42023,42024],{},"网络结构",[14,42026,42027],{},[2212,42028],{"alt":31,"src":42029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[14,42031,42032],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,42034,42035],{},[2212,42036],{"alt":31,"src":42037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[14,42039,42040],{},[2212,42041],{"alt":31,"src":42042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[14,42044,42045],{},[2212,42046],{"alt":31,"src":42047},"\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",[851,42049,42050],{"start":46},[854,42051,42052],{},"1x1卷积的优点",[14,42054,42055],{},[2212,42056],{"alt":31,"src":42057},"\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",[851,42059,42060],{"start":78},[854,42061,42062],{},"全局平均池化层优点",[14,42064,42065],{},[2212,42066],{"alt":31,"src":42067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[14,42069,42070],{},[2212,42071],{"alt":31,"src":42072},"\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",[851,42074,42075],{"start":125},[854,42076,42077],{},"参数详细描述",[14,42079,42080],{},[2212,42081],{"alt":31,"src":42082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[14,42084,42085],{},[2212,42086],{"alt":31,"src":42087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[14,42089,42090],{},[2212,42091],{"alt":31,"src":42092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[14,42094,42095],{},[2212,42096],{"alt":31,"src":42097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[14,42099,42100],{},[2212,42101],{"alt":31,"src":42102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[14,42104,42105],{},[2212,42106],{"alt":31,"src":42107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[14,42109,42110],{},[2212,42111],{"alt":31,"src":42112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[14,42114,42115],{},[2212,42116],{"alt":31,"src":42117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[14,42119,42120],{},[2212,42121],{"alt":31,"src":42122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[14,42124,42125],{},[2212,42126],{"alt":31,"src":42127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[14,42129,42130],{},[2212,42131],{"alt":31,"src":42132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[14,42134,42135],{},[2212,42136],{"alt":31,"src":42137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[14,42139,42140],{},[2212,42141],{"alt":31,"src":42142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[14,42144,42145],{},[2212,42146],{"alt":31,"src":42147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[14,42149,42150],{},[2212,42151],{"alt":31,"src":42152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[14,42154,42155],{},[2212,42156],{"alt":31,"src":42157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[14,42159,42160],{},[2212,42161],{"alt":31,"src":42162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[14,42164,42165],{},[2212,42166],{"alt":31,"src":42167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[14,42169,42170],{},[2212,42171],{"alt":31,"src":42172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[14,42174,42175],{},[2212,42176],{"alt":31,"src":42177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[14,42179,42180],{},[2212,42181],{"alt":31,"src":42182},"\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",[22742,42184,42186],{"id":42185},"_232代码实现","2.3.2.代码实现",[851,42188,42189],{},[854,42190,31453],{},[14,42192,42193],{},"根据原理一步一步搭建即可",[26,42195,42197],{"className":28,"code":42196,"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,42198,42199,42205,42215,42225,42229,42246,42255,42270,42280,42285,42318,42323,42360,42407,42412,42448,42495,42500,42505,42540,42572,42576,42584,42600,42624,42649,42670,42675,42690,42694,42698,42703,42720,42725,42734,42749,42760,42804,42808,42836,42840,42851,42879,42883,42920,42924,42952,42956,42967,43003,43035,43063,43067,43078,43112,43144,43176,43209,43243,43271,43275,43286,43319,43351,43365,43369,43382,43386,43391,43403,43411,43433,43438,43443,43448,43453,43458,43463,43477,43485,43494,43507,43522,43531,43535,43543,43554,43565,43576,43587,43598,43604,43608,43613,43625,43645,43654],{"__ignoreMap":31},[36,42200,42201,42203],{"class":38,"line":39},[36,42202,31135],{"class":53},[36,42204,31138],{"class":49},[36,42206,42207,42209,42211,42213],{"class":38,"line":46},[36,42208,31479],{"class":53},[36,42210,31482],{"class":49},[36,42212,31135],{"class":53},[36,42214,31487],{"class":49},[36,42216,42217,42219,42221,42223],{"class":38,"line":78},[36,42218,31479],{"class":53},[36,42220,31499],{"class":49},[36,42222,31135],{"class":53},[36,42224,31504],{"class":49},[36,42226,42227],{"class":38,"line":125},[36,42228,194],{"emptyLinePlaceholder":193},[36,42230,42231,42233,42236,42238,42240,42242,42244],{"class":38,"line":131},[36,42232,15438],{"class":53},[36,42234,42235],{"class":2713}," Inception",[36,42237,901],{"class":49},[36,42239,31520],{"class":2713},[36,42241,1440],{"class":49},[36,42243,31525],{"class":2713},[36,42245,31528],{"class":49},[36,42247,42248,42250,42252],{"class":38,"line":396},[36,42249,31543],{"class":53},[36,42251,31546],{"class":60},[36,42253,42254],{"class":49},"(self,in_channels,c1,c2,c3,c4):\n",[36,42256,42257,42259,42262,42264,42266,42268],{"class":38,"line":407},[36,42258,31559],{"class":60},[36,42260,42261],{"class":49},"(Inception,",[36,42263,31565],{"class":60},[36,42265,31568],{"class":49},[36,42267,31571],{"class":60},[36,42269,2726],{"class":49},[36,42271,42272,42274,42276,42278],{"class":38,"line":2061},[36,42273,31587],{"class":60},[36,42275,35513],{"class":49},[36,42277,54],{"class":53},[36,42279,35518],{"class":49},[36,42281,42282],{"class":38,"line":2067},[36,42283,42284],{"class":42},"        # 路线1：定义1*1卷积\n",[36,42286,42287,42289,42292,42294,42296,42298,42300,42303,42305,42307,42310,42312,42314,42316],{"class":38,"line":2079},[36,42288,31587],{"class":60},[36,42290,42291],{"class":49},".p1_1",[36,42293,54],{"class":53},[36,42295,31595],{"class":49},[36,42297,31598],{"class":416},[36,42299,54],{"class":53},[36,42301,42302],{"class":49},"in_channels,",[36,42304,31607],{"class":416},[36,42306,54],{"class":53},[36,42308,42309],{"class":49},"c1,",[36,42311,31616],{"class":416},[36,42313,54],{"class":53},[36,42315,61],{"class":60},[36,42317,75],{"class":49},[36,42319,42320],{"class":38,"line":2362},[36,42321,42322],{"class":42},"        # 路线2：定义1*1卷积和3*3\n",[36,42324,42325,42327,42330,42332,42334,42336,42338,42340,42342,42344,42347,42349,42352,42354,42356,42358],{"class":38,"line":2367},[36,42326,31587],{"class":60},[36,42328,42329],{"class":49},".p2_1",[36,42331,54],{"class":53},[36,42333,31595],{"class":49},[36,42335,31598],{"class":416},[36,42337,54],{"class":53},[36,42339,42302],{"class":49},[36,42341,31607],{"class":416},[36,42343,54],{"class":53},[36,42345,42346],{"class":49},"c2[",[36,42348,643],{"class":60},[36,42350,42351],{"class":49},"],",[36,42353,31616],{"class":416},[36,42355,54],{"class":53},[36,42357,61],{"class":60},[36,42359,75],{"class":49},[36,42361,42362,42364,42367,42369,42371,42373,42375,42377,42379,42381,42383,42385,42387,42389,42391,42393,42395,42397,42399,42401,42403,42405],{"class":38,"line":2373},[36,42363,31587],{"class":60},[36,42365,42366],{"class":49},".p2_2",[36,42368,54],{"class":53},[36,42370,31595],{"class":49},[36,42372,31598],{"class":416},[36,42374,54],{"class":53},[36,42376,42346],{"class":49},[36,42378,643],{"class":60},[36,42380,42351],{"class":49},[36,42382,31607],{"class":416},[36,42384,54],{"class":53},[36,42386,42346],{"class":49},[36,42388,61],{"class":60},[36,42390,42351],{"class":49},[36,42392,31616],{"class":416},[36,42394,54],{"class":53},[36,42396,162],{"class":60},[36,42398,64],{"class":49},[36,42400,31625],{"class":416},[36,42402,54],{"class":53},[36,42404,61],{"class":60},[36,42406,75],{"class":49},[36,42408,42409],{"class":38,"line":2378},[36,42410,42411],{"class":42},"        # 路线3：定义1*1卷积和5*5\n",[36,42413,42414,42416,42419,42421,42423,42425,42427,42429,42431,42433,42436,42438,42440,42442,42444,42446],{"class":38,"line":2392},[36,42415,31587],{"class":60},[36,42417,42418],{"class":49},".p3_1",[36,42420,54],{"class":53},[36,42422,31595],{"class":49},[36,42424,31598],{"class":416},[36,42426,54],{"class":53},[36,42428,42302],{"class":49},[36,42430,31607],{"class":416},[36,42432,54],{"class":53},[36,42434,42435],{"class":49},"c3[",[36,42437,643],{"class":60},[36,42439,42351],{"class":49},[36,42441,31616],{"class":416},[36,42443,54],{"class":53},[36,42445,61],{"class":60},[36,42447,75],{"class":49},[36,42449,42450,42452,42455,42457,42459,42461,42463,42465,42467,42469,42471,42473,42475,42477,42479,42481,42483,42485,42487,42489,42491,42493],{"class":38,"line":2397},[36,42451,31587],{"class":60},[36,42453,42454],{"class":49},".p3_2",[36,42456,54],{"class":53},[36,42458,31595],{"class":49},[36,42460,31598],{"class":416},[36,42462,54],{"class":53},[36,42464,42435],{"class":49},[36,42466,643],{"class":60},[36,42468,42351],{"class":49},[36,42470,31607],{"class":416},[36,42472,54],{"class":53},[36,42474,42435],{"class":49},[36,42476,61],{"class":60},[36,42478,42351],{"class":49},[36,42480,31616],{"class":416},[36,42482,54],{"class":53},[36,42484,157],{"class":60},[36,42486,64],{"class":49},[36,42488,31625],{"class":416},[36,42490,54],{"class":53},[36,42492,181],{"class":60},[36,42494,75],{"class":49},[36,42496,42497],{"class":38,"line":2403},[36,42498,42499],{"class":42},"        # 路线4：定义3*3最大池化和1*1卷积\n",[36,42501,42502],{"class":38,"line":2424},[36,42503,42504],{"class":42},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[36,42506,42507,42509,42512,42514,42516,42518,42520,42522,42524,42526,42528,42530,42532,42534,42536,42538],{"class":38,"line":2429},[36,42508,31587],{"class":60},[36,42510,42511],{"class":49},".p4_1",[36,42513,54],{"class":53},[36,42515,35571],{"class":49},[36,42517,31616],{"class":416},[36,42519,54],{"class":53},[36,42521,162],{"class":60},[36,42523,64],{"class":49},[36,42525,31671],{"class":416},[36,42527,54],{"class":53},[36,42529,61],{"class":60},[36,42531,64],{"class":49},[36,42533,31625],{"class":416},[36,42535,54],{"class":53},[36,42537,61],{"class":60},[36,42539,75],{"class":49},[36,42541,42542,42544,42547,42549,42551,42553,42555,42557,42559,42561,42564,42566,42568,42570],{"class":38,"line":2443},[36,42543,31587],{"class":60},[36,42545,42546],{"class":49},".p4_2",[36,42548,54],{"class":53},[36,42550,31595],{"class":49},[36,42552,31598],{"class":416},[36,42554,54],{"class":53},[36,42556,42302],{"class":49},[36,42558,31607],{"class":416},[36,42560,54],{"class":53},[36,42562,42563],{"class":49},"c4,",[36,42565,31616],{"class":416},[36,42567,54],{"class":53},[36,42569,61],{"class":60},[36,42571,75],{"class":49},[36,42573,42574],{"class":38,"line":2448},[36,42575,194],{"emptyLinePlaceholder":193},[36,42577,42578,42580,42582],{"class":38,"line":2477},[36,42579,31543],{"class":53},[36,42581,31835],{"class":2713},[36,42583,31838],{"class":49},[36,42585,42586,42589,42591,42593,42595,42597],{"class":38,"line":2482},[36,42587,42588],{"class":49},"        p1",[36,42590,54],{"class":53},[36,42592,31565],{"class":60},[36,42594,35926],{"class":49},[36,42596,31565],{"class":60},[36,42598,42599],{"class":49},".p1_1(x))\n",[36,42601,42602,42604,42606,42608,42610,42612,42615,42617,42619,42621],{"class":38,"line":2499},[36,42603,7832],{"class":49},[36,42605,54],{"class":53},[36,42607,31565],{"class":60},[36,42609,35926],{"class":49},[36,42611,31565],{"class":60},[36,42613,42614],{"class":49},".p2_2(",[36,42616,31565],{"class":60},[36,42618,35926],{"class":49},[36,42620,31565],{"class":60},[36,42622,42623],{"class":49},".p2_1(x))))\n",[36,42625,42626,42629,42631,42633,42635,42637,42640,42642,42644,42646],{"class":38,"line":2504},[36,42627,42628],{"class":49},"        p3",[36,42630,54],{"class":53},[36,42632,31565],{"class":60},[36,42634,35926],{"class":49},[36,42636,31565],{"class":60},[36,42638,42639],{"class":49},".p3_2(",[36,42641,31565],{"class":60},[36,42643,35926],{"class":49},[36,42645,31565],{"class":60},[36,42647,42648],{"class":49},".p3_1(x))))\n",[36,42650,42651,42654,42656,42658,42660,42662,42665,42667],{"class":38,"line":2509},[36,42652,42653],{"class":49},"        p4",[36,42655,54],{"class":53},[36,42657,31565],{"class":60},[36,42659,35926],{"class":49},[36,42661,31565],{"class":60},[36,42663,42664],{"class":49},".p4_2(",[36,42666,31565],{"class":60},[36,42668,42669],{"class":49},".p4_1(x)))\n",[36,42671,42672],{"class":38,"line":2514},[36,42673,42674],{"class":42},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[36,42676,42677,42679,42682,42684,42686,42688],{"class":38,"line":2528},[36,42678,15496],{"class":53},[36,42680,42681],{"class":49}," torch.cat((p1,p2,p3,p4),",[36,42683,33427],{"class":416},[36,42685,54],{"class":53},[36,42687,61],{"class":60},[36,42689,75],{"class":49},[36,42691,42692],{"class":38,"line":2533},[36,42693,194],{"emptyLinePlaceholder":193},[36,42695,42696],{"class":38,"line":3326},[36,42697,194],{"emptyLinePlaceholder":193},[36,42699,42700],{"class":38,"line":3340},[36,42701,42702],{"class":42},"# 搭建GoogLeNet网络\n",[36,42704,42705,42707,42710,42712,42714,42716,42718],{"class":38,"line":3348},[36,42706,15438],{"class":53},[36,42708,42709],{"class":2713}," GoogLeNet",[36,42711,901],{"class":49},[36,42713,31520],{"class":2713},[36,42715,1440],{"class":49},[36,42717,31525],{"class":2713},[36,42719,31528],{"class":49},[36,42721,42722],{"class":38,"line":3353},[36,42723,42724],{"class":42},"    # 必须把Inception导入到里边\n",[36,42726,42727,42729,42731],{"class":38,"line":3359},[36,42728,31543],{"class":53},[36,42730,31546],{"class":60},[36,42732,42733],{"class":49},"(self,Inception):\n",[36,42735,42736,42738,42741,42743,42745,42747],{"class":38,"line":3365},[36,42737,31559],{"class":60},[36,42739,42740],{"class":49},"(GoogLeNet,",[36,42742,31565],{"class":60},[36,42744,31568],{"class":49},[36,42746,31571],{"class":60},[36,42748,2726],{"class":49},[36,42750,42751,42753,42756,42758],{"class":38,"line":3370},[36,42752,31587],{"class":60},[36,42754,42755],{"class":49},".b1",[36,42757,54],{"class":53},[36,42759,38751],{"class":49},[36,42761,42762,42764,42766,42768,42770,42772,42774,42776,42778,42780,42782,42784,42786,42788,42790,42792,42794,42796,42798,42800,42802],{"class":38,"line":8695},[36,42763,38756],{"class":49},[36,42765,31598],{"class":416},[36,42767,54],{"class":53},[36,42769,61],{"class":60},[36,42771,64],{"class":49},[36,42773,31607],{"class":416},[36,42775,54],{"class":53},[36,42777,1095],{"class":60},[36,42779,64],{"class":49},[36,42781,31616],{"class":416},[36,42783,54],{"class":53},[36,42785,1255],{"class":60},[36,42787,64],{"class":49},[36,42789,31671],{"class":416},[36,42791,54],{"class":53},[36,42793,181],{"class":60},[36,42795,64],{"class":49},[36,42797,31625],{"class":416},[36,42799,54],{"class":53},[36,42801,162],{"class":60},[36,42803,38789],{"class":49},[36,42805,42806],{"class":38,"line":8719},[36,42807,38794],{"class":49},[36,42809,42810,42812,42814,42816,42818,42820,42822,42824,42826,42828,42830,42832,42834],{"class":38,"line":8724},[36,42811,38839],{"class":49},[36,42813,31616],{"class":416},[36,42815,54],{"class":53},[36,42817,162],{"class":60},[36,42819,64],{"class":49},[36,42821,31671],{"class":416},[36,42823,54],{"class":53},[36,42825,181],{"class":60},[36,42827,64],{"class":49},[36,42829,31625],{"class":416},[36,42831,54],{"class":53},[36,42833,61],{"class":60},[36,42835,75],{"class":49},[36,42837,42838],{"class":38,"line":8730},[36,42839,38868],{"class":49},[36,42841,42842,42844,42847,42849],{"class":38,"line":8757},[36,42843,31587],{"class":60},[36,42845,42846],{"class":49},".b2",[36,42848,54],{"class":53},[36,42850,38751],{"class":49},[36,42852,42853,42855,42857,42859,42861,42863,42865,42867,42869,42871,42873,42875,42877],{"class":38,"line":8762},[36,42854,38756],{"class":49},[36,42856,31598],{"class":416},[36,42858,54],{"class":53},[36,42860,1095],{"class":60},[36,42862,64],{"class":49},[36,42864,31607],{"class":416},[36,42866,54],{"class":53},[36,42868,1095],{"class":60},[36,42870,64],{"class":49},[36,42872,31616],{"class":416},[36,42874,54],{"class":53},[36,42876,61],{"class":60},[36,42878,38789],{"class":49},[36,42880,42881],{"class":38,"line":8768},[36,42882,38794],{"class":49},[36,42884,42885,42887,42889,42891,42893,42895,42897,42899,42902,42904,42906,42908,42910,42912,42914,42916,42918],{"class":38,"line":8780},[36,42886,38756],{"class":49},[36,42888,31598],{"class":416},[36,42890,54],{"class":53},[36,42892,1095],{"class":60},[36,42894,64],{"class":49},[36,42896,31607],{"class":416},[36,42898,54],{"class":53},[36,42900,42901],{"class":60},"192",[36,42903,64],{"class":49},[36,42905,31616],{"class":416},[36,42907,54],{"class":53},[36,42909,162],{"class":60},[36,42911,64],{"class":49},[36,42913,31625],{"class":416},[36,42915,54],{"class":53},[36,42917,61],{"class":60},[36,42919,38789],{"class":49},[36,42921,42922],{"class":38,"line":8792},[36,42923,38794],{"class":49},[36,42925,42926,42928,42930,42932,42934,42936,42938,42940,42942,42944,42946,42948,42950],{"class":38,"line":8804},[36,42927,38839],{"class":49},[36,42929,31616],{"class":416},[36,42931,54],{"class":53},[36,42933,162],{"class":60},[36,42935,64],{"class":49},[36,42937,31671],{"class":416},[36,42939,54],{"class":53},[36,42941,181],{"class":60},[36,42943,64],{"class":49},[36,42945,31625],{"class":416},[36,42947,54],{"class":53},[36,42949,61],{"class":60},[36,42951,75],{"class":49},[36,42953,42954],{"class":38,"line":10463},[36,42955,38868],{"class":49},[36,42957,42958,42960,42963,42965],{"class":38,"line":10488},[36,42959,31587],{"class":60},[36,42961,42962],{"class":49},".b3",[36,42964,54],{"class":53},[36,42966,38751],{"class":49},[36,42968,42969,42972,42974,42976,42978,42981,42983,42985,42987,42990,42992,42994,42996,42999,43001],{"class":38,"line":10511},[36,42970,42971],{"class":49},"            Inception(",[36,42973,42901],{"class":60},[36,42975,64],{"class":49},[36,42977,1095],{"class":60},[36,42979,42980],{"class":49},",(",[36,42982,1101],{"class":60},[36,42984,64],{"class":49},[36,42986,32812],{"class":60},[36,42988,42989],{"class":49},"),(",[36,42991,1483],{"class":60},[36,42993,64],{"class":49},[36,42995,638],{"class":60},[36,42997,42998],{"class":49},"),",[36,43000,638],{"class":60},[36,43002,38789],{"class":49},[36,43004,43005,43007,43009,43011,43013,43015,43017,43019,43021,43023,43025,43027,43029,43031,43033],{"class":38,"line":10535},[36,43006,42971],{"class":49},[36,43008,35612],{"class":60},[36,43010,64],{"class":49},[36,43012,32812],{"class":60},[36,43014,42980],{"class":49},[36,43016,32812],{"class":60},[36,43018,64],{"class":49},[36,43020,42901],{"class":60},[36,43022,42989],{"class":49},[36,43024,638],{"class":60},[36,43026,64],{"class":49},[36,43028,1101],{"class":60},[36,43030,42998],{"class":49},[36,43032,1095],{"class":60},[36,43034,38789],{"class":49},[36,43036,43037,43039,43041,43043,43045,43047,43049,43051,43053,43055,43057,43059,43061],{"class":38,"line":10540},[36,43038,38839],{"class":49},[36,43040,31616],{"class":416},[36,43042,54],{"class":53},[36,43044,162],{"class":60},[36,43046,64],{"class":49},[36,43048,31671],{"class":416},[36,43050,54],{"class":53},[36,43052,181],{"class":60},[36,43054,64],{"class":49},[36,43056,31625],{"class":416},[36,43058,54],{"class":53},[36,43060,61],{"class":60},[36,43062,75],{"class":49},[36,43064,43065],{"class":38,"line":10545},[36,43066,38868],{"class":49},[36,43068,43069,43071,43074,43076],{"class":38,"line":10550},[36,43070,31587],{"class":60},[36,43072,43073],{"class":49},".b4",[36,43075,54],{"class":53},[36,43077,38751],{"class":49},[36,43079,43080,43082,43085,43087,43089,43091,43093,43095,43098,43100,43102,43104,43106,43108,43110],{"class":38,"line":10559},[36,43081,42971],{"class":49},[36,43083,43084],{"class":60},"480",[36,43086,64],{"class":49},[36,43088,42901],{"class":60},[36,43090,42980],{"class":49},[36,43092,1101],{"class":60},[36,43094,64],{"class":49},[36,43096,43097],{"class":60},"208",[36,43099,42989],{"class":49},[36,43101,1483],{"class":60},[36,43103,64],{"class":49},[36,43105,1489],{"class":60},[36,43107,42998],{"class":49},[36,43109,1095],{"class":60},[36,43111,38789],{"class":49},[36,43113,43114,43116,43118,43120,43122,43124,43126,43128,43130,43132,43134,43136,43138,43140,43142],{"class":38,"line":10564},[36,43115,42971],{"class":49},[36,43117,39199],{"class":60},[36,43119,64],{"class":49},[36,43121,21792],{"class":60},[36,43123,42980],{"class":49},[36,43125,1500],{"class":60},[36,43127,64],{"class":49},[36,43129,32243],{"class":60},[36,43131,42989],{"class":49},[36,43133,1680],{"class":60},[36,43135,64],{"class":49},[36,43137,1095],{"class":60},[36,43139,42998],{"class":49},[36,43141,1095],{"class":60},[36,43143,38789],{"class":49},[36,43145,43146,43148,43150,43152,43154,43156,43158,43160,43162,43164,43166,43168,43170,43172,43174],{"class":38,"line":10570},[36,43147,42971],{"class":49},[36,43149,39199],{"class":60},[36,43151,64],{"class":49},[36,43153,32812],{"class":60},[36,43155,42980],{"class":49},[36,43157,32812],{"class":60},[36,43159,64],{"class":49},[36,43161,35612],{"class":60},[36,43163,42989],{"class":49},[36,43165,1680],{"class":60},[36,43167,64],{"class":49},[36,43169,1095],{"class":60},[36,43171,42998],{"class":49},[36,43173,1095],{"class":60},[36,43175,38789],{"class":49},[36,43177,43178,43180,43182,43184,43186,43188,43190,43192,43195,43197,43199,43201,43203,43205,43207],{"class":38,"line":10591},[36,43179,42971],{"class":49},[36,43181,39199],{"class":60},[36,43183,64],{"class":49},[36,43185,1500],{"class":60},[36,43187,42980],{"class":49},[36,43189,32812],{"class":60},[36,43191,64],{"class":49},[36,43193,43194],{"class":60},"288",[36,43196,42989],{"class":49},[36,43198,638],{"class":60},[36,43200,64],{"class":49},[36,43202,1095],{"class":60},[36,43204,42998],{"class":49},[36,43206,1095],{"class":60},[36,43208,38789],{"class":49},[36,43210,43211,43213,43216,43218,43220,43222,43224,43226,43229,43231,43233,43235,43237,43239,43241],{"class":38,"line":10597},[36,43212,42971],{"class":49},[36,43214,43215],{"class":60},"528",[36,43217,64],{"class":49},[36,43219,35612],{"class":60},[36,43221,42980],{"class":49},[36,43223,21792],{"class":60},[36,43225,64],{"class":49},[36,43227,43228],{"class":60},"320",[36,43230,42989],{"class":49},[36,43232,638],{"class":60},[36,43234,64],{"class":49},[36,43236,32812],{"class":60},[36,43238,42998],{"class":49},[36,43240,32812],{"class":60},[36,43242,38789],{"class":49},[36,43244,43245,43247,43249,43251,43253,43255,43257,43259,43261,43263,43265,43267,43269],{"class":38,"line":10611},[36,43246,38839],{"class":49},[36,43248,31616],{"class":416},[36,43250,54],{"class":53},[36,43252,162],{"class":60},[36,43254,64],{"class":49},[36,43256,31671],{"class":416},[36,43258,54],{"class":53},[36,43260,181],{"class":60},[36,43262,64],{"class":49},[36,43264,31625],{"class":416},[36,43266,54],{"class":53},[36,43268,61],{"class":60},[36,43270,75],{"class":49},[36,43272,43273],{"class":38,"line":10617},[36,43274,38868],{"class":49},[36,43276,43277,43279,43282,43284],{"class":38,"line":10644},[36,43278,31587],{"class":60},[36,43280,43281],{"class":49},".b5",[36,43283,54],{"class":53},[36,43285,38751],{"class":49},[36,43287,43288,43290,43293,43295,43297,43299,43301,43303,43305,43307,43309,43311,43313,43315,43317],{"class":38,"line":10653},[36,43289,42971],{"class":49},[36,43291,43292],{"class":60},"832",[36,43294,64],{"class":49},[36,43296,35612],{"class":60},[36,43298,42980],{"class":49},[36,43300,21792],{"class":60},[36,43302,64],{"class":49},[36,43304,43228],{"class":60},[36,43306,42989],{"class":49},[36,43308,638],{"class":60},[36,43310,64],{"class":49},[36,43312,32812],{"class":60},[36,43314,42998],{"class":49},[36,43316,32812],{"class":60},[36,43318,38789],{"class":49},[36,43320,43321,43323,43325,43327,43329,43331,43333,43335,43337,43339,43341,43343,43345,43347,43349],{"class":38,"line":10659},[36,43322,42971],{"class":49},[36,43324,43292],{"class":60},[36,43326,64],{"class":49},[36,43328,35682],{"class":60},[36,43330,42980],{"class":49},[36,43332,42901],{"class":60},[36,43334,64],{"class":49},[36,43336,35682],{"class":60},[36,43338,42989],{"class":49},[36,43340,1489],{"class":60},[36,43342,64],{"class":49},[36,43344,32812],{"class":60},[36,43346,42998],{"class":49},[36,43348,32812],{"class":60},[36,43350,38789],{"class":49},[36,43352,43353,43356,43358,43360,43362],{"class":38,"line":10667},[36,43354,43355],{"class":49},"            nn.AdaptiveAvgPool2d((",[36,43357,61],{"class":60},[36,43359,64],{"class":49},[36,43361,61],{"class":60},[36,43363,43364],{"class":49},")),\n",[36,43366,43367],{"class":38,"line":10672},[36,43368,39532],{"class":49},[36,43370,43371,43373,43376,43378,43380],{"class":38,"line":17348},[36,43372,39537],{"class":49},[36,43374,43375],{"class":60},"1024",[36,43377,64],{"class":49},[36,43379,332],{"class":60},[36,43381,75],{"class":49},[36,43383,43384],{"class":38,"line":17354},[36,43385,38868],{"class":49},[36,43387,43388],{"class":38,"line":17377},[36,43389,43390],{"class":42},"        # 对模型参数初始化\n",[36,43392,43393,43395,43397,43399,43401],{"class":38,"line":17383},[36,43394,4152],{"class":53},[36,43396,39610],{"class":49},[36,43398,26788],{"class":53},[36,43400,39615],{"class":60},[36,43402,39618],{"class":49},[36,43404,43405,43407,43409],{"class":38,"line":17406},[36,43406,5391],{"class":53},[36,43408,39630],{"class":60},[36,43410,39633],{"class":49},[36,43412,43413,43415,43418,43420,43423,43425,43427,43429,43431],{"class":38,"line":17420},[36,43414,39643],{"class":49},[36,43416,43417],{"class":416},"mode",[36,43419,54],{"class":53},[36,43421,43422],{"class":998},"'fan_out'",[36,43424,64],{"class":49},[36,43426,39646],{"class":416},[36,43428,54],{"class":53},[36,43430,39651],{"class":998},[36,43432,75],{"class":49},[36,43434,43435],{"class":38,"line":17440},[36,43436,43437],{"class":42},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[36,43439,43440],{"class":38,"line":17446},[36,43441,43442],{"class":42},"                # ② mode = 'fan_out'决定使用的fan值：\n",[36,43444,43445],{"class":38,"line":17457},[36,43446,43447],{"class":42},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[36,43449,43450],{"class":38,"line":17480},[36,43451,43452],{"class":42},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[36,43454,43455],{"class":38,"line":17502},[36,43456,43457],{"class":42},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[36,43459,43460],{"class":38,"line":17507},[36,43461,43462],{"class":42},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[36,43464,43465,43467,43469,43471,43473,43475],{"class":38,"line":17513},[36,43466,39663],{"class":53},[36,43468,39666],{"class":49},[36,43470,39669],{"class":53},[36,43472,39672],{"class":53},[36,43474,39675],{"class":60},[36,43476,4488],{"class":49},[36,43478,43479,43481,43483],{"class":38,"line":17527},[36,43480,39687],{"class":49},[36,43482,643],{"class":60},[36,43484,75],{"class":49},[36,43486,43487,43490,43492],{"class":38,"line":17540},[36,43488,43489],{"class":53},"                elif",[36,43491,39630],{"class":60},[36,43493,39706],{"class":49},[36,43495,43496,43499,43501,43503,43505],{"class":38,"line":17545},[36,43497,43498],{"class":49},"                    nn.init.normal_(m.weight,",[36,43500,643],{"class":60},[36,43502,64],{"class":49},[36,43504,39728],{"class":60},[36,43506,75],{"class":49},[36,43508,43509,43512,43514,43516,43518,43520],{"class":38,"line":17559},[36,43510,43511],{"class":53},"                    if",[36,43513,39666],{"class":49},[36,43515,39669],{"class":53},[36,43517,39672],{"class":53},[36,43519,39675],{"class":60},[36,43521,4488],{"class":49},[36,43523,43524,43527,43529],{"class":38,"line":17564},[36,43525,43526],{"class":49},"                        nn.init.constant_(m.bias,",[36,43528,643],{"class":60},[36,43530,75],{"class":49},[36,43532,43533],{"class":38,"line":17570},[36,43534,35907],{"class":42},[36,43536,43537,43539,43541],{"class":38,"line":17575},[36,43538,31543],{"class":53},[36,43540,31835],{"class":2713},[36,43542,31838],{"class":49},[36,43544,43545,43547,43549,43551],{"class":38,"line":17589},[36,43546,31843],{"class":49},[36,43548,54],{"class":53},[36,43550,31565],{"class":60},[36,43552,43553],{"class":49},".b1(x)\n",[36,43555,43556,43558,43560,43562],{"class":38,"line":17594},[36,43557,31843],{"class":49},[36,43559,54],{"class":53},[36,43561,31565],{"class":60},[36,43563,43564],{"class":49},".b2(x)\n",[36,43566,43567,43569,43571,43573],{"class":38,"line":17599},[36,43568,31843],{"class":49},[36,43570,54],{"class":53},[36,43572,31565],{"class":60},[36,43574,43575],{"class":49},".b3(x)\n",[36,43577,43578,43580,43582,43584],{"class":38,"line":17613},[36,43579,31843],{"class":49},[36,43581,54],{"class":53},[36,43583,31565],{"class":60},[36,43585,43586],{"class":49},".b4(x)\n",[36,43588,43589,43591,43593,43595],{"class":38,"line":17625},[36,43590,31843],{"class":49},[36,43592,54],{"class":53},[36,43594,31565],{"class":60},[36,43596,43597],{"class":49},".b5(x)\n",[36,43599,43600,43602],{"class":38,"line":17630},[36,43601,15496],{"class":53},[36,43603,31951],{"class":49},[36,43605,43606],{"class":38,"line":17643},[36,43607,194],{"emptyLinePlaceholder":193},[36,43609,43610],{"class":38,"line":17648},[36,43611,43612],{"class":42},"# 模型展示\n",[36,43614,43615,43617,43619,43621,43623],{"class":38,"line":17653},[36,43616,2281],{"class":53},[36,43618,31962],{"class":60},[36,43620,3698],{"class":53},[36,43622,31967],{"class":998},[36,43624,4488],{"class":49},[36,43626,43627,43629,43631,43633,43635,43637,43639,43641,43643],{"class":38,"line":17658},[36,43628,31979],{"class":49},[36,43630,54],{"class":53},[36,43632,31193],{"class":49},[36,43634,31986],{"class":998},[36,43636,2454],{"class":53},[36,43638,31991],{"class":49},[36,43640,2451],{"class":53},[36,43642,31218],{"class":998},[36,43644,75],{"class":49},[36,43646,43647,43649,43651],{"class":38,"line":17671},[36,43648,32031],{"class":49},[36,43650,54],{"class":53},[36,43652,43653],{"class":49},"GoogLeNet(Inception).to(device)\n",[36,43655,43656,43658,43660,43662,43664,43666,43668,43670],{"class":38,"line":17676},[36,43657,32041],{"class":60},[36,43659,32044],{"class":49},[36,43661,61],{"class":60},[36,43663,64],{"class":49},[36,43665,32243],{"class":60},[36,43667,64],{"class":49},[36,43669,32243],{"class":60},[36,43671,32057],{"class":49},[851,43673,43674],{"start":46},[854,43675,39925],{},[26,43677,43679],{"className":28,"code":43678,"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,43680,43681,43687,43693,43703,43709,43719,43729,43739,43749,43759,43763,43774,43784,43788,43792,43796,43804,43816,43826,43842,43852,43884,43898,43908,43918,43922,43932,43946,43956,43966,43976,43982,43986,43990,43994,43998,44002,44010,44030,44034,44038,44042,44046,44050,44066,44070,44074,44082,44086,44090,44098,44102,44106,44110,44118,44122,44126,44130,44134,44142,44146,44154,44158,44166,44170,44178,44182,44190,44194,44198,44206,44210,44214,44218,44230,44254,44268,44272,44276,44280,44288,44292,44300,44304,44312,44316,44324,44328,44336,44340,44348,44352,44364,44368,44376,44380,44388,44392,44396,44400,44404,44412,44416,44432,44436,44444,44448,44452,44456,44460,44464,44468,44472,44488,44492,44504,44508,44520,44524,44536,44540,44548,44552,44560,44564,44568,44572,44578,44582,44590,44594,44610,44614,44622,44626,44642,44654,44658,44670,44674,44678,44686,44690,44694,44702,44706,44714,44718,44726,44730,44734,44776,44818,44822,44826,44842,44846,44862,44866,44870,44878,44882,44886,44898,44936,44940,44944,44952,44956,44970,44980,44986,44992,44998,45004,45008,45012,45018,45022,45026,45034,45038,45056,45060,45064,45068,45084,45088,45092,45096,45100,45104,45124,45144,45148,45152,45156,45164,45172,45176,45192,45212,45232,45236,45240,45248,45256,45260,45264,45268,45280,45284,45294,45302,45319],{"__ignoreMap":31},[36,43682,43683,43685],{"class":38,"line":39},[36,43684,31135],{"class":53},[36,43686,32564],{"class":49},[36,43688,43689,43691],{"class":38,"line":46},[36,43690,31135],{"class":53},[36,43692,32571],{"class":49},[36,43694,43695,43697,43699,43701],{"class":38,"line":78},[36,43696,31135],{"class":53},[36,43698,32582],{"class":49},[36,43700,32125],{"class":53},[36,43702,32587],{"class":49},[36,43704,43705,43707],{"class":38,"line":125},[36,43706,31135],{"class":53},[36,43708,31138],{"class":49},[36,43710,43711,43713,43715,43717],{"class":38,"line":131},[36,43712,31479],{"class":53},[36,43714,32157],{"class":49},[36,43716,31135],{"class":53},[36,43718,32604],{"class":49},[36,43720,43721,43723,43725,43727],{"class":38,"line":396},[36,43722,31479],{"class":53},[36,43724,32110],{"class":49},[36,43726,31135],{"class":53},[36,43728,32115],{"class":49},[36,43730,43731,43733,43735,43737],{"class":38,"line":407},[36,43732,31479],{"class":53},[36,43734,32140],{"class":49},[36,43736,31135],{"class":53},[36,43738,32145],{"class":49},[36,43740,43741,43743,43745,43747],{"class":38,"line":2061},[36,43742,31135],{"class":53},[36,43744,32157],{"class":49},[36,43746,32125],{"class":53},[36,43748,32162],{"class":49},[36,43750,43751,43753,43755,43757],{"class":38,"line":2067},[36,43752,31135],{"class":53},[36,43754,32174],{"class":49},[36,43756,32125],{"class":53},[36,43758,32179],{"class":49},[36,43760,43761],{"class":38,"line":2079},[36,43762,32649],{"class":42},[36,43764,43765,43767,43769,43771],{"class":38,"line":2362},[36,43766,31479],{"class":53},[36,43768,32656],{"class":49},[36,43770,31135],{"class":53},[36,43772,43773],{"class":49}," GoogLeNet, Inception\n",[36,43775,43776,43778,43780,43782],{"class":38,"line":2367},[36,43777,31479],{"class":53},[36,43779,31482],{"class":49},[36,43781,31135],{"class":53},[36,43783,31487],{"class":49},[36,43785,43786],{"class":38,"line":2373},[36,43787,194],{"emptyLinePlaceholder":193},[36,43789,43790],{"class":38,"line":2378},[36,43791,194],{"emptyLinePlaceholder":193},[36,43793,43794],{"class":38,"line":2392},[36,43795,32684],{"class":42},[36,43797,43798,43800,43802],{"class":38,"line":2397},[36,43799,32689],{"class":53},[36,43801,32692],{"class":2713},[36,43803,32695],{"class":49},[36,43805,43806,43808,43810,43812,43814],{"class":38,"line":2403},[36,43807,32700],{"class":49},[36,43809,54],{"class":53},[36,43811,32197],{"class":49},[36,43813,32205],{"class":998},[36,43815,32208],{"class":49},[36,43817,43818,43820,43822,43824],{"class":38,"line":2424},[36,43819,32713],{"class":416},[36,43821,54],{"class":53},[36,43823,32218],{"class":60},[36,43825,32208],{"class":49},[36,43827,43828,43830,43832,43834,43836,43838,43840],{"class":38,"line":2429},[36,43829,32724],{"class":416},[36,43831,54],{"class":53},[36,43833,32235],{"class":49},[36,43835,32238],{"class":416},[36,43837,54],{"class":53},[36,43839,36191],{"class":60},[36,43841,32246],{"class":49},[36,43843,43844,43846,43848,43850],{"class":38,"line":2443},[36,43845,32741],{"class":416},[36,43847,54],{"class":53},[36,43849,32218],{"class":60},[36,43851,75],{"class":49},[36,43853,43854,43856,43858,43860,43862,43864,43866,43868,43870,43872,43874,43876,43878,43880,43882],{"class":38,"line":2448},[36,43855,32752],{"class":49},[36,43857,54],{"class":53},[36,43859,32757],{"class":49},[36,43861,32760],{"class":60},[36,43863,901],{"class":49},[36,43865,32765],{"class":60},[36,43867,1339],{"class":53},[36,43869,8105],{"class":60},[36,43871,32772],{"class":49},[36,43873,32760],{"class":60},[36,43875,901],{"class":49},[36,43877,32779],{"class":60},[36,43879,1339],{"class":53},[36,43881,8105],{"class":60},[36,43883,32786],{"class":49},[36,43885,43886,43888,43890,43892,43894,43896],{"class":38,"line":2477},[36,43887,32791],{"class":49},[36,43889,54],{"class":53},[36,43891,32796],{"class":49},[36,43893,32279],{"class":416},[36,43895,54],{"class":53},[36,43897,32284],{"class":49},[36,43899,43900,43902,43904,43906],{"class":38,"line":2482},[36,43901,32807],{"class":416},[36,43903,54],{"class":53},[36,43905,638],{"class":60},[36,43907,32208],{"class":49},[36,43909,43910,43912,43914,43916],{"class":38,"line":2499},[36,43911,32819],{"class":416},[36,43913,54],{"class":53},[36,43915,32218],{"class":60},[36,43917,32208],{"class":49},[36,43919,43920],{"class":38,"line":2504},[36,43921,32830],{"class":42},[36,43923,43924,43926,43928,43930],{"class":38,"line":2509},[36,43925,32835],{"class":416},[36,43927,54],{"class":53},[36,43929,1280],{"class":60},[36,43931,75],{"class":49},[36,43933,43934,43936,43938,43940,43942,43944],{"class":38,"line":2514},[36,43935,32846],{"class":49},[36,43937,54],{"class":53},[36,43939,32276],{"class":49},[36,43941,32279],{"class":416},[36,43943,54],{"class":53},[36,43945,32857],{"class":49},[36,43947,43948,43950,43952,43954],{"class":38,"line":2528},[36,43949,32862],{"class":416},[36,43951,54],{"class":53},[36,43953,638],{"class":60},[36,43955,32208],{"class":49},[36,43957,43958,43960,43962,43964],{"class":38,"line":2533},[36,43959,32873],{"class":416},[36,43961,54],{"class":53},[36,43963,32218],{"class":60},[36,43965,32208],{"class":49},[36,43967,43968,43970,43972,43974],{"class":38,"line":3326},[36,43969,32884],{"class":416},[36,43971,54],{"class":53},[36,43973,1280],{"class":60},[36,43975,75],{"class":49},[36,43977,43978,43980],{"class":38,"line":3340},[36,43979,4839],{"class":53},[36,43981,32897],{"class":49},[36,43983,43984],{"class":38,"line":3348},[36,43985,194],{"emptyLinePlaceholder":193},[36,43987,43988],{"class":38,"line":3353},[36,43989,32906],{"class":42},[36,43991,43992],{"class":38,"line":3359},[36,43993,32911],{"class":42},[36,43995,43996],{"class":38,"line":3365},[36,43997,194],{"emptyLinePlaceholder":193},[36,43999,44000],{"class":38,"line":3370},[36,44001,32920],{"class":42},[36,44003,44004,44006,44008],{"class":38,"line":8695},[36,44005,32689],{"class":53},[36,44007,32927],{"class":2713},[36,44009,32930],{"class":49},[36,44011,44012,44014,44016,44018,44020,44022,44024,44026,44028],{"class":38,"line":8719},[36,44013,31979],{"class":49},[36,44015,54],{"class":53},[36,44017,31193],{"class":49},[36,44019,31986],{"class":998},[36,44021,2454],{"class":53},[36,44023,31991],{"class":49},[36,44025,2451],{"class":53},[36,44027,32949],{"class":998},[36,44029,75],{"class":49},[36,44031,44032],{"class":38,"line":8724},[36,44033,194],{"emptyLinePlaceholder":193},[36,44035,44036],{"class":38,"line":8730},[36,44037,194],{"emptyLinePlaceholder":193},[36,44039,44040],{"class":38,"line":8757},[36,44041,32964],{"class":42},[36,44043,44044],{"class":38,"line":8762},[36,44045,32969],{"class":42},[36,44047,44048],{"class":38,"line":8768},[36,44049,32974],{"class":42},[36,44051,44052,44054,44056,44058,44060,44062,44064],{"class":38,"line":8780},[36,44053,32979],{"class":49},[36,44055,54],{"class":53},[36,44057,32984],{"class":49},[36,44059,32987],{"class":416},[36,44061,54],{"class":53},[36,44063,32992],{"class":60},[36,44065,75],{"class":49},[36,44067,44068],{"class":38,"line":8792},[36,44069,194],{"emptyLinePlaceholder":193},[36,44071,44072],{"class":38,"line":8804},[36,44073,33003],{"class":42},[36,44075,44076,44078,44080],{"class":38,"line":10463},[36,44077,33008],{"class":49},[36,44079,54],{"class":53},[36,44081,33013],{"class":49},[36,44083,44084],{"class":38,"line":10488},[36,44085,194],{"emptyLinePlaceholder":193},[36,44087,44088],{"class":38,"line":10511},[36,44089,33022],{"class":42},[36,44091,44092,44094,44096],{"class":38,"line":10535},[36,44093,32031],{"class":49},[36,44095,54],{"class":53},[36,44097,33031],{"class":49},[36,44099,44100],{"class":38,"line":10540},[36,44101,33036],{"class":42},[36,44103,44104],{"class":38,"line":10545},[36,44105,33041],{"class":42},[36,44107,44108],{"class":38,"line":10550},[36,44109,33046],{"class":42},[36,44111,44112,44114,44116],{"class":38,"line":10559},[36,44113,33051],{"class":49},[36,44115,54],{"class":53},[36,44117,33056],{"class":49},[36,44119,44120],{"class":38,"line":10564},[36,44121,194],{"emptyLinePlaceholder":193},[36,44123,44124],{"class":38,"line":10570},[36,44125,194],{"emptyLinePlaceholder":193},[36,44127,44128],{"class":38,"line":10591},[36,44129,33069],{"class":42},[36,44131,44132],{"class":38,"line":10597},[36,44133,33074],{"class":42},[36,44135,44136,44138,44140],{"class":38,"line":10611},[36,44137,33079],{"class":49},[36,44139,54],{"class":53},[36,44141,33084],{"class":60},[36,44143,44144],{"class":38,"line":10617},[36,44145,33089],{"class":42},[36,44147,44148,44150,44152],{"class":38,"line":10644},[36,44149,33094],{"class":49},[36,44151,54],{"class":53},[36,44153,33099],{"class":49},[36,44155,44156],{"class":38,"line":10653},[36,44157,33104],{"class":42},[36,44159,44160,44162,44164],{"class":38,"line":10659},[36,44161,33109],{"class":49},[36,44163,54],{"class":53},[36,44165,33099],{"class":49},[36,44167,44168],{"class":38,"line":10667},[36,44169,33118],{"class":42},[36,44171,44172,44174,44176],{"class":38,"line":10672},[36,44173,33123],{"class":49},[36,44175,54],{"class":53},[36,44177,33099],{"class":49},[36,44179,44180],{"class":38,"line":17348},[36,44181,33132],{"class":42},[36,44183,44184,44186,44188],{"class":38,"line":17354},[36,44185,33137],{"class":49},[36,44187,54],{"class":53},[36,44189,33099],{"class":49},[36,44191,44192],{"class":38,"line":17377},[36,44193,194],{"emptyLinePlaceholder":193},[36,44195,44196],{"class":38,"line":17383},[36,44197,33150],{"class":42},[36,44199,44200,44202,44204],{"class":38,"line":17406},[36,44201,33155],{"class":49},[36,44203,54],{"class":53},[36,44205,33160],{"class":49},[36,44207,44208],{"class":38,"line":17420},[36,44209,194],{"emptyLinePlaceholder":193},[36,44211,44212],{"class":38,"line":17440},[36,44213,194],{"emptyLinePlaceholder":193},[36,44215,44216],{"class":38,"line":17446},[36,44217,33173],{"class":42},[36,44219,44220,44222,44224,44226,44228],{"class":38,"line":17457},[36,44221,3950],{"class":53},[36,44223,33180],{"class":49},[36,44225,26788],{"class":53},[36,44227,33185],{"class":60},[36,44229,33188],{"class":49},[36,44231,44232,44234,44236,44238,44240,44242,44244,44246,44248,44250,44252],{"class":38,"line":17480},[36,44233,33193],{"class":60},[36,44235,901],{"class":49},[36,44237,33198],{"class":998},[36,44239,33201],{"class":60},[36,44241,1466],{"class":998},[36,44243,33201],{"class":60},[36,44245,1141],{"class":998},[36,44247,33210],{"class":49},[36,44249,1414],{"class":53},[36,44251,61],{"class":60},[36,44253,31239],{"class":49},[36,44255,44256,44258,44260,44262,44264,44266],{"class":38,"line":17502},[36,44257,33193],{"class":60},[36,44259,901],{"class":49},[36,44261,33225],{"class":998},[36,44263,1339],{"class":53},[36,44265,332],{"class":60},[36,44267,75],{"class":49},[36,44269,44270],{"class":38,"line":17507},[36,44271,194],{"emptyLinePlaceholder":193},[36,44273,44274],{"class":38,"line":17513},[36,44275,33240],{"class":42},[36,44277,44278],{"class":38,"line":17527},[36,44279,33245],{"class":42},[36,44281,44282,44284,44286],{"class":38,"line":17540},[36,44283,33250],{"class":49},[36,44285,54],{"class":53},[36,44287,33084],{"class":60},[36,44289,44290],{"class":38,"line":17545},[36,44291,33259],{"class":42},[36,44293,44294,44296,44298],{"class":38,"line":17559},[36,44295,33264],{"class":49},[36,44297,54],{"class":53},[36,44299,3834],{"class":60},[36,44301,44302],{"class":38,"line":17564},[36,44303,33273],{"class":42},[36,44305,44306,44308,44310],{"class":38,"line":17570},[36,44307,33278],{"class":49},[36,44309,54],{"class":53},[36,44311,33084],{"class":60},[36,44313,44314],{"class":38,"line":17575},[36,44315,33287],{"class":42},[36,44317,44318,44320,44322],{"class":38,"line":17589},[36,44319,33292],{"class":49},[36,44321,54],{"class":53},[36,44323,3834],{"class":60},[36,44325,44326],{"class":38,"line":17594},[36,44327,33301],{"class":42},[36,44329,44330,44332,44334],{"class":38,"line":17599},[36,44331,33306],{"class":49},[36,44333,54],{"class":53},[36,44335,3834],{"class":60},[36,44337,44338],{"class":38,"line":17613},[36,44339,33315],{"class":42},[36,44341,44342,44344,44346],{"class":38,"line":17625},[36,44343,33320],{"class":49},[36,44345,54],{"class":53},[36,44347,3834],{"class":60},[36,44349,44350],{"class":38,"line":17630},[36,44351,33329],{"class":42},[36,44353,44354,44356,44358,44360,44362],{"class":38,"line":17643},[36,44355,4152],{"class":53},[36,44357,32343],{"class":49},[36,44359,26788],{"class":53},[36,44361,32348],{"class":60},[36,44363,33342],{"class":49},[36,44365,44366],{"class":38,"line":17648},[36,44367,33347],{"class":42},[36,44369,44370,44372,44374],{"class":38,"line":17653},[36,44371,33352],{"class":49},[36,44373,54],{"class":53},[36,44375,33357],{"class":49},[36,44377,44378],{"class":38,"line":17658},[36,44379,33362],{"class":42},[36,44381,44382,44384,44386],{"class":38,"line":17671},[36,44383,33367],{"class":49},[36,44385,54],{"class":53},[36,44387,33372],{"class":49},[36,44389,44390],{"class":38,"line":17676},[36,44391,33378],{"class":42},[36,44393,44394],{"class":38,"line":33375},[36,44395,33384],{"class":49},[36,44397,44398],{"class":38,"line":33381},[36,44399,33390],{"class":42},[36,44401,44402],{"class":38,"line":33387},[36,44403,33396],{"class":42},[36,44405,44406,44408,44410],{"class":38,"line":33393},[36,44407,33402],{"class":49},[36,44409,54],{"class":53},[36,44411,33407],{"class":49},[36,44413,44414],{"class":38,"line":33399},[36,44415,33413],{"class":42},[36,44417,44418,44420,44422,44424,44426,44428,44430],{"class":38,"line":33410},[36,44419,33419],{"class":49},[36,44421,54],{"class":53},[36,44423,33424],{"class":49},[36,44425,33427],{"class":416},[36,44427,54],{"class":53},[36,44429,61],{"class":60},[36,44431,75],{"class":49},[36,44433,44434],{"class":38,"line":33416},[36,44435,33439],{"class":42},[36,44437,44438,44440,44442],{"class":38,"line":33436},[36,44439,33445],{"class":49},[36,44441,54],{"class":53},[36,44443,33450],{"class":49},[36,44445,44446],{"class":38,"line":33442},[36,44447,33456],{"class":42},[36,44449,44450],{"class":38,"line":33453},[36,44451,33462],{"class":49},[36,44453,44454],{"class":38,"line":33459},[36,44455,33468],{"class":42},[36,44457,44458],{"class":38,"line":33465},[36,44459,33474],{"class":49},[36,44461,44462],{"class":38,"line":33471},[36,44463,33480],{"class":42},[36,44465,44466],{"class":38,"line":33477},[36,44467,33486],{"class":49},[36,44469,44470],{"class":38,"line":33483},[36,44471,33492],{"class":42},[36,44473,44474,44476,44478,44480,44482,44484,44486],{"class":38,"line":33489},[36,44475,33498],{"class":49},[36,44477,10224],{"class":53},[36,44479,33503],{"class":49},[36,44481,1339],{"class":53},[36,44483,33508],{"class":49},[36,44485,643],{"class":60},[36,44487,75],{"class":49},[36,44489,44490],{"class":38,"line":33495},[36,44491,33518],{"class":42},[36,44493,44494,44496,44498,44500,44502],{"class":38,"line":33515},[36,44495,33524],{"class":49},[36,44497,10224],{"class":53},[36,44499,33529],{"class":49},[36,44501,3698],{"class":53},[36,44503,33534],{"class":49},[36,44505,44506],{"class":38,"line":33521},[36,44507,33540],{"class":42},[36,44509,44510,44512,44514,44516,44518],{"class":38,"line":33537},[36,44511,33546],{"class":49},[36,44513,10224],{"class":53},[36,44515,33508],{"class":49},[36,44517,643],{"class":60},[36,44519,75],{"class":49},[36,44521,44522],{"class":38,"line":33543},[36,44523,33560],{"class":42},[36,44525,44526,44528,44530,44532,44534],{"class":38,"line":33557},[36,44527,4152],{"class":53},[36,44529,33568],{"class":49},[36,44531,26788],{"class":53},[36,44533,32348],{"class":60},[36,44535,33575],{"class":49},[36,44537,44538],{"class":38,"line":33563},[36,44539,33581],{"class":42},[36,44541,44542,44544,44546],{"class":38,"line":33578},[36,44543,33352],{"class":49},[36,44545,54],{"class":53},[36,44547,33357],{"class":49},[36,44549,44550],{"class":38,"line":33584},[36,44551,33596],{"class":42},[36,44553,44554,44556,44558],{"class":38,"line":33593},[36,44555,33367],{"class":49},[36,44557,54],{"class":53},[36,44559,33372],{"class":49},[36,44561,44562],{"class":38,"line":33599},[36,44563,33611],{"class":42},[36,44565,44566],{"class":38,"line":33608},[36,44567,33617],{"class":49},[36,44569,44570],{"class":38,"line":33614},[36,44571,37098],{"class":42},[36,44573,44574,44576],{"class":38,"line":33620},[36,44575,33623],{"class":53},[36,44577,33626],{"class":49},[36,44579,44580],{"class":38,"line":33629},[36,44581,33632],{"class":42},[36,44583,44584,44586,44588],{"class":38,"line":33635},[36,44585,37113],{"class":49},[36,44587,54],{"class":53},[36,44589,33407],{"class":49},[36,44591,44592],{"class":38,"line":33646},[36,44593,33649],{"class":42},[36,44595,44596,44598,44600,44602,44604,44606,44608],{"class":38,"line":33652},[36,44597,37126],{"class":49},[36,44599,54],{"class":53},[36,44601,33424],{"class":49},[36,44603,33427],{"class":416},[36,44605,54],{"class":53},[36,44607,61],{"class":60},[36,44609,75],{"class":49},[36,44611,44612],{"class":38,"line":33671},[36,44613,33674],{"class":42},[36,44615,44616,44618,44620],{"class":38,"line":33677},[36,44617,37147],{"class":49},[36,44619,54],{"class":53},[36,44621,33450],{"class":49},[36,44623,44624],{"class":38,"line":33688},[36,44625,33691],{"class":42},[36,44627,44628,44630,44632,44634,44636,44638,44640],{"class":38,"line":33694},[36,44629,37160],{"class":49},[36,44631,10224],{"class":53},[36,44633,37165],{"class":49},[36,44635,1339],{"class":53},[36,44637,33508],{"class":49},[36,44639,643],{"class":60},[36,44641,75],{"class":49},[36,44643,44644,44646,44648,44650,44652],{"class":38,"line":33714},[36,44645,37178],{"class":49},[36,44647,10224],{"class":53},[36,44649,33529],{"class":49},[36,44651,3698],{"class":53},[36,44653,33534],{"class":49},[36,44655,44656],{"class":38,"line":33730},[36,44657,37191],{"class":42},[36,44659,44660,44662,44664,44666,44668],{"class":38,"line":33736},[36,44661,37196],{"class":49},[36,44663,10224],{"class":53},[36,44665,33508],{"class":49},[36,44667,643],{"class":60},[36,44669,75],{"class":49},[36,44671,44672],{"class":38,"line":33750},[36,44673,33753],{"class":42},[36,44675,44676],{"class":38,"line":33756},[36,44677,33759],{"class":42},[36,44679,44680,44682,44684],{"class":38,"line":33762},[36,44681,33765],{"class":49},[36,44683,1466],{"class":53},[36,44685,33770],{"class":49},[36,44687,44688],{"class":38,"line":33773},[36,44689,33776],{"class":42},[36,44691,44692],{"class":38,"line":33779},[36,44693,33782],{"class":42},[36,44695,44696,44698,44700],{"class":38,"line":33785},[36,44697,33788],{"class":49},[36,44699,1466],{"class":53},[36,44701,33770],{"class":49},[36,44703,44704],{"class":38,"line":33795},[36,44705,33798],{"class":42},[36,44707,44708,44710,44712],{"class":38,"line":33801},[36,44709,33804],{"class":49},[36,44711,1466],{"class":53},[36,44713,33809],{"class":49},[36,44715,44716],{"class":38,"line":33812},[36,44717,33815],{"class":42},[36,44719,44720,44722,44724],{"class":38,"line":33818},[36,44721,33821],{"class":49},[36,44723,1466],{"class":53},[36,44725,33809],{"class":49},[36,44727,44728],{"class":38,"line":33828},[36,44729,194],{"emptyLinePlaceholder":193},[36,44731,44732],{"class":38,"line":33833},[36,44733,33836],{"class":42},[36,44735,44736,44738,44740,44742,44744,44746,44748,44750,44752,44754,44756,44758,44760,44762,44764,44766,44768,44770,44772,44774],{"class":38,"line":33839},[36,44737,33193],{"class":60},[36,44739,901],{"class":49},[36,44741,4341],{"class":998},[36,44743,33201],{"class":60},[36,44745,33850],{"class":998},[36,44747,1775],{"class":60},[36,44749,33855],{"class":53},[36,44751,1825],{"class":60},[36,44753,33860],{"class":998},[36,44755,1775],{"class":60},[36,44757,33855],{"class":53},[36,44759,1825],{"class":60},[36,44761,4341],{"class":998},[36,44763,33871],{"class":49},[36,44765,1414],{"class":53},[36,44767,61],{"class":60},[36,44769,33878],{"class":49},[36,44771,1414],{"class":53},[36,44773,61],{"class":60},[36,44775,33885],{"class":49},[36,44777,44778,44780,44782,44784,44786,44788,44790,44792,44794,44796,44798,44800,44802,44804,44806,44808,44810,44812,44814,44816],{"class":38,"line":33888},[36,44779,33193],{"class":60},[36,44781,901],{"class":49},[36,44783,4341],{"class":998},[36,44785,33201],{"class":60},[36,44787,33899],{"class":998},[36,44789,1775],{"class":60},[36,44791,33855],{"class":53},[36,44793,1825],{"class":60},[36,44795,33908],{"class":998},[36,44797,1775],{"class":60},[36,44799,33855],{"class":53},[36,44801,1825],{"class":60},[36,44803,4341],{"class":998},[36,44805,33919],{"class":49},[36,44807,1414],{"class":53},[36,44809,61],{"class":60},[36,44811,33926],{"class":49},[36,44813,1414],{"class":53},[36,44815,61],{"class":60},[36,44817,33885],{"class":49},[36,44819,44820],{"class":38,"line":33935},[36,44821,194],{"emptyLinePlaceholder":193},[36,44823,44824],{"class":38,"line":33940},[36,44825,33943],{"class":42},[36,44827,44828,44830,44832,44834,44836,44838,44840],{"class":38,"line":33946},[36,44829,3246],{"class":53},[36,44831,33951],{"class":49},[36,44833,1414],{"class":53},[36,44835,61],{"class":60},[36,44837,1819],{"class":49},[36,44839,1839],{"class":53},[36,44841,33962],{"class":49},[36,44843,44844],{"class":38,"line":33965},[36,44845,33968],{"class":42},[36,44847,44848,44850,44852,44854,44856,44858,44860],{"class":38,"line":33971},[36,44849,33974],{"class":49},[36,44851,478],{"class":60},[36,44853,54],{"class":53},[36,44855,33981],{"class":49},[36,44857,1414],{"class":53},[36,44859,61],{"class":60},[36,44861,33988],{"class":49},[36,44863,44864],{"class":38,"line":33991},[36,44865,33994],{"class":42},[36,44867,44868],{"class":38,"line":33997},[36,44869,34000],{"class":42},[36,44871,44872,44874,44876],{"class":38,"line":34003},[36,44873,34006],{"class":49},[36,44875,54],{"class":53},[36,44877,33056],{"class":49},[36,44879,44880],{"class":38,"line":34013},[36,44881,194],{"emptyLinePlaceholder":193},[36,44883,44884],{"class":38,"line":34018},[36,44885,34021],{"class":42},[36,44887,44888,44890,44892,44894,44896],{"class":38,"line":34024},[36,44889,34027],{"class":49},[36,44891,54],{"class":53},[36,44893,34032],{"class":49},[36,44895,1414],{"class":53},[36,44897,34037],{"class":49},[36,44899,44900,44902,44904,44906,44908,44910,44912,44914,44916,44918,44920,44922,44924,44926,44928,44930,44932,44934],{"class":38,"line":34040},[36,44901,33193],{"class":60},[36,44903,901],{"class":49},[36,44905,34047],{"class":998},[36,44907,1775],{"class":60},[36,44909,34052],{"class":53},[36,44911,1825],{"class":60},[36,44913,1426],{"class":998},[36,44915,1775],{"class":60},[36,44917,34052],{"class":53},[36,44919,1825],{"class":60},[36,44921,34065],{"class":998},[36,44923,34068],{"class":49},[36,44925,34071],{"class":53},[36,44927,1786],{"class":60},[36,44929,34076],{"class":49},[36,44931,1214],{"class":53},[36,44933,1786],{"class":60},[36,44935,31239],{"class":49},[36,44937,44938],{"class":38,"line":34085},[36,44939,37475],{"class":42},[36,44941,44942],{"class":38,"line":34091},[36,44943,37480],{"class":42},[36,44945,44946,44948,44950],{"class":38,"line":34097},[36,44947,37485],{"class":49},[36,44949,34109],{"class":998},[36,44951,75],{"class":49},[36,44953,44954],{"class":38,"line":34103},[36,44955,34129],{"class":42},[36,44957,44958,44960,44962,44964,44966,44968],{"class":38,"line":34114},[36,44959,34135],{"class":49},[36,44961,54],{"class":53},[36,44963,34140],{"class":49},[36,44965,34143],{"class":416},[36,44967,54],{"class":53},[36,44969,2296],{"class":49},[36,44971,44972,44974,44976,44978],{"class":38,"line":34120},[36,44973,34153],{"class":998},[36,44975,1738],{"class":49},[36,44977,34158],{"class":60},[36,44979,34161],{"class":49},[36,44981,44982,44984],{"class":38,"line":34126},[36,44983,34167],{"class":998},[36,44985,34170],{"class":49},[36,44987,44988,44990],{"class":38,"line":34132},[36,44989,34176],{"class":998},[36,44991,34179],{"class":49},[36,44993,44994,44996],{"class":38,"line":34150},[36,44995,34185],{"class":998},[36,44997,34188],{"class":49},[36,44999,45000,45002],{"class":38,"line":34164},[36,45001,34194],{"class":998},[36,45003,34197],{"class":49},[36,45005,45006],{"class":38,"line":34173},[36,45007,34203],{"class":49},[36,45009,45010],{"class":38,"line":34182},[36,45011,34209],{"class":42},[36,45013,45014,45016],{"class":38,"line":34191},[36,45015,4839],{"class":53},[36,45017,34217],{"class":49},[36,45019,45020],{"class":38,"line":34200},[36,45021,194],{"emptyLinePlaceholder":193},[36,45023,45024],{"class":38,"line":34206},[36,45025,34228],{"class":42},[36,45027,45028,45030,45032],{"class":38,"line":34212},[36,45029,32689],{"class":53},[36,45031,34236],{"class":2713},[36,45033,34239],{"class":49},[36,45035,45036],{"class":38,"line":34220},[36,45037,34245],{"class":42},[36,45039,45040,45042,45044,45046,45048,45050,45052,45054],{"class":38,"line":34225},[36,45041,34251],{"class":49},[36,45043,32435],{"class":416},[36,45045,54],{"class":53},[36,45047,901],{"class":49},[36,45049,625],{"class":60},[36,45051,64],{"class":49},[36,45053,186],{"class":60},[36,45055,31239],{"class":49},[36,45057,45058],{"class":38,"line":34231},[36,45059,34271],{"class":42},[36,45061,45062],{"class":38,"line":34242},[36,45063,34277],{"class":42},[36,45065,45066],{"class":38,"line":34248},[36,45067,34283],{"class":42},[36,45069,45070,45072,45074,45076,45078,45080,45082],{"class":38,"line":34268},[36,45071,32469],{"class":49},[36,45073,61],{"class":60},[36,45075,64],{"class":49},[36,45077,181],{"class":60},[36,45079,64],{"class":49},[36,45081,61],{"class":60},[36,45083,75],{"class":49},[36,45085,45086],{"class":38,"line":34274},[36,45087,34306],{"class":42},[36,45089,45090],{"class":38,"line":34280},[36,45091,34312],{"class":42},[36,45093,45094],{"class":38,"line":34286},[36,45095,34318],{"class":42},[36,45097,45098],{"class":38,"line":34303},[36,45099,34324],{"class":42},[36,45101,45102],{"class":38,"line":34309},[36,45103,34330],{"class":42},[36,45105,45106,45108,45110,45112,45114,45116,45118,45120,45122],{"class":38,"line":34315},[36,45107,34336],{"class":49},[36,45109,34339],{"class":998},[36,45111,34342],{"class":49},[36,45113,34345],{"class":998},[36,45115,64],{"class":49},[36,45117,34350],{"class":416},[36,45119,54],{"class":53},[36,45121,34355],{"class":998},[36,45123,75],{"class":49},[36,45125,45126,45128,45130,45132,45134,45136,45138,45140,45142],{"class":38,"line":34321},[36,45127,34336],{"class":49},[36,45129,34339],{"class":998},[36,45131,34367],{"class":49},[36,45133,34370],{"class":998},[36,45135,64],{"class":49},[36,45137,34350],{"class":416},[36,45139,54],{"class":53},[36,45141,34379],{"class":998},[36,45143,75],{"class":49},[36,45145,45146],{"class":38,"line":34327},[36,45147,34387],{"class":42},[36,45149,45150],{"class":38,"line":34333},[36,45151,34393],{"class":49},[36,45153,45154],{"class":38,"line":34360},[36,45155,34399],{"class":42},[36,45157,45158,45160,45162],{"class":38,"line":34384},[36,45159,34405],{"class":49},[36,45161,34408],{"class":998},[36,45163,75],{"class":49},[36,45165,45166,45168,45170],{"class":38,"line":34390},[36,45167,34416],{"class":49},[36,45169,34419],{"class":998},[36,45171,75],{"class":49},[36,45173,45174],{"class":38,"line":34396},[36,45175,34427],{"class":42},[36,45177,45178,45180,45182,45184,45186,45188,45190],{"class":38,"line":34402},[36,45179,32469],{"class":49},[36,45181,61],{"class":60},[36,45183,64],{"class":49},[36,45185,181],{"class":60},[36,45187,64],{"class":49},[36,45189,181],{"class":60},[36,45191,75],{"class":49},[36,45193,45194,45196,45198,45200,45202,45204,45206,45208,45210],{"class":38,"line":34413},[36,45195,34336],{"class":49},[36,45197,34339],{"class":998},[36,45199,34454],{"class":49},[36,45201,34345],{"class":998},[36,45203,64],{"class":49},[36,45205,34350],{"class":416},[36,45207,54],{"class":53},[36,45209,34465],{"class":998},[36,45211,75],{"class":49},[36,45213,45214,45216,45218,45220,45222,45224,45226,45228,45230],{"class":38,"line":34424},[36,45215,34336],{"class":49},[36,45217,34339],{"class":998},[36,45219,34477],{"class":49},[36,45221,34370],{"class":998},[36,45223,64],{"class":49},[36,45225,34350],{"class":416},[36,45227,54],{"class":53},[36,45229,34488],{"class":998},[36,45231,75],{"class":49},[36,45233,45234],{"class":38,"line":34430},[36,45235,34496],{"class":42},[36,45237,45238],{"class":38,"line":34447},[36,45239,34393],{"class":49},[36,45241,45242,45244,45246],{"class":38,"line":34470},[36,45243,34405],{"class":49},[36,45245,34339],{"class":998},[36,45247,75],{"class":49},[36,45249,45250,45252,45254],{"class":38,"line":34493},[36,45251,34416],{"class":49},[36,45253,34518],{"class":998},[36,45255,75],{"class":49},[36,45257,45258],{"class":38,"line":34499},[36,45259,34526],{"class":49},[36,45261,45262],{"class":38,"line":34504},[36,45263,194],{"emptyLinePlaceholder":193},[36,45265,45266],{"class":38,"line":34513},[36,45267,34537],{"class":42},[36,45269,45270,45272,45274,45276,45278],{"class":38,"line":34523},[36,45271,2281],{"class":53},[36,45273,31962],{"class":60},[36,45275,3698],{"class":53},[36,45277,31967],{"class":998},[36,45279,4488],{"class":49},[36,45281,45282],{"class":38,"line":34529},[36,45283,34556],{"class":42},[36,45285,45286,45289,45291],{"class":38,"line":34534},[36,45287,45288],{"class":49},"    GoogLeNet",[36,45290,54],{"class":53},[36,45292,45293],{"class":49},"GoogLeNet(Inception)\n",[36,45295,45296,45298,45300],{"class":38,"line":34540},[36,45297,34573],{"class":49},[36,45299,54],{"class":53},[36,45301,34578],{"class":49},[36,45303,45304,45306,45308,45311,45313,45315,45317],{"class":38,"line":34553},[36,45305,34135],{"class":49},[36,45307,54],{"class":53},[36,45309,45310],{"class":49},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[36,45312,34591],{"class":416},[36,45314,54],{"class":53},[36,45316,1830],{"class":60},[36,45318,75],{"class":49},[36,45320,45321],{"class":38,"line":34559},[36,45322,34603],{"class":49},[851,45324,45325],{"start":78},[854,45326,41316],{},[26,45328,45330],{"className":28,"code":45329,"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,45331,45332,45338,45348,45358,45362,45372,45383,45387,45391,45395,45403,45419,45429,45445,45455,45469,45473,45483,45493,45503,45509,45513,45517,45525,45529,45545,45553,45557,45561,45569,45577,45581,45585,45589,45593,45599,45603,45613,45621,45629,45633,45637,45641,45649,45653,45669,45673,45677,45681,45693,45697,45709,45713,45717,45729,45733,45743,45747,45751,45763,45767,45775,45779,45783,45791,45795,45803,45807,45811,45815,45819,45823,45839,45847,45851,45855,45903,45909,45913,45923,45931,45939,45943,45947,45951,45955,45963,45967,45983,45987,45995,46003],{"__ignoreMap":31},[36,45333,45334,45336],{"class":38,"line":39},[36,45335,31135],{"class":53},[36,45337,31138],{"class":49},[36,45339,45340,45342,45344,45346],{"class":38,"line":46},[36,45341,31135],{"class":53},[36,45343,32157],{"class":49},[36,45345,32125],{"class":53},[36,45347,32162],{"class":49},[36,45349,45350,45352,45354,45356],{"class":38,"line":78},[36,45351,31479],{"class":53},[36,45353,32140],{"class":49},[36,45355,31135],{"class":53},[36,45357,32145],{"class":49},[36,45359,45360],{"class":38,"line":125},[36,45361,34664],{"class":42},[36,45363,45364,45366,45368,45370],{"class":38,"line":131},[36,45365,31479],{"class":53},[36,45367,32110],{"class":49},[36,45369,31135],{"class":53},[36,45371,32115],{"class":49},[36,45373,45374,45376,45378,45380],{"class":38,"line":396},[36,45375,31479],{"class":53},[36,45377,32656],{"class":49},[36,45379,31135],{"class":53},[36,45381,45382],{"class":49}," GoogLeNet,Inception\n",[36,45384,45385],{"class":38,"line":407},[36,45386,194],{"emptyLinePlaceholder":193},[36,45388,45389],{"class":38,"line":2061},[36,45390,194],{"emptyLinePlaceholder":193},[36,45392,45393],{"class":38,"line":2067},[36,45394,34693],{"class":42},[36,45396,45397,45399,45401],{"class":38,"line":2079},[36,45398,32689],{"class":53},[36,45400,34700],{"class":2713},[36,45402,32695],{"class":49},[36,45404,45405,45407,45409,45411,45413,45415,45417],{"class":38,"line":2362},[36,45406,34707],{"class":49},[36,45408,54],{"class":53},[36,45410,32197],{"class":49},[36,45412,32200],{"class":416},[36,45414,54],{"class":53},[36,45416,32205],{"class":998},[36,45418,32208],{"class":49},[36,45420,45421,45423,45425,45427],{"class":38,"line":2367},[36,45422,34724],{"class":416},[36,45424,54],{"class":53},[36,45426,34729],{"class":60},[36,45428,32208],{"class":49},[36,45430,45431,45433,45435,45437,45439,45441,45443],{"class":38,"line":2373},[36,45432,34736],{"class":416},[36,45434,54],{"class":53},[36,45436,32235],{"class":49},[36,45438,32238],{"class":416},[36,45440,54],{"class":53},[36,45442,36191],{"class":60},[36,45444,32246],{"class":49},[36,45446,45447,45449,45451,45453],{"class":38,"line":2378},[36,45448,34753],{"class":416},[36,45450,54],{"class":53},[36,45452,32218],{"class":60},[36,45454,75],{"class":49},[36,45456,45457,45459,45461,45463,45465,45467],{"class":38,"line":2392},[36,45458,34764],{"class":49},[36,45460,54],{"class":53},[36,45462,32276],{"class":49},[36,45464,32279],{"class":416},[36,45466,54],{"class":53},[36,45468,34775],{"class":49},[36,45470,45471],{"class":38,"line":2397},[36,45472,34780],{"class":42},[36,45474,45475,45477,45479,45481],{"class":38,"line":2403},[36,45476,34785],{"class":416},[36,45478,54],{"class":53},[36,45480,61],{"class":60},[36,45482,32208],{"class":49},[36,45484,45485,45487,45489,45491],{"class":38,"line":2424},[36,45486,34796],{"class":416},[36,45488,54],{"class":53},[36,45490,32218],{"class":60},[36,45492,32208],{"class":49},[36,45494,45495,45497,45499,45501],{"class":38,"line":2429},[36,45496,34807],{"class":416},[36,45498,54],{"class":53},[36,45500,643],{"class":60},[36,45502,75],{"class":49},[36,45504,45505,45507],{"class":38,"line":2443},[36,45506,4839],{"class":53},[36,45508,34820],{"class":49},[36,45510,45511],{"class":38,"line":2448},[36,45512,194],{"emptyLinePlaceholder":193},[36,45514,45515],{"class":38,"line":2477},[36,45516,34829],{"class":42},[36,45518,45519,45521,45523],{"class":38,"line":2482},[36,45520,32689],{"class":53},[36,45522,34836],{"class":2713},[36,45524,34839],{"class":49},[36,45526,45527],{"class":38,"line":2499},[36,45528,34844],{"class":42},[36,45530,45531,45533,45535,45537,45539,45541,45543],{"class":38,"line":2504},[36,45532,31979],{"class":49},[36,45534,54],{"class":53},[36,45536,31986],{"class":998},[36,45538,2454],{"class":53},[36,45540,31991],{"class":49},[36,45542,2451],{"class":53},[36,45544,34861],{"class":998},[36,45546,45547,45549,45551],{"class":38,"line":2509},[36,45548,32031],{"class":49},[36,45550,54],{"class":53},[36,45552,33031],{"class":49},[36,45554,45555],{"class":38,"line":2514},[36,45556,194],{"emptyLinePlaceholder":193},[36,45558,45559],{"class":38,"line":2528},[36,45560,34878],{"class":42},[36,45562,45563,45565,45567],{"class":38,"line":2533},[36,45564,34883],{"class":49},[36,45566,54],{"class":53},[36,45568,33084],{"class":60},[36,45570,45571,45573,45575],{"class":38,"line":3326},[36,45572,34892],{"class":49},[36,45574,54],{"class":53},[36,45576,3834],{"class":60},[36,45578,45579],{"class":38,"line":3340},[36,45580,194],{"emptyLinePlaceholder":193},[36,45582,45583],{"class":38,"line":3348},[36,45584,34905],{"class":42},[36,45586,45587],{"class":38,"line":3353},[36,45588,34910],{"class":42},[36,45590,45591],{"class":38,"line":3359},[36,45592,34915],{"class":42},[36,45594,45595,45597],{"class":38,"line":3365},[36,45596,34920],{"class":53},[36,45598,33626],{"class":49},[36,45600,45601],{"class":38,"line":3370},[36,45602,34927],{"class":42},[36,45604,45605,45607,45609,45611],{"class":38,"line":8695},[36,45606,4152],{"class":53},[36,45608,34934],{"class":49},[36,45610,26788],{"class":53},[36,45612,34939],{"class":49},[36,45614,45615,45617,45619],{"class":38,"line":8719},[36,45616,34944],{"class":49},[36,45618,54],{"class":53},[36,45620,34949],{"class":49},[36,45622,45623,45625,45627],{"class":38,"line":8724},[36,45624,34954],{"class":49},[36,45626,54],{"class":53},[36,45628,34959],{"class":49},[36,45630,45631],{"class":38,"line":8730},[36,45632,34964],{"class":42},[36,45634,45635],{"class":38,"line":8757},[36,45636,33617],{"class":49},[36,45638,45639],{"class":38,"line":8762},[36,45640,34973],{"class":42},[36,45642,45643,45645,45647],{"class":38,"line":8768},[36,45644,33402],{"class":49},[36,45646,54],{"class":53},[36,45648,34982],{"class":49},[36,45650,45651],{"class":38,"line":8780},[36,45652,34987],{"class":42},[36,45654,45655,45657,45659,45661,45663,45665,45667],{"class":38,"line":8792},[36,45656,33419],{"class":49},[36,45658,54],{"class":53},[36,45660,33424],{"class":49},[36,45662,33427],{"class":416},[36,45664,54],{"class":53},[36,45666,61],{"class":60},[36,45668,75],{"class":49},[36,45670,45671],{"class":38,"line":8804},[36,45672,35008],{"class":42},[36,45674,45675],{"class":38,"line":10463},[36,45676,35013],{"class":42},[36,45678,45679],{"class":38,"line":10488},[36,45680,35018],{"class":42},[36,45682,45683,45685,45687,45689,45691],{"class":38,"line":10511},[36,45684,35023],{"class":49},[36,45686,10224],{"class":53},[36,45688,33529],{"class":49},[36,45690,3698],{"class":53},[36,45692,35032],{"class":49},[36,45694,45695],{"class":38,"line":10535},[36,45696,35037],{"class":42},[36,45698,45699,45701,45703,45705,45707],{"class":38,"line":10540},[36,45700,35042],{"class":49},[36,45702,10224],{"class":53},[36,45704,35047],{"class":49},[36,45706,643],{"class":60},[36,45708,75],{"class":49},[36,45710,45711],{"class":38,"line":10545},[36,45712,194],{"emptyLinePlaceholder":193},[36,45714,45715],{"class":38,"line":10550},[36,45716,35060],{"class":42},[36,45718,45719,45721,45723,45725,45727],{"class":38,"line":10559},[36,45720,35065],{"class":49},[36,45722,54],{"class":53},[36,45724,35070],{"class":49},[36,45726,1466],{"class":53},[36,45728,35075],{"class":49},[36,45730,45731],{"class":38,"line":10564},[36,45732,35080],{"class":42},[36,45734,45735,45737,45739,45741],{"class":38,"line":10570},[36,45736,33193],{"class":60},[36,45738,901],{"class":49},[36,45740,35089],{"class":998},[36,45742,35092],{"class":49},[36,45744,45745],{"class":38,"line":10591},[36,45746,194],{"emptyLinePlaceholder":193},[36,45748,45749],{"class":38,"line":10597},[36,45750,35101],{"class":42},[36,45752,45753,45755,45757,45759,45761],{"class":38,"line":10611},[36,45754,2281],{"class":53},[36,45756,31962],{"class":60},[36,45758,3698],{"class":53},[36,45760,31967],{"class":998},[36,45762,4488],{"class":49},[36,45764,45765],{"class":38,"line":10617},[36,45766,35118],{"class":42},[36,45768,45769,45771,45773],{"class":38,"line":10644},[36,45770,32031],{"class":49},[36,45772,54],{"class":53},[36,45774,45293],{"class":49},[36,45776,45777],{"class":38,"line":10653},[36,45778,35131],{"class":42},[36,45780,45781],{"class":38,"line":10659},[36,45782,35136],{"class":42},[36,45784,45785,45787,45789],{"class":38,"line":10667},[36,45786,35141],{"class":49},[36,45788,35144],{"class":998},[36,45790,31239],{"class":49},[36,45792,45793],{"class":38,"line":10672},[36,45794,35151],{"class":42},[36,45796,45797,45799,45801],{"class":38,"line":17348},[36,45798,34764],{"class":49},[36,45800,54],{"class":53},[36,45802,35160],{"class":49},[36,45804,45805],{"class":38,"line":17354},[36,45806,35165],{"class":42},[36,45808,45809],{"class":38,"line":17377},[36,45810,35170],{"class":49},[36,45812,45813],{"class":38,"line":17383},[36,45814,194],{"emptyLinePlaceholder":193},[36,45816,45817],{"class":38,"line":17406},[36,45818,35179],{"class":42},[36,45820,45821],{"class":38,"line":17420},[36,45822,35184],{"class":42},[36,45824,45825,45827,45829,45831,45833,45835,45837],{"class":38,"line":17440},[36,45826,31979],{"class":49},[36,45828,54],{"class":53},[36,45830,31986],{"class":998},[36,45832,2454],{"class":53},[36,45834,31991],{"class":49},[36,45836,2451],{"class":53},[36,45838,34861],{"class":998},[36,45840,45841,45843,45845],{"class":38,"line":17446},[36,45842,32031],{"class":49},[36,45844,54],{"class":53},[36,45846,33031],{"class":49},[36,45848,45849],{"class":38,"line":17457},[36,45850,35213],{"class":42},[36,45852,45853],{"class":38,"line":17480},[36,45854,35218],{"class":42},[36,45856,45857,45859,45861,45863,45865,45867,45869,45871,45873,45875,45877,45879,45881,45883,45885,45887,45889,45891,45893,45895,45897,45899,45901],{"class":38,"line":17502},[36,45858,35223],{"class":49},[36,45860,54],{"class":53},[36,45862,1769],{"class":49},[36,45864,35230],{"class":998},[36,45866,64],{"class":49},[36,45868,35235],{"class":998},[36,45870,64],{"class":49},[36,45872,35240],{"class":998},[36,45874,64],{"class":49},[36,45876,35245],{"class":998},[36,45878,64],{"class":49},[36,45880,35250],{"class":998},[36,45882,64],{"class":49},[36,45884,35255],{"class":998},[36,45886,64],{"class":49},[36,45888,35260],{"class":998},[36,45890,64],{"class":49},[36,45892,35265],{"class":998},[36,45894,64],{"class":49},[36,45896,35270],{"class":998},[36,45898,64],{"class":49},[36,45900,35275],{"class":998},[36,45902,33988],{"class":49},[36,45904,45905,45907],{"class":38,"line":17507},[36,45906,34920],{"class":53},[36,45908,33626],{"class":49},[36,45910,45911],{"class":38,"line":17513},[36,45912,35288],{"class":42},[36,45914,45915,45917,45919,45921],{"class":38,"line":17527},[36,45916,4152],{"class":53},[36,45918,35295],{"class":49},[36,45920,26788],{"class":53},[36,45922,34939],{"class":49},[36,45924,45925,45927,45929],{"class":38,"line":17540},[36,45926,33352],{"class":49},[36,45928,54],{"class":53},[36,45930,33357],{"class":49},[36,45932,45933,45935,45937],{"class":38,"line":17545},[36,45934,33367],{"class":49},[36,45936,54],{"class":53},[36,45938,33372],{"class":49},[36,45940,45941],{"class":38,"line":17559},[36,45942,194],{"emptyLinePlaceholder":193},[36,45944,45945],{"class":38,"line":17564},[36,45946,35324],{"class":42},[36,45948,45949],{"class":38,"line":17570},[36,45950,33617],{"class":49},[36,45952,45953],{"class":38,"line":17575},[36,45954,35333],{"class":42},[36,45956,45957,45959,45961],{"class":38,"line":17589},[36,45958,33402],{"class":49},[36,45960,54],{"class":53},[36,45962,33407],{"class":49},[36,45964,45965],{"class":38,"line":17594},[36,45966,35346],{"class":42},[36,45968,45969,45971,45973,45975,45977,45979,45981],{"class":38,"line":17599},[36,45970,33419],{"class":49},[36,45972,54],{"class":53},[36,45974,33424],{"class":49},[36,45976,33427],{"class":416},[36,45978,54],{"class":53},[36,45980,61],{"class":60},[36,45982,75],{"class":49},[36,45984,45985],{"class":38,"line":17613},[36,45986,35367],{"class":42},[36,45988,45989,45991,45993],{"class":38,"line":17625},[36,45990,35372],{"class":49},[36,45992,54],{"class":53},[36,45994,35377],{"class":49},[36,45996,45997,45999,46001],{"class":38,"line":17630},[36,45998,35382],{"class":49},[36,46000,54],{"class":53},[36,46002,35387],{"class":49},[36,46004,46005,46007,46009,46011,46013,46015,46017,46019],{"class":38,"line":17643},[36,46006,35392],{"class":60},[36,46008,901],{"class":49},[36,46010,35397],{"class":998},[36,46012,35400],{"class":49},[36,46014,35403],{"class":998},[36,46016,64],{"class":49},[36,46018,35408],{"class":998},[36,46020,35411],{"class":49},[868,46022,46024],{"id":46023},"_24训练自己的数据集","2.4.训练自己的数据集",[14,46026,46027],{},"猫狗分类任务",[14,46029,46030],{},"划分数据集和验证集",[26,46032,46034],{"className":28,"code":46033,"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,46035,46036,46041,46048,46053,46064,46071,46075,46085,46099,46108,46112,46117,46127,46147,46151,46156,46166,46177,46190,46194,46199,46208,46218,46229,46233,46238,46248,46252,46257,46262,46267,46272,46277,46281,46291,46318,46331,46343,46370,46375,46380,46394,46399,46411,46426,46441,46449,46453,46458,46464,46476,46489,46494,46499,46504,46554,46560,46564],{"__ignoreMap":31},[36,46037,46038],{"class":38,"line":39},[36,46039,46040],{"class":42},"# 创建脚本，用于划分数据集和验证集\n",[36,46042,46043,46045],{"class":38,"line":46},[36,46044,31135],{"class":53},[36,46046,46047],{"class":49}," os\n",[36,46049,46050],{"class":38,"line":78},[36,46051,46052],{"class":42},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[36,46054,46055,46057,46060,46062],{"class":38,"line":125},[36,46056,31479],{"class":53},[36,46058,46059],{"class":49}," shutil ",[36,46061,31135],{"class":53},[36,46063,32564],{"class":49},[36,46065,46066,46068],{"class":38,"line":131},[36,46067,31135],{"class":53},[36,46069,46070],{"class":49}," random\n",[36,46072,46073],{"class":38,"line":396},[36,46074,194],{"emptyLinePlaceholder":193},[36,46076,46077,46079,46082],{"class":38,"line":407},[36,46078,32689],{"class":53},[36,46080,46081],{"class":2713}," mkfile",[36,46083,46084],{"class":49},"(file):\n",[36,46086,46087,46089,46091,46094,46097],{"class":38,"line":2061},[36,46088,3850],{"class":53},[36,46090,39672],{"class":53},[36,46092,46093],{"class":49}," os.path.exists(",[36,46095,46096],{"class":416},"file",[36,46098,31528],{"class":49},[36,46100,46101,46104,46106],{"class":38,"line":2067},[36,46102,46103],{"class":49},"        os.makedirs(",[36,46105,46096],{"class":416},[36,46107,75],{"class":49},[36,46109,46110],{"class":38,"line":2079},[36,46111,194],{"emptyLinePlaceholder":193},[36,46113,46114],{"class":38,"line":2362},[36,46115,46116],{"class":42},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[36,46118,46119,46122,46124],{"class":38,"line":2367},[36,46120,46121],{"class":49},"file_path",[36,46123,54],{"class":53},[36,46125,46126],{"class":998},"'data_cat_dog'\n",[36,46128,46129,46132,46134,46137,46139,46142,46144],{"class":38,"line":2373},[36,46130,46131],{"class":49},"flower_class",[36,46133,54],{"class":53},[36,46135,46136],{"class":49},"[cla ",[36,46138,3774],{"class":53},[36,46140,46141],{"class":49}," cla ",[36,46143,26788],{"class":53},[36,46145,46146],{"class":49}," os.listdir(file_path)]\n",[36,46148,46149],{"class":38,"line":2378},[36,46150,194],{"emptyLinePlaceholder":193},[36,46152,46153],{"class":38,"line":2392},[36,46154,46155],{"class":42},"# 创建训练集train文件夹\n",[36,46157,46158,46161,46164],{"class":38,"line":2397},[36,46159,46160],{"class":49},"mkfile(",[36,46162,46163],{"class":998},"'data\u002Ftrain'",[36,46165,75],{"class":49},[36,46167,46168,46170,46172,46174],{"class":38,"line":2403},[36,46169,3774],{"class":53},[36,46171,46141],{"class":49},[36,46173,26788],{"class":53},[36,46175,46176],{"class":49}," flower_class:\n",[36,46178,46179,46182,46185,46187],{"class":38,"line":2424},[36,46180,46181],{"class":49},"    mkfile(",[36,46183,46184],{"class":998},"'data\u002Ftrain\u002F'",[36,46186,1365],{"class":53},[36,46188,46189],{"class":49},"cla)\n",[36,46191,46192],{"class":38,"line":2429},[36,46193,194],{"emptyLinePlaceholder":193},[36,46195,46196],{"class":38,"line":2443},[36,46197,46198],{"class":42},"# 创建验证集val文件夹\n",[36,46200,46201,46203,46206],{"class":38,"line":2448},[36,46202,46160],{"class":49},[36,46204,46205],{"class":998},"'data\u002Ftest'",[36,46207,75],{"class":49},[36,46209,46210,46212,46214,46216],{"class":38,"line":2477},[36,46211,3774],{"class":53},[36,46213,46141],{"class":49},[36,46215,26788],{"class":53},[36,46217,46176],{"class":49},[36,46219,46220,46222,46225,46227],{"class":38,"line":2482},[36,46221,46181],{"class":49},[36,46223,46224],{"class":998},"'data\u002Ftest\u002F'",[36,46226,1365],{"class":53},[36,46228,46189],{"class":49},[36,46230,46231],{"class":38,"line":2499},[36,46232,194],{"emptyLinePlaceholder":193},[36,46234,46235],{"class":38,"line":2504},[36,46236,46237],{"class":42},"# 划分比例，训练集：测试集=9：1\n",[36,46239,46240,46243,46245],{"class":38,"line":2509},[36,46241,46242],{"class":49},"split_rate",[36,46244,54],{"class":53},[36,46246,46247],{"class":60},"0.1\n",[36,46249,46250],{"class":38,"line":2514},[36,46251,194],{"emptyLinePlaceholder":193},[36,46253,46254],{"class":38,"line":2528},[36,46255,46256],{"class":42},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[36,46258,46259],{"class":38,"line":2533},[36,46260,46261],{"class":42},"# cla_path：当前类别的原始图片路径\n",[36,46263,46264],{"class":38,"line":3326},[36,46265,46266],{"class":42},"# images：当前类别下所有图片的文件名列表\n",[36,46268,46269],{"class":38,"line":3340},[36,46270,46271],{"class":42},"# num：该类别图片总数\n",[36,46273,46274],{"class":38,"line":3348},[36,46275,46276],{"class":42},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[36,46278,46279],{"class":38,"line":3353},[36,46280,194],{"emptyLinePlaceholder":193},[36,46282,46283,46285,46287,46289],{"class":38,"line":3359},[36,46284,3774],{"class":53},[36,46286,46141],{"class":49},[36,46288,26788],{"class":53},[36,46290,46176],{"class":49},[36,46292,46293,46296,46298,46301,46303,46306,46309,46311,46313,46315],{"class":38,"line":3365},[36,46294,46295],{"class":49},"    cla_path ",[36,46297,54],{"class":53},[36,46299,46300],{"class":49}," file_path ",[36,46302,1365],{"class":53},[36,46304,46305],{"class":998}," '\u002F'",[36,46307,46308],{"class":53}," +",[36,46310,46141],{"class":49},[36,46312,1365],{"class":53},[36,46314,46305],{"class":998},[36,46316,46317],{"class":42},"  # 某一类别的子目录\n",[36,46319,46320,46323,46325,46328],{"class":38,"line":3370},[36,46321,46322],{"class":49},"    images ",[36,46324,54],{"class":53},[36,46326,46327],{"class":49}," os.listdir(cla_path)  ",[36,46329,46330],{"class":42},"# iamges 列表存储了该目录下所有图像的名称\n",[36,46332,46333,46336,46338,46340],{"class":38,"line":8695},[36,46334,46335],{"class":49},"    num ",[36,46337,54],{"class":53},[36,46339,8078],{"class":60},[36,46341,46342],{"class":49},"(images)\n",[36,46344,46345,46348,46350,46353,46355,46357,46359,46362,46364,46367],{"class":38,"line":8719},[36,46346,46347],{"class":49},"    eval_index ",[36,46349,54],{"class":53},[36,46351,46352],{"class":49}," random.sample(images, ",[36,46354,1377],{"class":416},[36,46356,54],{"class":53},[36,46358,904],{"class":60},[36,46360,46361],{"class":49},"(num ",[36,46363,1339],{"class":53},[36,46365,46366],{"class":49}," split_rate))  ",[36,46368,46369],{"class":42},"# 从images列表中随机抽取 k 个图像名称\n",[36,46371,46372],{"class":38,"line":8724},[36,46373,46374],{"class":42},"    # 遍历该类别下的所有图片\n",[36,46376,46377],{"class":38,"line":8730},[36,46378,46379],{"class":42},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[36,46381,46382,46384,46387,46389,46391],{"class":38,"line":8757},[36,46383,3950],{"class":53},[36,46385,46386],{"class":49}," index, image ",[36,46388,26788],{"class":53},[36,46390,32348],{"class":60},[36,46392,46393],{"class":49},"(images):\n",[36,46395,46396],{"class":38,"line":8762},[36,46397,46398],{"class":42},"        # eval_index 中保存验证集val的图像名称\n",[36,46400,46401,46403,46406,46408],{"class":38,"line":8768},[36,46402,3246],{"class":53},[36,46404,46405],{"class":49}," image ",[36,46407,26788],{"class":53},[36,46409,46410],{"class":49}," eval_index:\n",[36,46412,46413,46416,46418,46421,46423],{"class":38,"line":8780},[36,46414,46415],{"class":49},"            image_path ",[36,46417,54],{"class":53},[36,46419,46420],{"class":49}," cla_path ",[36,46422,1365],{"class":53},[36,46424,46425],{"class":49}," image\n",[36,46427,46428,46431,46433,46436,46438],{"class":38,"line":8792},[36,46429,46430],{"class":49},"            new_path ",[36,46432,54],{"class":53},[36,46434,46435],{"class":998}," 'data\u002Ftest\u002F'",[36,46437,46308],{"class":53},[36,46439,46440],{"class":49}," cla\n",[36,46442,46443,46446],{"class":38,"line":8804},[36,46444,46445],{"class":49},"            copy(image_path, new_path)  ",[36,46447,46448],{"class":42},"# 将选中的图像复制到新路径\n",[36,46450,46451],{"class":38,"line":10463},[36,46452,194],{"emptyLinePlaceholder":193},[36,46454,46455],{"class":38,"line":10488},[36,46456,46457],{"class":42},"        # 其余的图像保存在训练集train中\n",[36,46459,46460,46462],{"class":38,"line":10511},[36,46461,3283],{"class":53},[36,46463,4488],{"class":49},[36,46465,46466,46468,46470,46472,46474],{"class":38,"line":10535},[36,46467,46415],{"class":49},[36,46469,54],{"class":53},[36,46471,46420],{"class":49},[36,46473,1365],{"class":53},[36,46475,46425],{"class":49},[36,46477,46478,46480,46482,46485,46487],{"class":38,"line":10540},[36,46479,46430],{"class":49},[36,46481,54],{"class":53},[36,46483,46484],{"class":998}," 'data\u002Ftrain\u002F'",[36,46486,46308],{"class":53},[36,46488,46440],{"class":49},[36,46490,46491],{"class":38,"line":10545},[36,46492,46493],{"class":49},"            copy(image_path, new_path)\n",[36,46495,46496],{"class":38,"line":10550},[36,46497,46498],{"class":42},"            # 打印进度条信息\n",[36,46500,46501],{"class":38,"line":10559},[36,46502,46503],{"class":42},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[36,46505,46506,46508,46510,46512,46515,46517,46519,46522,46524,46526,46528,46531,46534,46536,46538,46541,46544,46546,46548,46551],{"class":38,"line":10564},[36,46507,33193],{"class":60},[36,46509,901],{"class":49},[36,46511,1141],{"class":998},[36,46513,46514],{"class":60},"\\r",[36,46516,1769],{"class":998},[36,46518,33201],{"class":60},[36,46520,46521],{"class":998},"] processing [",[36,46523,33201],{"class":60},[36,46525,1466],{"class":998},[36,46527,33201],{"class":60},[36,46529,46530],{"class":998},"]\"",[36,46532,46533],{"class":49},".format(cla, index ",[36,46535,1365],{"class":53},[36,46537,25863],{"class":60},[36,46539,46540],{"class":49},", num), ",[36,46542,46543],{"class":416},"end",[36,46545,54],{"class":53},[36,46547,8399],{"class":998},[36,46549,46550],{"class":49},")  ",[36,46552,46553],{"class":42},"# processing bar\n",[36,46555,46556,46558],{"class":38,"line":10570},[36,46557,32041],{"class":60},[36,46559,2726],{"class":49},[36,46561,46562],{"class":38,"line":10591},[36,46563,194],{"emptyLinePlaceholder":193},[36,46565,46566,46568,46570,46573],{"class":38,"line":10597},[36,46567,199],{"class":60},[36,46569,901],{"class":49},[36,46571,46572],{"class":998},"\"processing done!\"",[36,46574,75],{"class":49},[14,46576,46577],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22742,46579,46581],{"id":46580},"_242模型代码","2.4.2.模型代码",[14,46583,46584],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[26,46586,46588],{"className":28,"code":46587,"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,46589,46590,46596,46606,46616,46620,46636,46644,46658,46668,46672,46702,46706,46740,46786,46790,46824,46870,46874,46878,46912,46942,46946,46954,46968,46990,47012,47030,47034,47048,47052,47056,47072,47076,47084,47098,47108,47152,47156,47184,47188,47198,47226,47230,47266,47270,47298,47302,47312,47344,47376,47404,47408,47418,47450,47482,47514,47546,47578,47606,47610,47620,47652,47684,47696,47700,47712,47716,47720,47732,47740,47760,47764,47768,47772,47776,47780,47784,47798,47806,47814,47826,47840,47848,47852,47860,47870,47880,47890,47900,47910,47916,47920,47924,47936,47956,47964],{"__ignoreMap":31},[36,46591,46592,46594],{"class":38,"line":39},[36,46593,31135],{"class":53},[36,46595,31138],{"class":49},[36,46597,46598,46600,46602,46604],{"class":38,"line":46},[36,46599,31479],{"class":53},[36,46601,31482],{"class":49},[36,46603,31135],{"class":53},[36,46605,31487],{"class":49},[36,46607,46608,46610,46612,46614],{"class":38,"line":78},[36,46609,31479],{"class":53},[36,46611,31499],{"class":49},[36,46613,31135],{"class":53},[36,46615,31504],{"class":49},[36,46617,46618],{"class":38,"line":125},[36,46619,194],{"emptyLinePlaceholder":193},[36,46621,46622,46624,46626,46628,46630,46632,46634],{"class":38,"line":131},[36,46623,15438],{"class":53},[36,46625,42235],{"class":2713},[36,46627,901],{"class":49},[36,46629,31520],{"class":2713},[36,46631,1440],{"class":49},[36,46633,31525],{"class":2713},[36,46635,31528],{"class":49},[36,46637,46638,46640,46642],{"class":38,"line":396},[36,46639,31543],{"class":53},[36,46641,31546],{"class":60},[36,46643,42254],{"class":49},[36,46645,46646,46648,46650,46652,46654,46656],{"class":38,"line":407},[36,46647,31559],{"class":60},[36,46649,42261],{"class":49},[36,46651,31565],{"class":60},[36,46653,31568],{"class":49},[36,46655,31571],{"class":60},[36,46657,2726],{"class":49},[36,46659,46660,46662,46664,46666],{"class":38,"line":2061},[36,46661,31587],{"class":60},[36,46663,35513],{"class":49},[36,46665,54],{"class":53},[36,46667,35518],{"class":49},[36,46669,46670],{"class":38,"line":2067},[36,46671,42284],{"class":42},[36,46673,46674,46676,46678,46680,46682,46684,46686,46688,46690,46692,46694,46696,46698,46700],{"class":38,"line":2079},[36,46675,31587],{"class":60},[36,46677,42291],{"class":49},[36,46679,54],{"class":53},[36,46681,31595],{"class":49},[36,46683,31598],{"class":416},[36,46685,54],{"class":53},[36,46687,42302],{"class":49},[36,46689,31607],{"class":416},[36,46691,54],{"class":53},[36,46693,42309],{"class":49},[36,46695,31616],{"class":416},[36,46697,54],{"class":53},[36,46699,61],{"class":60},[36,46701,75],{"class":49},[36,46703,46704],{"class":38,"line":2362},[36,46705,42322],{"class":42},[36,46707,46708,46710,46712,46714,46716,46718,46720,46722,46724,46726,46728,46730,46732,46734,46736,46738],{"class":38,"line":2367},[36,46709,31587],{"class":60},[36,46711,42329],{"class":49},[36,46713,54],{"class":53},[36,46715,31595],{"class":49},[36,46717,31598],{"class":416},[36,46719,54],{"class":53},[36,46721,42302],{"class":49},[36,46723,31607],{"class":416},[36,46725,54],{"class":53},[36,46727,42346],{"class":49},[36,46729,643],{"class":60},[36,46731,42351],{"class":49},[36,46733,31616],{"class":416},[36,46735,54],{"class":53},[36,46737,61],{"class":60},[36,46739,75],{"class":49},[36,46741,46742,46744,46746,46748,46750,46752,46754,46756,46758,46760,46762,46764,46766,46768,46770,46772,46774,46776,46778,46780,46782,46784],{"class":38,"line":2373},[36,46743,31587],{"class":60},[36,46745,42366],{"class":49},[36,46747,54],{"class":53},[36,46749,31595],{"class":49},[36,46751,31598],{"class":416},[36,46753,54],{"class":53},[36,46755,42346],{"class":49},[36,46757,643],{"class":60},[36,46759,42351],{"class":49},[36,46761,31607],{"class":416},[36,46763,54],{"class":53},[36,46765,42346],{"class":49},[36,46767,61],{"class":60},[36,46769,42351],{"class":49},[36,46771,31616],{"class":416},[36,46773,54],{"class":53},[36,46775,162],{"class":60},[36,46777,64],{"class":49},[36,46779,31625],{"class":416},[36,46781,54],{"class":53},[36,46783,61],{"class":60},[36,46785,75],{"class":49},[36,46787,46788],{"class":38,"line":2378},[36,46789,42411],{"class":42},[36,46791,46792,46794,46796,46798,46800,46802,46804,46806,46808,46810,46812,46814,46816,46818,46820,46822],{"class":38,"line":2392},[36,46793,31587],{"class":60},[36,46795,42418],{"class":49},[36,46797,54],{"class":53},[36,46799,31595],{"class":49},[36,46801,31598],{"class":416},[36,46803,54],{"class":53},[36,46805,42302],{"class":49},[36,46807,31607],{"class":416},[36,46809,54],{"class":53},[36,46811,42435],{"class":49},[36,46813,643],{"class":60},[36,46815,42351],{"class":49},[36,46817,31616],{"class":416},[36,46819,54],{"class":53},[36,46821,61],{"class":60},[36,46823,75],{"class":49},[36,46825,46826,46828,46830,46832,46834,46836,46838,46840,46842,46844,46846,46848,46850,46852,46854,46856,46858,46860,46862,46864,46866,46868],{"class":38,"line":2397},[36,46827,31587],{"class":60},[36,46829,42454],{"class":49},[36,46831,54],{"class":53},[36,46833,31595],{"class":49},[36,46835,31598],{"class":416},[36,46837,54],{"class":53},[36,46839,42435],{"class":49},[36,46841,643],{"class":60},[36,46843,42351],{"class":49},[36,46845,31607],{"class":416},[36,46847,54],{"class":53},[36,46849,42435],{"class":49},[36,46851,61],{"class":60},[36,46853,42351],{"class":49},[36,46855,31616],{"class":416},[36,46857,54],{"class":53},[36,46859,157],{"class":60},[36,46861,64],{"class":49},[36,46863,31625],{"class":416},[36,46865,54],{"class":53},[36,46867,181],{"class":60},[36,46869,75],{"class":49},[36,46871,46872],{"class":38,"line":2403},[36,46873,42499],{"class":42},[36,46875,46876],{"class":38,"line":2424},[36,46877,42504],{"class":42},[36,46879,46880,46882,46884,46886,46888,46890,46892,46894,46896,46898,46900,46902,46904,46906,46908,46910],{"class":38,"line":2429},[36,46881,31587],{"class":60},[36,46883,42511],{"class":49},[36,46885,54],{"class":53},[36,46887,35571],{"class":49},[36,46889,31616],{"class":416},[36,46891,54],{"class":53},[36,46893,162],{"class":60},[36,46895,64],{"class":49},[36,46897,31671],{"class":416},[36,46899,54],{"class":53},[36,46901,61],{"class":60},[36,46903,64],{"class":49},[36,46905,31625],{"class":416},[36,46907,54],{"class":53},[36,46909,61],{"class":60},[36,46911,75],{"class":49},[36,46913,46914,46916,46918,46920,46922,46924,46926,46928,46930,46932,46934,46936,46938,46940],{"class":38,"line":2443},[36,46915,31587],{"class":60},[36,46917,42546],{"class":49},[36,46919,54],{"class":53},[36,46921,31595],{"class":49},[36,46923,31598],{"class":416},[36,46925,54],{"class":53},[36,46927,42302],{"class":49},[36,46929,31607],{"class":416},[36,46931,54],{"class":53},[36,46933,42563],{"class":49},[36,46935,31616],{"class":416},[36,46937,54],{"class":53},[36,46939,61],{"class":60},[36,46941,75],{"class":49},[36,46943,46944],{"class":38,"line":2448},[36,46945,194],{"emptyLinePlaceholder":193},[36,46947,46948,46950,46952],{"class":38,"line":2477},[36,46949,31543],{"class":53},[36,46951,31835],{"class":2713},[36,46953,31838],{"class":49},[36,46955,46956,46958,46960,46962,46964,46966],{"class":38,"line":2482},[36,46957,42588],{"class":49},[36,46959,54],{"class":53},[36,46961,31565],{"class":60},[36,46963,35926],{"class":49},[36,46965,31565],{"class":60},[36,46967,42599],{"class":49},[36,46969,46970,46972,46974,46976,46978,46980,46982,46984,46986,46988],{"class":38,"line":2499},[36,46971,7832],{"class":49},[36,46973,54],{"class":53},[36,46975,31565],{"class":60},[36,46977,35926],{"class":49},[36,46979,31565],{"class":60},[36,46981,42614],{"class":49},[36,46983,31565],{"class":60},[36,46985,35926],{"class":49},[36,46987,31565],{"class":60},[36,46989,42623],{"class":49},[36,46991,46992,46994,46996,46998,47000,47002,47004,47006,47008,47010],{"class":38,"line":2504},[36,46993,42628],{"class":49},[36,46995,54],{"class":53},[36,46997,31565],{"class":60},[36,46999,35926],{"class":49},[36,47001,31565],{"class":60},[36,47003,42639],{"class":49},[36,47005,31565],{"class":60},[36,47007,35926],{"class":49},[36,47009,31565],{"class":60},[36,47011,42648],{"class":49},[36,47013,47014,47016,47018,47020,47022,47024,47026,47028],{"class":38,"line":2509},[36,47015,42653],{"class":49},[36,47017,54],{"class":53},[36,47019,31565],{"class":60},[36,47021,35926],{"class":49},[36,47023,31565],{"class":60},[36,47025,42664],{"class":49},[36,47027,31565],{"class":60},[36,47029,42669],{"class":49},[36,47031,47032],{"class":38,"line":2514},[36,47033,42674],{"class":42},[36,47035,47036,47038,47040,47042,47044,47046],{"class":38,"line":2528},[36,47037,15496],{"class":53},[36,47039,42681],{"class":49},[36,47041,33427],{"class":416},[36,47043,54],{"class":53},[36,47045,61],{"class":60},[36,47047,75],{"class":49},[36,47049,47050],{"class":38,"line":2533},[36,47051,194],{"emptyLinePlaceholder":193},[36,47053,47054],{"class":38,"line":3326},[36,47055,42702],{"class":42},[36,47057,47058,47060,47062,47064,47066,47068,47070],{"class":38,"line":3340},[36,47059,15438],{"class":53},[36,47061,42709],{"class":2713},[36,47063,901],{"class":49},[36,47065,31520],{"class":2713},[36,47067,1440],{"class":49},[36,47069,31525],{"class":2713},[36,47071,31528],{"class":49},[36,47073,47074],{"class":38,"line":3348},[36,47075,42724],{"class":42},[36,47077,47078,47080,47082],{"class":38,"line":3353},[36,47079,31543],{"class":53},[36,47081,31546],{"class":60},[36,47083,42733],{"class":49},[36,47085,47086,47088,47090,47092,47094,47096],{"class":38,"line":3359},[36,47087,31559],{"class":60},[36,47089,42740],{"class":49},[36,47091,31565],{"class":60},[36,47093,31568],{"class":49},[36,47095,31571],{"class":60},[36,47097,2726],{"class":49},[36,47099,47100,47102,47104,47106],{"class":38,"line":3365},[36,47101,31587],{"class":60},[36,47103,42755],{"class":49},[36,47105,54],{"class":53},[36,47107,38751],{"class":49},[36,47109,47110,47112,47114,47116,47118,47120,47122,47124,47126,47128,47130,47132,47134,47136,47138,47140,47142,47144,47146,47148,47150],{"class":38,"line":3370},[36,47111,38756],{"class":49},[36,47113,31598],{"class":416},[36,47115,54],{"class":53},[36,47117,162],{"class":60},[36,47119,64],{"class":49},[36,47121,31607],{"class":416},[36,47123,54],{"class":53},[36,47125,1095],{"class":60},[36,47127,64],{"class":49},[36,47129,31616],{"class":416},[36,47131,54],{"class":53},[36,47133,1255],{"class":60},[36,47135,64],{"class":49},[36,47137,31671],{"class":416},[36,47139,54],{"class":53},[36,47141,181],{"class":60},[36,47143,64],{"class":49},[36,47145,31625],{"class":416},[36,47147,54],{"class":53},[36,47149,162],{"class":60},[36,47151,38789],{"class":49},[36,47153,47154],{"class":38,"line":8695},[36,47155,38794],{"class":49},[36,47157,47158,47160,47162,47164,47166,47168,47170,47172,47174,47176,47178,47180,47182],{"class":38,"line":8719},[36,47159,38839],{"class":49},[36,47161,31616],{"class":416},[36,47163,54],{"class":53},[36,47165,162],{"class":60},[36,47167,64],{"class":49},[36,47169,31671],{"class":416},[36,47171,54],{"class":53},[36,47173,181],{"class":60},[36,47175,64],{"class":49},[36,47177,31625],{"class":416},[36,47179,54],{"class":53},[36,47181,61],{"class":60},[36,47183,75],{"class":49},[36,47185,47186],{"class":38,"line":8724},[36,47187,38868],{"class":49},[36,47189,47190,47192,47194,47196],{"class":38,"line":8730},[36,47191,31587],{"class":60},[36,47193,42846],{"class":49},[36,47195,54],{"class":53},[36,47197,38751],{"class":49},[36,47199,47200,47202,47204,47206,47208,47210,47212,47214,47216,47218,47220,47222,47224],{"class":38,"line":8757},[36,47201,38756],{"class":49},[36,47203,31598],{"class":416},[36,47205,54],{"class":53},[36,47207,1095],{"class":60},[36,47209,64],{"class":49},[36,47211,31607],{"class":416},[36,47213,54],{"class":53},[36,47215,1095],{"class":60},[36,47217,64],{"class":49},[36,47219,31616],{"class":416},[36,47221,54],{"class":53},[36,47223,61],{"class":60},[36,47225,38789],{"class":49},[36,47227,47228],{"class":38,"line":8762},[36,47229,38794],{"class":49},[36,47231,47232,47234,47236,47238,47240,47242,47244,47246,47248,47250,47252,47254,47256,47258,47260,47262,47264],{"class":38,"line":8768},[36,47233,38756],{"class":49},[36,47235,31598],{"class":416},[36,47237,54],{"class":53},[36,47239,1095],{"class":60},[36,47241,64],{"class":49},[36,47243,31607],{"class":416},[36,47245,54],{"class":53},[36,47247,42901],{"class":60},[36,47249,64],{"class":49},[36,47251,31616],{"class":416},[36,47253,54],{"class":53},[36,47255,162],{"class":60},[36,47257,64],{"class":49},[36,47259,31625],{"class":416},[36,47261,54],{"class":53},[36,47263,61],{"class":60},[36,47265,38789],{"class":49},[36,47267,47268],{"class":38,"line":8780},[36,47269,38794],{"class":49},[36,47271,47272,47274,47276,47278,47280,47282,47284,47286,47288,47290,47292,47294,47296],{"class":38,"line":8792},[36,47273,38839],{"class":49},[36,47275,31616],{"class":416},[36,47277,54],{"class":53},[36,47279,162],{"class":60},[36,47281,64],{"class":49},[36,47283,31671],{"class":416},[36,47285,54],{"class":53},[36,47287,181],{"class":60},[36,47289,64],{"class":49},[36,47291,31625],{"class":416},[36,47293,54],{"class":53},[36,47295,61],{"class":60},[36,47297,75],{"class":49},[36,47299,47300],{"class":38,"line":8804},[36,47301,38868],{"class":49},[36,47303,47304,47306,47308,47310],{"class":38,"line":10463},[36,47305,31587],{"class":60},[36,47307,42962],{"class":49},[36,47309,54],{"class":53},[36,47311,38751],{"class":49},[36,47313,47314,47316,47318,47320,47322,47324,47326,47328,47330,47332,47334,47336,47338,47340,47342],{"class":38,"line":10488},[36,47315,42971],{"class":49},[36,47317,42901],{"class":60},[36,47319,64],{"class":49},[36,47321,1095],{"class":60},[36,47323,42980],{"class":49},[36,47325,1101],{"class":60},[36,47327,64],{"class":49},[36,47329,32812],{"class":60},[36,47331,42989],{"class":49},[36,47333,1483],{"class":60},[36,47335,64],{"class":49},[36,47337,638],{"class":60},[36,47339,42998],{"class":49},[36,47341,638],{"class":60},[36,47343,38789],{"class":49},[36,47345,47346,47348,47350,47352,47354,47356,47358,47360,47362,47364,47366,47368,47370,47372,47374],{"class":38,"line":10511},[36,47347,42971],{"class":49},[36,47349,35612],{"class":60},[36,47351,64],{"class":49},[36,47353,32812],{"class":60},[36,47355,42980],{"class":49},[36,47357,32812],{"class":60},[36,47359,64],{"class":49},[36,47361,42901],{"class":60},[36,47363,42989],{"class":49},[36,47365,638],{"class":60},[36,47367,64],{"class":49},[36,47369,1101],{"class":60},[36,47371,42998],{"class":49},[36,47373,1095],{"class":60},[36,47375,38789],{"class":49},[36,47377,47378,47380,47382,47384,47386,47388,47390,47392,47394,47396,47398,47400,47402],{"class":38,"line":10535},[36,47379,38839],{"class":49},[36,47381,31616],{"class":416},[36,47383,54],{"class":53},[36,47385,162],{"class":60},[36,47387,64],{"class":49},[36,47389,31671],{"class":416},[36,47391,54],{"class":53},[36,47393,181],{"class":60},[36,47395,64],{"class":49},[36,47397,31625],{"class":416},[36,47399,54],{"class":53},[36,47401,61],{"class":60},[36,47403,75],{"class":49},[36,47405,47406],{"class":38,"line":10540},[36,47407,38868],{"class":49},[36,47409,47410,47412,47414,47416],{"class":38,"line":10545},[36,47411,31587],{"class":60},[36,47413,43073],{"class":49},[36,47415,54],{"class":53},[36,47417,38751],{"class":49},[36,47419,47420,47422,47424,47426,47428,47430,47432,47434,47436,47438,47440,47442,47444,47446,47448],{"class":38,"line":10550},[36,47421,42971],{"class":49},[36,47423,43084],{"class":60},[36,47425,64],{"class":49},[36,47427,42901],{"class":60},[36,47429,42980],{"class":49},[36,47431,1101],{"class":60},[36,47433,64],{"class":49},[36,47435,43097],{"class":60},[36,47437,42989],{"class":49},[36,47439,1483],{"class":60},[36,47441,64],{"class":49},[36,47443,1489],{"class":60},[36,47445,42998],{"class":49},[36,47447,1095],{"class":60},[36,47449,38789],{"class":49},[36,47451,47452,47454,47456,47458,47460,47462,47464,47466,47468,47470,47472,47474,47476,47478,47480],{"class":38,"line":10559},[36,47453,42971],{"class":49},[36,47455,39199],{"class":60},[36,47457,64],{"class":49},[36,47459,21792],{"class":60},[36,47461,42980],{"class":49},[36,47463,1500],{"class":60},[36,47465,64],{"class":49},[36,47467,32243],{"class":60},[36,47469,42989],{"class":49},[36,47471,1680],{"class":60},[36,47473,64],{"class":49},[36,47475,1095],{"class":60},[36,47477,42998],{"class":49},[36,47479,1095],{"class":60},[36,47481,38789],{"class":49},[36,47483,47484,47486,47488,47490,47492,47494,47496,47498,47500,47502,47504,47506,47508,47510,47512],{"class":38,"line":10564},[36,47485,42971],{"class":49},[36,47487,39199],{"class":60},[36,47489,64],{"class":49},[36,47491,32812],{"class":60},[36,47493,42980],{"class":49},[36,47495,32812],{"class":60},[36,47497,64],{"class":49},[36,47499,35612],{"class":60},[36,47501,42989],{"class":49},[36,47503,1680],{"class":60},[36,47505,64],{"class":49},[36,47507,1095],{"class":60},[36,47509,42998],{"class":49},[36,47511,1095],{"class":60},[36,47513,38789],{"class":49},[36,47515,47516,47518,47520,47522,47524,47526,47528,47530,47532,47534,47536,47538,47540,47542,47544],{"class":38,"line":10570},[36,47517,42971],{"class":49},[36,47519,39199],{"class":60},[36,47521,64],{"class":49},[36,47523,1500],{"class":60},[36,47525,42980],{"class":49},[36,47527,32812],{"class":60},[36,47529,64],{"class":49},[36,47531,43194],{"class":60},[36,47533,42989],{"class":49},[36,47535,638],{"class":60},[36,47537,64],{"class":49},[36,47539,1095],{"class":60},[36,47541,42998],{"class":49},[36,47543,1095],{"class":60},[36,47545,38789],{"class":49},[36,47547,47548,47550,47552,47554,47556,47558,47560,47562,47564,47566,47568,47570,47572,47574,47576],{"class":38,"line":10591},[36,47549,42971],{"class":49},[36,47551,43215],{"class":60},[36,47553,64],{"class":49},[36,47555,35612],{"class":60},[36,47557,42980],{"class":49},[36,47559,21792],{"class":60},[36,47561,64],{"class":49},[36,47563,43228],{"class":60},[36,47565,42989],{"class":49},[36,47567,638],{"class":60},[36,47569,64],{"class":49},[36,47571,32812],{"class":60},[36,47573,42998],{"class":49},[36,47575,32812],{"class":60},[36,47577,38789],{"class":49},[36,47579,47580,47582,47584,47586,47588,47590,47592,47594,47596,47598,47600,47602,47604],{"class":38,"line":10597},[36,47581,38839],{"class":49},[36,47583,31616],{"class":416},[36,47585,54],{"class":53},[36,47587,162],{"class":60},[36,47589,64],{"class":49},[36,47591,31671],{"class":416},[36,47593,54],{"class":53},[36,47595,181],{"class":60},[36,47597,64],{"class":49},[36,47599,31625],{"class":416},[36,47601,54],{"class":53},[36,47603,61],{"class":60},[36,47605,75],{"class":49},[36,47607,47608],{"class":38,"line":10611},[36,47609,38868],{"class":49},[36,47611,47612,47614,47616,47618],{"class":38,"line":10617},[36,47613,31587],{"class":60},[36,47615,43281],{"class":49},[36,47617,54],{"class":53},[36,47619,38751],{"class":49},[36,47621,47622,47624,47626,47628,47630,47632,47634,47636,47638,47640,47642,47644,47646,47648,47650],{"class":38,"line":10644},[36,47623,42971],{"class":49},[36,47625,43292],{"class":60},[36,47627,64],{"class":49},[36,47629,35612],{"class":60},[36,47631,42980],{"class":49},[36,47633,21792],{"class":60},[36,47635,64],{"class":49},[36,47637,43228],{"class":60},[36,47639,42989],{"class":49},[36,47641,638],{"class":60},[36,47643,64],{"class":49},[36,47645,32812],{"class":60},[36,47647,42998],{"class":49},[36,47649,32812],{"class":60},[36,47651,38789],{"class":49},[36,47653,47654,47656,47658,47660,47662,47664,47666,47668,47670,47672,47674,47676,47678,47680,47682],{"class":38,"line":10653},[36,47655,42971],{"class":49},[36,47657,43292],{"class":60},[36,47659,64],{"class":49},[36,47661,35682],{"class":60},[36,47663,42980],{"class":49},[36,47665,42901],{"class":60},[36,47667,64],{"class":49},[36,47669,35682],{"class":60},[36,47671,42989],{"class":49},[36,47673,1489],{"class":60},[36,47675,64],{"class":49},[36,47677,32812],{"class":60},[36,47679,42998],{"class":49},[36,47681,32812],{"class":60},[36,47683,38789],{"class":49},[36,47685,47686,47688,47690,47692,47694],{"class":38,"line":10659},[36,47687,43355],{"class":49},[36,47689,61],{"class":60},[36,47691,64],{"class":49},[36,47693,61],{"class":60},[36,47695,43364],{"class":49},[36,47697,47698],{"class":38,"line":10667},[36,47699,39532],{"class":49},[36,47701,47702,47704,47706,47708,47710],{"class":38,"line":10672},[36,47703,39537],{"class":49},[36,47705,43375],{"class":60},[36,47707,64],{"class":49},[36,47709,181],{"class":60},[36,47711,75],{"class":49},[36,47713,47714],{"class":38,"line":17348},[36,47715,38868],{"class":49},[36,47717,47718],{"class":38,"line":17354},[36,47719,43390],{"class":42},[36,47721,47722,47724,47726,47728,47730],{"class":38,"line":17377},[36,47723,4152],{"class":53},[36,47725,39610],{"class":49},[36,47727,26788],{"class":53},[36,47729,39615],{"class":60},[36,47731,39618],{"class":49},[36,47733,47734,47736,47738],{"class":38,"line":17383},[36,47735,5391],{"class":53},[36,47737,39630],{"class":60},[36,47739,39633],{"class":49},[36,47741,47742,47744,47746,47748,47750,47752,47754,47756,47758],{"class":38,"line":17406},[36,47743,39643],{"class":49},[36,47745,43417],{"class":416},[36,47747,54],{"class":53},[36,47749,43422],{"class":998},[36,47751,64],{"class":49},[36,47753,39646],{"class":416},[36,47755,54],{"class":53},[36,47757,39651],{"class":998},[36,47759,75],{"class":49},[36,47761,47762],{"class":38,"line":17420},[36,47763,43437],{"class":42},[36,47765,47766],{"class":38,"line":17440},[36,47767,43442],{"class":42},[36,47769,47770],{"class":38,"line":17446},[36,47771,43447],{"class":42},[36,47773,47774],{"class":38,"line":17457},[36,47775,43452],{"class":42},[36,47777,47778],{"class":38,"line":17480},[36,47779,43457],{"class":42},[36,47781,47782],{"class":38,"line":17502},[36,47783,43462],{"class":42},[36,47785,47786,47788,47790,47792,47794,47796],{"class":38,"line":17507},[36,47787,39663],{"class":53},[36,47789,39666],{"class":49},[36,47791,39669],{"class":53},[36,47793,39672],{"class":53},[36,47795,39675],{"class":60},[36,47797,4488],{"class":49},[36,47799,47800,47802,47804],{"class":38,"line":17513},[36,47801,39687],{"class":49},[36,47803,643],{"class":60},[36,47805,75],{"class":49},[36,47807,47808,47810,47812],{"class":38,"line":17527},[36,47809,43489],{"class":53},[36,47811,39630],{"class":60},[36,47813,39706],{"class":49},[36,47815,47816,47818,47820,47822,47824],{"class":38,"line":17540},[36,47817,43498],{"class":49},[36,47819,643],{"class":60},[36,47821,64],{"class":49},[36,47823,39728],{"class":60},[36,47825,75],{"class":49},[36,47827,47828,47830,47832,47834,47836,47838],{"class":38,"line":17545},[36,47829,43511],{"class":53},[36,47831,39666],{"class":49},[36,47833,39669],{"class":53},[36,47835,39672],{"class":53},[36,47837,39675],{"class":60},[36,47839,4488],{"class":49},[36,47841,47842,47844,47846],{"class":38,"line":17559},[36,47843,43526],{"class":49},[36,47845,643],{"class":60},[36,47847,75],{"class":49},[36,47849,47850],{"class":38,"line":17564},[36,47851,35907],{"class":42},[36,47853,47854,47856,47858],{"class":38,"line":17570},[36,47855,31543],{"class":53},[36,47857,31835],{"class":2713},[36,47859,31838],{"class":49},[36,47861,47862,47864,47866,47868],{"class":38,"line":17575},[36,47863,31843],{"class":49},[36,47865,54],{"class":53},[36,47867,31565],{"class":60},[36,47869,43553],{"class":49},[36,47871,47872,47874,47876,47878],{"class":38,"line":17589},[36,47873,31843],{"class":49},[36,47875,54],{"class":53},[36,47877,31565],{"class":60},[36,47879,43564],{"class":49},[36,47881,47882,47884,47886,47888],{"class":38,"line":17594},[36,47883,31843],{"class":49},[36,47885,54],{"class":53},[36,47887,31565],{"class":60},[36,47889,43575],{"class":49},[36,47891,47892,47894,47896,47898],{"class":38,"line":17599},[36,47893,31843],{"class":49},[36,47895,54],{"class":53},[36,47897,31565],{"class":60},[36,47899,43586],{"class":49},[36,47901,47902,47904,47906,47908],{"class":38,"line":17613},[36,47903,31843],{"class":49},[36,47905,54],{"class":53},[36,47907,31565],{"class":60},[36,47909,43597],{"class":49},[36,47911,47912,47914],{"class":38,"line":17625},[36,47913,15496],{"class":53},[36,47915,31951],{"class":49},[36,47917,47918],{"class":38,"line":17630},[36,47919,194],{"emptyLinePlaceholder":193},[36,47921,47922],{"class":38,"line":17643},[36,47923,43612],{"class":42},[36,47925,47926,47928,47930,47932,47934],{"class":38,"line":17648},[36,47927,2281],{"class":53},[36,47929,31962],{"class":60},[36,47931,3698],{"class":53},[36,47933,31967],{"class":998},[36,47935,4488],{"class":49},[36,47937,47938,47940,47942,47944,47946,47948,47950,47952,47954],{"class":38,"line":17653},[36,47939,31979],{"class":49},[36,47941,54],{"class":53},[36,47943,31193],{"class":49},[36,47945,31986],{"class":998},[36,47947,2454],{"class":53},[36,47949,31991],{"class":49},[36,47951,2451],{"class":53},[36,47953,31218],{"class":998},[36,47955,75],{"class":49},[36,47957,47958,47960,47962],{"class":38,"line":17658},[36,47959,32031],{"class":49},[36,47961,54],{"class":53},[36,47963,43653],{"class":49},[36,47965,47966,47968,47970,47972,47974,47976,47978,47980],{"class":38,"line":17671},[36,47967,32041],{"class":60},[36,47969,32044],{"class":49},[36,47971,61],{"class":60},[36,47973,64],{"class":49},[36,47975,32243],{"class":60},[36,47977,64],{"class":49},[36,47979,32243],{"class":60},[36,47981,32057],{"class":49},[22742,47983,47985],{"id":47984},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47987,47988],{},"计算图片的均值与方差，用于训练中归一化处理操作",[26,47990,47992],{"className":28,"code":47991,"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,47993,47994,47999,48012,48017,48023,48028,48038,48042,48047,48057,48061,48066,48076,48093,48097,48102,48114,48126,48157,48166,48176,48186,48190,48195,48210,48214,48219,48224,48229,48239,48244,48269,48273,48278,48293,48297,48310,48314,48319,48324,48329,48334,48339,48349,48359,48382,48390,48398,48406,48410,48422,48426,48431,48435,48439,48446,48466,48490,48497,48511,48516,48521,48525,48539,48543,48555],{"__ignoreMap":31},[36,47995,47996],{"class":38,"line":39},[36,47997,47998],{"class":42},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[36,48000,48001,48003,48006,48009],{"class":38,"line":46},[36,48002,31479],{"class":53},[36,48004,48005],{"class":60}," PIL",[36,48007,48008],{"class":53}," import",[36,48010,48011],{"class":49}," Image\n",[36,48013,48014],{"class":38,"line":78},[36,48015,48016],{"class":42},"# os 用来处理文件夹和文件路径\n",[36,48018,48019,48021],{"class":38,"line":125},[36,48020,31135],{"class":53},[36,48022,46047],{"class":49},[36,48024,48025],{"class":38,"line":131},[36,48026,48027],{"class":42},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[36,48029,48030,48032,48034,48036],{"class":38,"line":396},[36,48031,31135],{"class":53},[36,48033,32122],{"class":49},[36,48035,32125],{"class":53},[36,48037,32128],{"class":49},[36,48039,48040],{"class":38,"line":407},[36,48041,194],{"emptyLinePlaceholder":193},[36,48043,48044],{"class":38,"line":2061},[36,48045,48046],{"class":42},"# 文件夹路径，包含所有图片文件\n",[36,48048,48049,48052,48054],{"class":38,"line":2067},[36,48050,48051],{"class":49},"folder_path ",[36,48053,54],{"class":53},[36,48055,48056],{"class":998}," 'data_cat_dog'\n",[36,48058,48059],{"class":38,"line":2079},[36,48060,194],{"emptyLinePlaceholder":193},[36,48062,48063],{"class":38,"line":2362},[36,48064,48065],{"class":42},"# 初始化累积变量\n",[36,48067,48068,48071,48073],{"class":38,"line":2367},[36,48069,48070],{"class":49},"total_pixels ",[36,48072,54],{"class":53},[36,48074,48075],{"class":60}," 0\n",[36,48077,48078,48081,48083,48086,48088,48090],{"class":38,"line":2373},[36,48079,48080],{"class":49},"sum_normalized_pixel_values ",[36,48082,54],{"class":53},[36,48084,48085],{"class":49}," np.zeros(",[36,48087,162],{"class":60},[36,48089,46550],{"class":49},[36,48091,48092],{"class":42},"# 如果是RGB图像，需要三个通道的均值和方差\n",[36,48094,48095],{"class":38,"line":2378},[36,48096,194],{"emptyLinePlaceholder":193},[36,48098,48099],{"class":38,"line":2392},[36,48100,48101],{"class":42},"# 遍历文件夹中的图片文件\n",[36,48103,48104,48106,48109,48111],{"class":38,"line":2397},[36,48105,3774],{"class":53},[36,48107,48108],{"class":49}," root, dirs, files ",[36,48110,26788],{"class":53},[36,48112,48113],{"class":49}," os.walk(folder_path):\n",[36,48115,48116,48118,48121,48123],{"class":38,"line":2403},[36,48117,3950],{"class":53},[36,48119,48120],{"class":49}," filename ",[36,48122,26788],{"class":53},[36,48124,48125],{"class":49}," files:\n",[36,48127,48128,48130,48133,48136,48138,48141,48143,48146,48148,48151,48154],{"class":38,"line":2424},[36,48129,3246],{"class":53},[36,48131,48132],{"class":49}," filename.endswith((",[36,48134,48135],{"class":998},"'.jpg'",[36,48137,154],{"class":49},[36,48139,48140],{"class":998},"'.jpeg'",[36,48142,154],{"class":49},[36,48144,48145],{"class":998},"'.png'",[36,48147,154],{"class":49},[36,48149,48150],{"class":998},"'.bmp'",[36,48152,48153],{"class":49},")):  ",[36,48155,48156],{"class":42},"# 可根据实际情况添加其他格式\n",[36,48158,48159,48161,48163],{"class":38,"line":2429},[36,48160,46415],{"class":49},[36,48162,54],{"class":53},[36,48164,48165],{"class":49}," os.path.join(root, filename)\n",[36,48167,48168,48171,48173],{"class":38,"line":2443},[36,48169,48170],{"class":49},"            image ",[36,48172,54],{"class":53},[36,48174,48175],{"class":49}," Image.open(image_path)\n",[36,48177,48178,48181,48183],{"class":38,"line":2448},[36,48179,48180],{"class":49},"            image_array ",[36,48182,54],{"class":53},[36,48184,48185],{"class":49}," np.array(image)\n",[36,48187,48188],{"class":38,"line":2477},[36,48189,194],{"emptyLinePlaceholder":193},[36,48191,48192],{"class":38,"line":2482},[36,48193,48194],{"class":42},"            # 归一化像素值到0-1之间\n",[36,48196,48197,48200,48202,48205,48207],{"class":38,"line":2499},[36,48198,48199],{"class":49},"            normalized_image_array ",[36,48201,54],{"class":53},[36,48203,48204],{"class":49}," image_array ",[36,48206,1466],{"class":53},[36,48208,48209],{"class":60}," 255.0\n",[36,48211,48212],{"class":38,"line":2504},[36,48213,194],{"emptyLinePlaceholder":193},[36,48215,48216],{"class":38,"line":2509},[36,48217,48218],{"class":42},"            # print(image_path)\n",[36,48220,48221],{"class":38,"line":2514},[36,48222,48223],{"class":42},"            # print(normalized_image_array.shape)\n",[36,48225,48226],{"class":38,"line":2528},[36,48227,48228],{"class":42},"            # 累积归一化后的像素值和像素数量\n",[36,48230,48231,48234,48236],{"class":38,"line":2533},[36,48232,48233],{"class":49},"            total_pixels ",[36,48235,10224],{"class":53},[36,48237,48238],{"class":49}," normalized_image_array.size\n",[36,48240,48241],{"class":38,"line":3326},[36,48242,48243],{"class":42},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[36,48245,48246,48249,48251,48254,48257,48259,48261,48263,48265,48267],{"class":38,"line":3340},[36,48247,48248],{"class":49},"            sum_normalized_pixel_values ",[36,48250,10224],{"class":53},[36,48252,48253],{"class":49}," np.sum(normalized_image_array, ",[36,48255,48256],{"class":416},"axis",[36,48258,54],{"class":53},[36,48260,901],{"class":49},[36,48262,643],{"class":60},[36,48264,154],{"class":49},[36,48266,61],{"class":60},[36,48268,31239],{"class":49},[36,48270,48271],{"class":38,"line":3348},[36,48272,194],{"emptyLinePlaceholder":193},[36,48274,48275],{"class":38,"line":3353},[36,48276,48277],{"class":42},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[36,48279,48280,48283,48285,48288,48290],{"class":38,"line":3359},[36,48281,48282],{"class":49},"mean ",[36,48284,54],{"class":53},[36,48286,48287],{"class":49}," sum_normalized_pixel_values ",[36,48289,1466],{"class":53},[36,48291,48292],{"class":49}," total_pixels\n",[36,48294,48295],{"class":38,"line":3365},[36,48296,194],{"emptyLinePlaceholder":193},[36,48298,48299,48302,48304,48306,48308],{"class":38,"line":3370},[36,48300,48301],{"class":49},"sum_squared_diff ",[36,48303,54],{"class":53},[36,48305,48085],{"class":49},[36,48307,162],{"class":60},[36,48309,75],{"class":49},[36,48311,48312],{"class":38,"line":8695},[36,48313,194],{"emptyLinePlaceholder":193},[36,48315,48316],{"class":38,"line":8719},[36,48317,48318],{"class":42},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[36,48320,48321],{"class":38,"line":8724},[36,48322,48323],{"class":42},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[36,48325,48326],{"class":38,"line":8730},[36,48327,48328],{"class":42},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[36,48330,48331],{"class":38,"line":8757},[36,48332,48333],{"class":42},"# Image.open(image_path)：打开图片\n",[36,48335,48336],{"class":38,"line":8762},[36,48337,48338],{"class":42},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[36,48340,48341,48343,48345,48347],{"class":38,"line":8768},[36,48342,3774],{"class":53},[36,48344,48108],{"class":49},[36,48346,26788],{"class":53},[36,48348,48113],{"class":49},[36,48350,48351,48353,48355,48357],{"class":38,"line":8780},[36,48352,3950],{"class":53},[36,48354,48120],{"class":49},[36,48356,26788],{"class":53},[36,48358,48125],{"class":49},[36,48360,48361,48363,48365,48367,48369,48371,48373,48375,48377,48379],{"class":38,"line":8792},[36,48362,3246],{"class":53},[36,48364,48132],{"class":49},[36,48366,48135],{"class":998},[36,48368,154],{"class":49},[36,48370,48140],{"class":998},[36,48372,154],{"class":49},[36,48374,48145],{"class":998},[36,48376,154],{"class":49},[36,48378,48150],{"class":998},[36,48380,48381],{"class":49},")):\n",[36,48383,48384,48386,48388],{"class":38,"line":8804},[36,48385,46415],{"class":49},[36,48387,54],{"class":53},[36,48389,48165],{"class":49},[36,48391,48392,48394,48396],{"class":38,"line":10463},[36,48393,48170],{"class":49},[36,48395,54],{"class":53},[36,48397,48175],{"class":49},[36,48399,48400,48402,48404],{"class":38,"line":10488},[36,48401,48180],{"class":49},[36,48403,54],{"class":53},[36,48405,48185],{"class":49},[36,48407,48408],{"class":38,"line":10511},[36,48409,48194],{"class":42},[36,48411,48412,48414,48416,48418,48420],{"class":38,"line":10535},[36,48413,48199],{"class":49},[36,48415,54],{"class":53},[36,48417,48204],{"class":49},[36,48419,1466],{"class":53},[36,48421,48209],{"class":60},[36,48423,48424],{"class":38,"line":10540},[36,48425,48223],{"class":42},[36,48427,48428],{"class":38,"line":10545},[36,48429,48430],{"class":42},"            # print(mean.shape)\n",[36,48432,48433],{"class":38,"line":10550},[36,48434,48218],{"class":42},[36,48436,48437],{"class":38,"line":10559},[36,48438,194],{"emptyLinePlaceholder":193},[36,48440,48441,48444],{"class":38,"line":10564},[36,48442,48443],{"class":53},"            try",[36,48445,4488],{"class":49},[36,48447,48448,48451,48453,48456,48458,48461,48463],{"class":38,"line":10570},[36,48449,48450],{"class":49},"                diff ",[36,48452,54],{"class":53},[36,48454,48455],{"class":49}," (normalized_image_array ",[36,48457,1414],{"class":53},[36,48459,48460],{"class":49}," mean) ",[36,48462,11408],{"class":53},[36,48464,48465],{"class":60}," 2\n",[36,48467,48468,48471,48473,48476,48478,48480,48482,48484,48486,48488],{"class":38,"line":10591},[36,48469,48470],{"class":49},"                sum_squared_diff ",[36,48472,10224],{"class":53},[36,48474,48475],{"class":49}," np.sum(diff, ",[36,48477,48256],{"class":416},[36,48479,54],{"class":53},[36,48481,901],{"class":49},[36,48483,643],{"class":60},[36,48485,154],{"class":49},[36,48487,61],{"class":60},[36,48489,31239],{"class":49},[36,48491,48492,48495],{"class":38,"line":10597},[36,48493,48494],{"class":53},"            except",[36,48496,4488],{"class":49},[36,48498,48499,48502,48504,48506,48509],{"class":38,"line":10611},[36,48500,48501],{"class":60},"                print",[36,48503,901],{"class":49},[36,48505,949],{"class":53},[36,48507,48508],{"class":998},"\"捕获到自定义异常\"",[36,48510,75],{"class":49},[36,48512,48513],{"class":38,"line":10617},[36,48514,48515],{"class":42},"            # diff = (normalized_image_array - mean) ** 2\n",[36,48517,48518],{"class":38,"line":10644},[36,48519,48520],{"class":42},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[36,48522,48523],{"class":38,"line":10653},[36,48524,194],{"emptyLinePlaceholder":193},[36,48526,48527,48530,48532,48535,48537],{"class":38,"line":10659},[36,48528,48529],{"class":49},"variance ",[36,48531,54],{"class":53},[36,48533,48534],{"class":49}," sum_squared_diff ",[36,48536,1466],{"class":53},[36,48538,48292],{"class":49},[36,48540,48541],{"class":38,"line":10667},[36,48542,194],{"emptyLinePlaceholder":193},[36,48544,48545,48547,48549,48552],{"class":38,"line":10672},[36,48546,199],{"class":60},[36,48548,901],{"class":49},[36,48550,48551],{"class":998},"\"Mean:\"",[36,48553,48554],{"class":49},", mean)\n",[36,48556,48557,48559,48561,48564],{"class":38,"line":17348},[36,48558,199],{"class":60},[36,48560,901],{"class":49},[36,48562,48563],{"class":998},"\"Variance:\"",[36,48565,48566],{"class":49},", variance)\n",[26,48568,48570],{"className":28,"code":48569,"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,48571,48572,48578,48584,48594,48600,48610,48624,48634,48644,48654,48658,48668,48678,48682,48686,48694,48699,48704,48723,48727,48732,48737,48742,48747,48788,48793,48803,48808,48821,48826,48831,48836,48841,48846,48850,48855,48860,48882,48886,48918,48932,48942,48952,48956,48966,48980,48990,49000,49010,49016,49020,49024,49028,49032,49036,49044,49064,49068,49072,49076,49080,49096,49100,49104,49112,49116,49120,49128,49132,49136,49140,49148,49152,49156,49160,49168,49172,49180,49184,49192,49196,49204,49208,49216,49220,49224,49232,49236,49240,49252,49276,49290,49294,49298,49302,49310,49314,49322,49326,49334,49338,49346,49350,49358,49362,49370,49374,49386,49390,49398,49402,49410,49414,49418,49422,49426,49434,49438,49454,49458,49466,49470,49474,49478,49482,49486,49490,49494,49510,49514,49526,49530,49542,49546,49558,49562,49570,49574,49582,49586,49590,49594,49600,49604,49612,49616,49632,49636,49644,49648,49664,49676,49680,49692,49696,49700,49708,49712,49716,49724,49728,49736,49740,49748,49752,49756,49798,49840,49844,49848,49864,49868,49884,49888,49892,49900,49904,49908,49920,49958,49962,49966,49974,49978,49992,50002,50008,50014,50020,50026,50030,50034,50040,50044,50048,50056,50060,50078,50082,50086,50090,50106,50110,50114,50118,50122,50126,50146,50166,50170,50174,50178,50186,50194,50198,50214,50234,50254,50258,50263,50272,50281,50286,50291,50296,50309,50314,50323,50332,50349],{"__ignoreMap":31},[36,48573,48574,48576],{"class":38,"line":39},[36,48575,31135],{"class":53},[36,48577,32564],{"class":49},[36,48579,48580,48582],{"class":38,"line":46},[36,48581,31135],{"class":53},[36,48583,32571],{"class":49},[36,48585,48586,48588,48590,48592],{"class":38,"line":78},[36,48587,31135],{"class":53},[36,48589,32582],{"class":49},[36,48591,32125],{"class":53},[36,48593,32587],{"class":49},[36,48595,48596,48598],{"class":38,"line":125},[36,48597,31135],{"class":53},[36,48599,31138],{"class":49},[36,48601,48602,48604,48606,48608],{"class":38,"line":131},[36,48603,31479],{"class":53},[36,48605,32157],{"class":49},[36,48607,31135],{"class":53},[36,48609,32604],{"class":49},[36,48611,48612,48614,48616,48618,48621],{"class":38,"line":396},[36,48613,31479],{"class":53},[36,48615,32110],{"class":49},[36,48617,31135],{"class":53},[36,48619,48620],{"class":49}," ImageFolder ",[36,48622,48623],{"class":42},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[36,48625,48626,48628,48630,48632],{"class":38,"line":407},[36,48627,31479],{"class":53},[36,48629,32140],{"class":49},[36,48631,31135],{"class":53},[36,48633,32145],{"class":49},[36,48635,48636,48638,48640,48642],{"class":38,"line":2061},[36,48637,31135],{"class":53},[36,48639,32157],{"class":49},[36,48641,32125],{"class":53},[36,48643,32162],{"class":49},[36,48645,48646,48648,48650,48652],{"class":38,"line":2067},[36,48647,31135],{"class":53},[36,48649,32174],{"class":49},[36,48651,32125],{"class":53},[36,48653,32179],{"class":49},[36,48655,48656],{"class":38,"line":2079},[36,48657,32649],{"class":42},[36,48659,48660,48662,48664,48666],{"class":38,"line":2362},[36,48661,31479],{"class":53},[36,48663,32656],{"class":49},[36,48665,31135],{"class":53},[36,48667,43773],{"class":49},[36,48669,48670,48672,48674,48676],{"class":38,"line":2367},[36,48671,31479],{"class":53},[36,48673,31482],{"class":49},[36,48675,31135],{"class":53},[36,48677,31487],{"class":49},[36,48679,48680],{"class":38,"line":2373},[36,48681,194],{"emptyLinePlaceholder":193},[36,48683,48684],{"class":38,"line":2378},[36,48685,32684],{"class":42},[36,48687,48688,48690,48692],{"class":38,"line":2392},[36,48689,32689],{"class":53},[36,48691,32692],{"class":2713},[36,48693,32695],{"class":49},[36,48695,48696],{"class":38,"line":2397},[36,48697,48698],{"class":42},"    # 导入自己的数据集，并进行数据处理\n",[36,48700,48701],{"class":38,"line":2403},[36,48702,48703],{"class":42},"    # 定义数据集的路径\n",[36,48705,48706,48709,48711,48713,48715,48717,48721],{"class":38,"line":2424},[36,48707,48708],{"class":60},"    ROOT_PATH",[36,48710,54],{"class":53},[36,48712,1552],{"class":53},[36,48714,1141],{"class":998},[36,48716,1440],{"class":60},[36,48718,48720],{"class":48719},"sA_wV","\u002Fdata\u002Ftrain",[36,48722,25878],{"class":998},[36,48724,48725],{"class":38,"line":2429},[36,48726,194],{"emptyLinePlaceholder":193},[36,48728,48729],{"class":38,"line":2443},[36,48730,48731],{"class":42},"    # 定义归一化方法\n",[36,48733,48734],{"class":38,"line":2448},[36,48735,48736],{"class":42},"    # 这里需要先计算一下数据集的均值和方差\n",[36,48738,48739],{"class":38,"line":2477},[36,48740,48741],{"class":42},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[36,48743,48744],{"class":38,"line":2482},[36,48745,48746],{"class":42},"    # 第一个参数是均值，第二个参数是方差\n",[36,48748,48749,48752,48754,48757,48760,48762,48765,48767,48770,48773,48776,48778,48781,48783,48786],{"class":38,"line":2499},[36,48750,48751],{"class":49},"    normalize",[36,48753,54],{"class":53},[36,48755,48756],{"class":49},"transforms.Normalize([",[36,48758,48759],{"class":60},"0.162",[36,48761,64],{"class":49},[36,48763,48764],{"class":60},"0.151",[36,48766,64],{"class":49},[36,48768,48769],{"class":60},"0.138",[36,48771,48772],{"class":49},"],[",[36,48774,48775],{"class":60},"0.058",[36,48777,64],{"class":49},[36,48779,48780],{"class":60},"0.052",[36,48782,64],{"class":49},[36,48784,48785],{"class":60},"0.048",[36,48787,165],{"class":49},[36,48789,48790],{"class":38,"line":2504},[36,48791,48792],{"class":42},"    # 定义数据集处理方法变量\n",[36,48794,48795,48798,48800],{"class":38,"line":2509},[36,48796,48797],{"class":49},"    train_transform",[36,48799,54],{"class":53},[36,48801,48802],{"class":49},"transforms.Compose([\n",[36,48804,48805],{"class":38,"line":2514},[36,48806,48807],{"class":42},"        # 调整图像大小为224*224\n",[36,48809,48810,48813,48815,48817,48819],{"class":38,"line":2528},[36,48811,48812],{"class":49},"        transforms.Resize((",[36,48814,32243],{"class":60},[36,48816,64],{"class":49},[36,48818,32243],{"class":60},[36,48820,43364],{"class":49},[36,48822,48823],{"class":38,"line":2533},[36,48824,48825],{"class":42},"        # 将图像转换为张量\n",[36,48827,48828],{"class":38,"line":3326},[36,48829,48830],{"class":49},"        transforms.ToTensor(),\n",[36,48832,48833],{"class":38,"line":3340},[36,48834,48835],{"class":49},"        normalize])\n",[36,48837,48838],{"class":38,"line":3348},[36,48839,48840],{"class":42},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[36,48842,48843],{"class":38,"line":3353},[36,48844,48845],{"class":42},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[36,48847,48848],{"class":38,"line":3359},[36,48849,194],{"emptyLinePlaceholder":193},[36,48851,48852],{"class":38,"line":3365},[36,48853,48854],{"class":42},"    # 加载数据集\n",[36,48856,48857],{"class":38,"line":3370},[36,48858,48859],{"class":42},"    # 传入数据集路径与处理方法\n",[36,48861,48862,48864,48866,48869,48872,48874,48877,48879],{"class":38,"line":8695},[36,48863,32700],{"class":49},[36,48865,54],{"class":53},[36,48867,48868],{"class":49},"ImageFolder(",[36,48870,48871],{"class":60},"ROOT_PATH",[36,48873,64],{"class":49},[36,48875,48876],{"class":416},"transform",[36,48878,54],{"class":53},[36,48880,48881],{"class":49},"train_transform)\n",[36,48883,48884],{"class":38,"line":8719},[36,48885,194],{"emptyLinePlaceholder":193},[36,48887,48888,48890,48892,48894,48896,48898,48900,48902,48904,48906,48908,48910,48912,48914,48916],{"class":38,"line":8724},[36,48889,32752],{"class":49},[36,48891,54],{"class":53},[36,48893,32757],{"class":49},[36,48895,32760],{"class":60},[36,48897,901],{"class":49},[36,48899,32765],{"class":60},[36,48901,1339],{"class":53},[36,48903,8105],{"class":60},[36,48905,32772],{"class":49},[36,48907,32760],{"class":60},[36,48909,901],{"class":49},[36,48911,32779],{"class":60},[36,48913,1339],{"class":53},[36,48915,8105],{"class":60},[36,48917,32786],{"class":49},[36,48919,48920,48922,48924,48926,48928,48930],{"class":38,"line":8730},[36,48921,32791],{"class":49},[36,48923,54],{"class":53},[36,48925,32796],{"class":49},[36,48927,32279],{"class":416},[36,48929,54],{"class":53},[36,48931,32284],{"class":49},[36,48933,48934,48936,48938,48940],{"class":38,"line":8757},[36,48935,32807],{"class":416},[36,48937,54],{"class":53},[36,48939,638],{"class":60},[36,48941,32208],{"class":49},[36,48943,48944,48946,48948,48950],{"class":38,"line":8762},[36,48945,32819],{"class":416},[36,48947,54],{"class":53},[36,48949,32218],{"class":60},[36,48951,32208],{"class":49},[36,48953,48954],{"class":38,"line":8768},[36,48955,32830],{"class":42},[36,48957,48958,48960,48962,48964],{"class":38,"line":8780},[36,48959,32835],{"class":416},[36,48961,54],{"class":53},[36,48963,1280],{"class":60},[36,48965,75],{"class":49},[36,48967,48968,48970,48972,48974,48976,48978],{"class":38,"line":8792},[36,48969,32846],{"class":49},[36,48971,54],{"class":53},[36,48973,32276],{"class":49},[36,48975,32279],{"class":416},[36,48977,54],{"class":53},[36,48979,32857],{"class":49},[36,48981,48982,48984,48986,48988],{"class":38,"line":8804},[36,48983,32862],{"class":416},[36,48985,54],{"class":53},[36,48987,638],{"class":60},[36,48989,32208],{"class":49},[36,48991,48992,48994,48996,48998],{"class":38,"line":10463},[36,48993,32873],{"class":416},[36,48995,54],{"class":53},[36,48997,32218],{"class":60},[36,48999,32208],{"class":49},[36,49001,49002,49004,49006,49008],{"class":38,"line":10488},[36,49003,32884],{"class":416},[36,49005,54],{"class":53},[36,49007,1280],{"class":60},[36,49009,75],{"class":49},[36,49011,49012,49014],{"class":38,"line":10511},[36,49013,4839],{"class":53},[36,49015,32897],{"class":49},[36,49017,49018],{"class":38,"line":10535},[36,49019,194],{"emptyLinePlaceholder":193},[36,49021,49022],{"class":38,"line":10540},[36,49023,32906],{"class":42},[36,49025,49026],{"class":38,"line":10545},[36,49027,32911],{"class":42},[36,49029,49030],{"class":38,"line":10550},[36,49031,194],{"emptyLinePlaceholder":193},[36,49033,49034],{"class":38,"line":10559},[36,49035,32920],{"class":42},[36,49037,49038,49040,49042],{"class":38,"line":10564},[36,49039,32689],{"class":53},[36,49041,32927],{"class":2713},[36,49043,32930],{"class":49},[36,49045,49046,49048,49050,49052,49054,49056,49058,49060,49062],{"class":38,"line":10570},[36,49047,31979],{"class":49},[36,49049,54],{"class":53},[36,49051,31193],{"class":49},[36,49053,31986],{"class":998},[36,49055,2454],{"class":53},[36,49057,31991],{"class":49},[36,49059,2451],{"class":53},[36,49061,32949],{"class":998},[36,49063,75],{"class":49},[36,49065,49066],{"class":38,"line":10591},[36,49067,194],{"emptyLinePlaceholder":193},[36,49069,49070],{"class":38,"line":10597},[36,49071,32964],{"class":42},[36,49073,49074],{"class":38,"line":10611},[36,49075,32969],{"class":42},[36,49077,49078],{"class":38,"line":10617},[36,49079,32974],{"class":42},[36,49081,49082,49084,49086,49088,49090,49092,49094],{"class":38,"line":10644},[36,49083,32979],{"class":49},[36,49085,54],{"class":53},[36,49087,32984],{"class":49},[36,49089,32987],{"class":416},[36,49091,54],{"class":53},[36,49093,32992],{"class":60},[36,49095,75],{"class":49},[36,49097,49098],{"class":38,"line":10653},[36,49099,194],{"emptyLinePlaceholder":193},[36,49101,49102],{"class":38,"line":10659},[36,49103,33003],{"class":42},[36,49105,49106,49108,49110],{"class":38,"line":10667},[36,49107,33008],{"class":49},[36,49109,54],{"class":53},[36,49111,33013],{"class":49},[36,49113,49114],{"class":38,"line":10672},[36,49115,194],{"emptyLinePlaceholder":193},[36,49117,49118],{"class":38,"line":17348},[36,49119,33022],{"class":42},[36,49121,49122,49124,49126],{"class":38,"line":17354},[36,49123,32031],{"class":49},[36,49125,54],{"class":53},[36,49127,33031],{"class":49},[36,49129,49130],{"class":38,"line":17377},[36,49131,33036],{"class":42},[36,49133,49134],{"class":38,"line":17383},[36,49135,33041],{"class":42},[36,49137,49138],{"class":38,"line":17406},[36,49139,33046],{"class":42},[36,49141,49142,49144,49146],{"class":38,"line":17420},[36,49143,33051],{"class":49},[36,49145,54],{"class":53},[36,49147,33056],{"class":49},[36,49149,49150],{"class":38,"line":17440},[36,49151,194],{"emptyLinePlaceholder":193},[36,49153,49154],{"class":38,"line":17446},[36,49155,33069],{"class":42},[36,49157,49158],{"class":38,"line":17457},[36,49159,33074],{"class":42},[36,49161,49162,49164,49166],{"class":38,"line":17480},[36,49163,33079],{"class":49},[36,49165,54],{"class":53},[36,49167,33084],{"class":60},[36,49169,49170],{"class":38,"line":17502},[36,49171,33089],{"class":42},[36,49173,49174,49176,49178],{"class":38,"line":17507},[36,49175,33094],{"class":49},[36,49177,54],{"class":53},[36,49179,33099],{"class":49},[36,49181,49182],{"class":38,"line":17513},[36,49183,33104],{"class":42},[36,49185,49186,49188,49190],{"class":38,"line":17527},[36,49187,33109],{"class":49},[36,49189,54],{"class":53},[36,49191,33099],{"class":49},[36,49193,49194],{"class":38,"line":17540},[36,49195,33118],{"class":42},[36,49197,49198,49200,49202],{"class":38,"line":17545},[36,49199,33123],{"class":49},[36,49201,54],{"class":53},[36,49203,33099],{"class":49},[36,49205,49206],{"class":38,"line":17559},[36,49207,33132],{"class":42},[36,49209,49210,49212,49214],{"class":38,"line":17564},[36,49211,33137],{"class":49},[36,49213,54],{"class":53},[36,49215,33099],{"class":49},[36,49217,49218],{"class":38,"line":17570},[36,49219,194],{"emptyLinePlaceholder":193},[36,49221,49222],{"class":38,"line":17575},[36,49223,33150],{"class":42},[36,49225,49226,49228,49230],{"class":38,"line":17589},[36,49227,33155],{"class":49},[36,49229,54],{"class":53},[36,49231,33160],{"class":49},[36,49233,49234],{"class":38,"line":17594},[36,49235,194],{"emptyLinePlaceholder":193},[36,49237,49238],{"class":38,"line":17599},[36,49239,33173],{"class":42},[36,49241,49242,49244,49246,49248,49250],{"class":38,"line":17613},[36,49243,3950],{"class":53},[36,49245,33180],{"class":49},[36,49247,26788],{"class":53},[36,49249,33185],{"class":60},[36,49251,33188],{"class":49},[36,49253,49254,49256,49258,49260,49262,49264,49266,49268,49270,49272,49274],{"class":38,"line":17625},[36,49255,33193],{"class":60},[36,49257,901],{"class":49},[36,49259,33198],{"class":998},[36,49261,33201],{"class":60},[36,49263,1466],{"class":998},[36,49265,33201],{"class":60},[36,49267,1141],{"class":998},[36,49269,33210],{"class":49},[36,49271,1414],{"class":53},[36,49273,61],{"class":60},[36,49275,31239],{"class":49},[36,49277,49278,49280,49282,49284,49286,49288],{"class":38,"line":17630},[36,49279,33193],{"class":60},[36,49281,901],{"class":49},[36,49283,33225],{"class":998},[36,49285,1339],{"class":53},[36,49287,332],{"class":60},[36,49289,75],{"class":49},[36,49291,49292],{"class":38,"line":17643},[36,49293,194],{"emptyLinePlaceholder":193},[36,49295,49296],{"class":38,"line":17648},[36,49297,33240],{"class":42},[36,49299,49300],{"class":38,"line":17653},[36,49301,33245],{"class":42},[36,49303,49304,49306,49308],{"class":38,"line":17658},[36,49305,33250],{"class":49},[36,49307,54],{"class":53},[36,49309,33084],{"class":60},[36,49311,49312],{"class":38,"line":17671},[36,49313,33259],{"class":42},[36,49315,49316,49318,49320],{"class":38,"line":17676},[36,49317,33264],{"class":49},[36,49319,54],{"class":53},[36,49321,3834],{"class":60},[36,49323,49324],{"class":38,"line":33375},[36,49325,33273],{"class":42},[36,49327,49328,49330,49332],{"class":38,"line":33381},[36,49329,33278],{"class":49},[36,49331,54],{"class":53},[36,49333,33084],{"class":60},[36,49335,49336],{"class":38,"line":33387},[36,49337,33287],{"class":42},[36,49339,49340,49342,49344],{"class":38,"line":33393},[36,49341,33292],{"class":49},[36,49343,54],{"class":53},[36,49345,3834],{"class":60},[36,49347,49348],{"class":38,"line":33399},[36,49349,33301],{"class":42},[36,49351,49352,49354,49356],{"class":38,"line":33410},[36,49353,33306],{"class":49},[36,49355,54],{"class":53},[36,49357,3834],{"class":60},[36,49359,49360],{"class":38,"line":33416},[36,49361,33315],{"class":42},[36,49363,49364,49366,49368],{"class":38,"line":33436},[36,49365,33320],{"class":49},[36,49367,54],{"class":53},[36,49369,3834],{"class":60},[36,49371,49372],{"class":38,"line":33442},[36,49373,33329],{"class":42},[36,49375,49376,49378,49380,49382,49384],{"class":38,"line":33453},[36,49377,4152],{"class":53},[36,49379,32343],{"class":49},[36,49381,26788],{"class":53},[36,49383,32348],{"class":60},[36,49385,33342],{"class":49},[36,49387,49388],{"class":38,"line":33459},[36,49389,33347],{"class":42},[36,49391,49392,49394,49396],{"class":38,"line":33465},[36,49393,33352],{"class":49},[36,49395,54],{"class":53},[36,49397,33357],{"class":49},[36,49399,49400],{"class":38,"line":33471},[36,49401,33362],{"class":42},[36,49403,49404,49406,49408],{"class":38,"line":33477},[36,49405,33367],{"class":49},[36,49407,54],{"class":53},[36,49409,33372],{"class":49},[36,49411,49412],{"class":38,"line":33483},[36,49413,33378],{"class":42},[36,49415,49416],{"class":38,"line":33489},[36,49417,33384],{"class":49},[36,49419,49420],{"class":38,"line":33495},[36,49421,33390],{"class":42},[36,49423,49424],{"class":38,"line":33515},[36,49425,33396],{"class":42},[36,49427,49428,49430,49432],{"class":38,"line":33521},[36,49429,33402],{"class":49},[36,49431,54],{"class":53},[36,49433,33407],{"class":49},[36,49435,49436],{"class":38,"line":33537},[36,49437,33413],{"class":42},[36,49439,49440,49442,49444,49446,49448,49450,49452],{"class":38,"line":33543},[36,49441,33419],{"class":49},[36,49443,54],{"class":53},[36,49445,33424],{"class":49},[36,49447,33427],{"class":416},[36,49449,54],{"class":53},[36,49451,61],{"class":60},[36,49453,75],{"class":49},[36,49455,49456],{"class":38,"line":33557},[36,49457,33439],{"class":42},[36,49459,49460,49462,49464],{"class":38,"line":33563},[36,49461,33445],{"class":49},[36,49463,54],{"class":53},[36,49465,33450],{"class":49},[36,49467,49468],{"class":38,"line":33578},[36,49469,33456],{"class":42},[36,49471,49472],{"class":38,"line":33584},[36,49473,33462],{"class":49},[36,49475,49476],{"class":38,"line":33593},[36,49477,33468],{"class":42},[36,49479,49480],{"class":38,"line":33599},[36,49481,33474],{"class":49},[36,49483,49484],{"class":38,"line":33608},[36,49485,33480],{"class":42},[36,49487,49488],{"class":38,"line":33614},[36,49489,33486],{"class":49},[36,49491,49492],{"class":38,"line":33620},[36,49493,33492],{"class":42},[36,49495,49496,49498,49500,49502,49504,49506,49508],{"class":38,"line":33629},[36,49497,33498],{"class":49},[36,49499,10224],{"class":53},[36,49501,33503],{"class":49},[36,49503,1339],{"class":53},[36,49505,33508],{"class":49},[36,49507,643],{"class":60},[36,49509,75],{"class":49},[36,49511,49512],{"class":38,"line":33635},[36,49513,33518],{"class":42},[36,49515,49516,49518,49520,49522,49524],{"class":38,"line":33646},[36,49517,33524],{"class":49},[36,49519,10224],{"class":53},[36,49521,33529],{"class":49},[36,49523,3698],{"class":53},[36,49525,33534],{"class":49},[36,49527,49528],{"class":38,"line":33652},[36,49529,33540],{"class":42},[36,49531,49532,49534,49536,49538,49540],{"class":38,"line":33671},[36,49533,33546],{"class":49},[36,49535,10224],{"class":53},[36,49537,33508],{"class":49},[36,49539,643],{"class":60},[36,49541,75],{"class":49},[36,49543,49544],{"class":38,"line":33677},[36,49545,33560],{"class":42},[36,49547,49548,49550,49552,49554,49556],{"class":38,"line":33688},[36,49549,4152],{"class":53},[36,49551,33568],{"class":49},[36,49553,26788],{"class":53},[36,49555,32348],{"class":60},[36,49557,33575],{"class":49},[36,49559,49560],{"class":38,"line":33694},[36,49561,33581],{"class":42},[36,49563,49564,49566,49568],{"class":38,"line":33714},[36,49565,33352],{"class":49},[36,49567,54],{"class":53},[36,49569,33357],{"class":49},[36,49571,49572],{"class":38,"line":33730},[36,49573,33596],{"class":42},[36,49575,49576,49578,49580],{"class":38,"line":33736},[36,49577,33367],{"class":49},[36,49579,54],{"class":53},[36,49581,33372],{"class":49},[36,49583,49584],{"class":38,"line":33750},[36,49585,33611],{"class":42},[36,49587,49588],{"class":38,"line":33756},[36,49589,33617],{"class":49},[36,49591,49592],{"class":38,"line":33762},[36,49593,37098],{"class":42},[36,49595,49596,49598],{"class":38,"line":33773},[36,49597,33623],{"class":53},[36,49599,33626],{"class":49},[36,49601,49602],{"class":38,"line":33779},[36,49603,33632],{"class":42},[36,49605,49606,49608,49610],{"class":38,"line":33785},[36,49607,37113],{"class":49},[36,49609,54],{"class":53},[36,49611,33407],{"class":49},[36,49613,49614],{"class":38,"line":33795},[36,49615,33649],{"class":42},[36,49617,49618,49620,49622,49624,49626,49628,49630],{"class":38,"line":33801},[36,49619,37126],{"class":49},[36,49621,54],{"class":53},[36,49623,33424],{"class":49},[36,49625,33427],{"class":416},[36,49627,54],{"class":53},[36,49629,61],{"class":60},[36,49631,75],{"class":49},[36,49633,49634],{"class":38,"line":33812},[36,49635,33674],{"class":42},[36,49637,49638,49640,49642],{"class":38,"line":33818},[36,49639,37147],{"class":49},[36,49641,54],{"class":53},[36,49643,33450],{"class":49},[36,49645,49646],{"class":38,"line":33828},[36,49647,33691],{"class":42},[36,49649,49650,49652,49654,49656,49658,49660,49662],{"class":38,"line":33833},[36,49651,37160],{"class":49},[36,49653,10224],{"class":53},[36,49655,37165],{"class":49},[36,49657,1339],{"class":53},[36,49659,33508],{"class":49},[36,49661,643],{"class":60},[36,49663,75],{"class":49},[36,49665,49666,49668,49670,49672,49674],{"class":38,"line":33839},[36,49667,37178],{"class":49},[36,49669,10224],{"class":53},[36,49671,33529],{"class":49},[36,49673,3698],{"class":53},[36,49675,33534],{"class":49},[36,49677,49678],{"class":38,"line":33888},[36,49679,37191],{"class":42},[36,49681,49682,49684,49686,49688,49690],{"class":38,"line":33935},[36,49683,37196],{"class":49},[36,49685,10224],{"class":53},[36,49687,33508],{"class":49},[36,49689,643],{"class":60},[36,49691,75],{"class":49},[36,49693,49694],{"class":38,"line":33940},[36,49695,33753],{"class":42},[36,49697,49698],{"class":38,"line":33946},[36,49699,33759],{"class":42},[36,49701,49702,49704,49706],{"class":38,"line":33965},[36,49703,33765],{"class":49},[36,49705,1466],{"class":53},[36,49707,33770],{"class":49},[36,49709,49710],{"class":38,"line":33971},[36,49711,33776],{"class":42},[36,49713,49714],{"class":38,"line":33991},[36,49715,33782],{"class":42},[36,49717,49718,49720,49722],{"class":38,"line":33997},[36,49719,33788],{"class":49},[36,49721,1466],{"class":53},[36,49723,33770],{"class":49},[36,49725,49726],{"class":38,"line":34003},[36,49727,33798],{"class":42},[36,49729,49730,49732,49734],{"class":38,"line":34013},[36,49731,33804],{"class":49},[36,49733,1466],{"class":53},[36,49735,33809],{"class":49},[36,49737,49738],{"class":38,"line":34018},[36,49739,33815],{"class":42},[36,49741,49742,49744,49746],{"class":38,"line":34024},[36,49743,33821],{"class":49},[36,49745,1466],{"class":53},[36,49747,33809],{"class":49},[36,49749,49750],{"class":38,"line":34040},[36,49751,194],{"emptyLinePlaceholder":193},[36,49753,49754],{"class":38,"line":34085},[36,49755,33836],{"class":42},[36,49757,49758,49760,49762,49764,49766,49768,49770,49772,49774,49776,49778,49780,49782,49784,49786,49788,49790,49792,49794,49796],{"class":38,"line":34091},[36,49759,33193],{"class":60},[36,49761,901],{"class":49},[36,49763,4341],{"class":998},[36,49765,33201],{"class":60},[36,49767,33850],{"class":998},[36,49769,1775],{"class":60},[36,49771,33855],{"class":53},[36,49773,1825],{"class":60},[36,49775,33860],{"class":998},[36,49777,1775],{"class":60},[36,49779,33855],{"class":53},[36,49781,1825],{"class":60},[36,49783,4341],{"class":998},[36,49785,33871],{"class":49},[36,49787,1414],{"class":53},[36,49789,61],{"class":60},[36,49791,33878],{"class":49},[36,49793,1414],{"class":53},[36,49795,61],{"class":60},[36,49797,33885],{"class":49},[36,49799,49800,49802,49804,49806,49808,49810,49812,49814,49816,49818,49820,49822,49824,49826,49828,49830,49832,49834,49836,49838],{"class":38,"line":34097},[36,49801,33193],{"class":60},[36,49803,901],{"class":49},[36,49805,4341],{"class":998},[36,49807,33201],{"class":60},[36,49809,33899],{"class":998},[36,49811,1775],{"class":60},[36,49813,33855],{"class":53},[36,49815,1825],{"class":60},[36,49817,33908],{"class":998},[36,49819,1775],{"class":60},[36,49821,33855],{"class":53},[36,49823,1825],{"class":60},[36,49825,4341],{"class":998},[36,49827,33919],{"class":49},[36,49829,1414],{"class":53},[36,49831,61],{"class":60},[36,49833,33926],{"class":49},[36,49835,1414],{"class":53},[36,49837,61],{"class":60},[36,49839,33885],{"class":49},[36,49841,49842],{"class":38,"line":34103},[36,49843,194],{"emptyLinePlaceholder":193},[36,49845,49846],{"class":38,"line":34114},[36,49847,33943],{"class":42},[36,49849,49850,49852,49854,49856,49858,49860,49862],{"class":38,"line":34120},[36,49851,3246],{"class":53},[36,49853,33951],{"class":49},[36,49855,1414],{"class":53},[36,49857,61],{"class":60},[36,49859,1819],{"class":49},[36,49861,1839],{"class":53},[36,49863,33962],{"class":49},[36,49865,49866],{"class":38,"line":34126},[36,49867,33968],{"class":42},[36,49869,49870,49872,49874,49876,49878,49880,49882],{"class":38,"line":34132},[36,49871,33974],{"class":49},[36,49873,478],{"class":60},[36,49875,54],{"class":53},[36,49877,33981],{"class":49},[36,49879,1414],{"class":53},[36,49881,61],{"class":60},[36,49883,33988],{"class":49},[36,49885,49886],{"class":38,"line":34150},[36,49887,33994],{"class":42},[36,49889,49890],{"class":38,"line":34164},[36,49891,34000],{"class":42},[36,49893,49894,49896,49898],{"class":38,"line":34173},[36,49895,34006],{"class":49},[36,49897,54],{"class":53},[36,49899,33056],{"class":49},[36,49901,49902],{"class":38,"line":34182},[36,49903,194],{"emptyLinePlaceholder":193},[36,49905,49906],{"class":38,"line":34191},[36,49907,34021],{"class":42},[36,49909,49910,49912,49914,49916,49918],{"class":38,"line":34200},[36,49911,34027],{"class":49},[36,49913,54],{"class":53},[36,49915,34032],{"class":49},[36,49917,1414],{"class":53},[36,49919,34037],{"class":49},[36,49921,49922,49924,49926,49928,49930,49932,49934,49936,49938,49940,49942,49944,49946,49948,49950,49952,49954,49956],{"class":38,"line":34206},[36,49923,33193],{"class":60},[36,49925,901],{"class":49},[36,49927,34047],{"class":998},[36,49929,1775],{"class":60},[36,49931,34052],{"class":53},[36,49933,1825],{"class":60},[36,49935,1426],{"class":998},[36,49937,1775],{"class":60},[36,49939,34052],{"class":53},[36,49941,1825],{"class":60},[36,49943,34065],{"class":998},[36,49945,34068],{"class":49},[36,49947,34071],{"class":53},[36,49949,1786],{"class":60},[36,49951,34076],{"class":49},[36,49953,1214],{"class":53},[36,49955,1786],{"class":60},[36,49957,31239],{"class":49},[36,49959,49960],{"class":38,"line":34212},[36,49961,37475],{"class":42},[36,49963,49964],{"class":38,"line":34220},[36,49965,37480],{"class":42},[36,49967,49968,49970,49972],{"class":38,"line":34225},[36,49969,37485],{"class":49},[36,49971,34109],{"class":998},[36,49973,75],{"class":49},[36,49975,49976],{"class":38,"line":34231},[36,49977,34129],{"class":42},[36,49979,49980,49982,49984,49986,49988,49990],{"class":38,"line":34242},[36,49981,34135],{"class":49},[36,49983,54],{"class":53},[36,49985,34140],{"class":49},[36,49987,34143],{"class":416},[36,49989,54],{"class":53},[36,49991,2296],{"class":49},[36,49993,49994,49996,49998,50000],{"class":38,"line":34248},[36,49995,34153],{"class":998},[36,49997,1738],{"class":49},[36,49999,34158],{"class":60},[36,50001,34161],{"class":49},[36,50003,50004,50006],{"class":38,"line":34268},[36,50005,34167],{"class":998},[36,50007,34170],{"class":49},[36,50009,50010,50012],{"class":38,"line":34274},[36,50011,34176],{"class":998},[36,50013,34179],{"class":49},[36,50015,50016,50018],{"class":38,"line":34280},[36,50017,34185],{"class":998},[36,50019,34188],{"class":49},[36,50021,50022,50024],{"class":38,"line":34286},[36,50023,34194],{"class":998},[36,50025,34197],{"class":49},[36,50027,50028],{"class":38,"line":34303},[36,50029,34203],{"class":49},[36,50031,50032],{"class":38,"line":34309},[36,50033,34209],{"class":42},[36,50035,50036,50038],{"class":38,"line":34315},[36,50037,4839],{"class":53},[36,50039,34217],{"class":49},[36,50041,50042],{"class":38,"line":34321},[36,50043,194],{"emptyLinePlaceholder":193},[36,50045,50046],{"class":38,"line":34327},[36,50047,34228],{"class":42},[36,50049,50050,50052,50054],{"class":38,"line":34333},[36,50051,32689],{"class":53},[36,50053,34236],{"class":2713},[36,50055,34239],{"class":49},[36,50057,50058],{"class":38,"line":34360},[36,50059,34245],{"class":42},[36,50061,50062,50064,50066,50068,50070,50072,50074,50076],{"class":38,"line":34384},[36,50063,34251],{"class":49},[36,50065,32435],{"class":416},[36,50067,54],{"class":53},[36,50069,901],{"class":49},[36,50071,625],{"class":60},[36,50073,64],{"class":49},[36,50075,186],{"class":60},[36,50077,31239],{"class":49},[36,50079,50080],{"class":38,"line":34390},[36,50081,34271],{"class":42},[36,50083,50084],{"class":38,"line":34396},[36,50085,34277],{"class":42},[36,50087,50088],{"class":38,"line":34402},[36,50089,34283],{"class":42},[36,50091,50092,50094,50096,50098,50100,50102,50104],{"class":38,"line":34413},[36,50093,32469],{"class":49},[36,50095,61],{"class":60},[36,50097,64],{"class":49},[36,50099,181],{"class":60},[36,50101,64],{"class":49},[36,50103,61],{"class":60},[36,50105,75],{"class":49},[36,50107,50108],{"class":38,"line":34424},[36,50109,34306],{"class":42},[36,50111,50112],{"class":38,"line":34430},[36,50113,34312],{"class":42},[36,50115,50116],{"class":38,"line":34447},[36,50117,34318],{"class":42},[36,50119,50120],{"class":38,"line":34470},[36,50121,34324],{"class":42},[36,50123,50124],{"class":38,"line":34493},[36,50125,34330],{"class":42},[36,50127,50128,50130,50132,50134,50136,50138,50140,50142,50144],{"class":38,"line":34499},[36,50129,34336],{"class":49},[36,50131,34339],{"class":998},[36,50133,34342],{"class":49},[36,50135,34345],{"class":998},[36,50137,64],{"class":49},[36,50139,34350],{"class":416},[36,50141,54],{"class":53},[36,50143,34355],{"class":998},[36,50145,75],{"class":49},[36,50147,50148,50150,50152,50154,50156,50158,50160,50162,50164],{"class":38,"line":34504},[36,50149,34336],{"class":49},[36,50151,34339],{"class":998},[36,50153,34367],{"class":49},[36,50155,34370],{"class":998},[36,50157,64],{"class":49},[36,50159,34350],{"class":416},[36,50161,54],{"class":53},[36,50163,34379],{"class":998},[36,50165,75],{"class":49},[36,50167,50168],{"class":38,"line":34513},[36,50169,34387],{"class":42},[36,50171,50172],{"class":38,"line":34523},[36,50173,34393],{"class":49},[36,50175,50176],{"class":38,"line":34529},[36,50177,34399],{"class":42},[36,50179,50180,50182,50184],{"class":38,"line":34534},[36,50181,34405],{"class":49},[36,50183,34408],{"class":998},[36,50185,75],{"class":49},[36,50187,50188,50190,50192],{"class":38,"line":34540},[36,50189,34416],{"class":49},[36,50191,34419],{"class":998},[36,50193,75],{"class":49},[36,50195,50196],{"class":38,"line":34553},[36,50197,34427],{"class":42},[36,50199,50200,50202,50204,50206,50208,50210,50212],{"class":38,"line":34559},[36,50201,32469],{"class":49},[36,50203,61],{"class":60},[36,50205,64],{"class":49},[36,50207,181],{"class":60},[36,50209,64],{"class":49},[36,50211,181],{"class":60},[36,50213,75],{"class":49},[36,50215,50216,50218,50220,50222,50224,50226,50228,50230,50232],{"class":38,"line":34570},[36,50217,34336],{"class":49},[36,50219,34339],{"class":998},[36,50221,34454],{"class":49},[36,50223,34345],{"class":998},[36,50225,64],{"class":49},[36,50227,34350],{"class":416},[36,50229,54],{"class":53},[36,50231,34465],{"class":998},[36,50233,75],{"class":49},[36,50235,50236,50238,50240,50242,50244,50246,50248,50250,50252],{"class":38,"line":34581},[36,50237,34336],{"class":49},[36,50239,34339],{"class":998},[36,50241,34477],{"class":49},[36,50243,34370],{"class":998},[36,50245,64],{"class":49},[36,50247,34350],{"class":416},[36,50249,54],{"class":53},[36,50251,34488],{"class":998},[36,50253,75],{"class":49},[36,50255,50256],{"class":38,"line":34600},[36,50257,34496],{"class":42},[36,50259,50261],{"class":38,"line":50260},219,[36,50262,34393],{"class":49},[36,50264,50266,50268,50270],{"class":38,"line":50265},220,[36,50267,34405],{"class":49},[36,50269,34339],{"class":998},[36,50271,75],{"class":49},[36,50273,50275,50277,50279],{"class":38,"line":50274},221,[36,50276,34416],{"class":49},[36,50278,34518],{"class":998},[36,50280,75],{"class":49},[36,50282,50284],{"class":38,"line":50283},222,[36,50285,34526],{"class":49},[36,50287,50289],{"class":38,"line":50288},223,[36,50290,194],{"emptyLinePlaceholder":193},[36,50292,50294],{"class":38,"line":50293},224,[36,50295,34537],{"class":42},[36,50297,50299,50301,50303,50305,50307],{"class":38,"line":50298},225,[36,50300,2281],{"class":53},[36,50302,31962],{"class":60},[36,50304,3698],{"class":53},[36,50306,31967],{"class":998},[36,50308,4488],{"class":49},[36,50310,50312],{"class":38,"line":50311},226,[36,50313,34556],{"class":42},[36,50315,50317,50319,50321],{"class":38,"line":50316},227,[36,50318,45288],{"class":49},[36,50320,54],{"class":53},[36,50322,45293],{"class":49},[36,50324,50326,50328,50330],{"class":38,"line":50325},228,[36,50327,34573],{"class":49},[36,50329,54],{"class":53},[36,50331,34578],{"class":49},[36,50333,50335,50337,50339,50341,50343,50345,50347],{"class":38,"line":50334},229,[36,50336,34135],{"class":49},[36,50338,54],{"class":53},[36,50340,45310],{"class":49},[36,50342,34591],{"class":416},[36,50344,54],{"class":53},[36,50346,1786],{"class":60},[36,50348,75],{"class":49},[36,50350,50352],{"class":38,"line":50351},230,[36,50353,34603],{"class":49},[22742,50355,50357],{"id":50356},"_242测试代码","2.4.2.测试代码",[14,50359,50360],{},"使用测试集进行测试与推理",[26,50362,50364],{"className":28,"code":50363,"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,50365,50366,50372,50382,50392,50403,50413,50417,50421,50429,50434,50438,50455,50459,50463,50467,50471,50475,50507,50511,50519,50523,50535,50539,50543,50547,50551,50555,50559,50563,50567,50585,50599,50603,50613,50623,50633,50639,50643,50647,50655,50659,50675,50683,50687,50691,50699,50707,50711,50715,50719,50723,50729,50733,50743,50751,50759,50763,50767,50771,50779,50783,50799,50803,50807,50811,50823,50827,50839,50843,50847,50859,50863,50873,50877,50881,50893,50897,50905,50909,50913,50921,50925,50933,50937,50941,50945,50949,50953,50969,50977,50981,50985,51003,51009,51013,51023,51031,51039,51043,51047,51051,51055,51063,51067,51083,51087,51095,51103],{"__ignoreMap":31},[36,50367,50368,50370],{"class":38,"line":39},[36,50369,31135],{"class":53},[36,50371,31138],{"class":49},[36,50373,50374,50376,50378,50380],{"class":38,"line":46},[36,50375,31135],{"class":53},[36,50377,32157],{"class":49},[36,50379,32125],{"class":53},[36,50381,32162],{"class":49},[36,50383,50384,50386,50388,50390],{"class":38,"line":78},[36,50385,31479],{"class":53},[36,50387,32140],{"class":49},[36,50389,31135],{"class":53},[36,50391,32145],{"class":49},[36,50393,50394,50396,50398,50400],{"class":38,"line":125},[36,50395,31479],{"class":53},[36,50397,32110],{"class":49},[36,50399,31135],{"class":53},[36,50401,50402],{"class":49}," ImageFolder\n",[36,50404,50405,50407,50409,50411],{"class":38,"line":131},[36,50406,31479],{"class":53},[36,50408,32656],{"class":49},[36,50410,31135],{"class":53},[36,50412,45382],{"class":49},[36,50414,50415],{"class":38,"line":396},[36,50416,194],{"emptyLinePlaceholder":193},[36,50418,50419],{"class":38,"line":407},[36,50420,34693],{"class":42},[36,50422,50423,50425,50427],{"class":38,"line":2061},[36,50424,32689],{"class":53},[36,50426,34700],{"class":2713},[36,50428,32695],{"class":49},[36,50430,50431],{"class":38,"line":2067},[36,50432,50433],{"class":42},"   # 导入自己的数据集，并进行数据处理\n",[36,50435,50436],{"class":38,"line":2079},[36,50437,48703],{"class":42},[36,50439,50440,50442,50444,50446,50448,50450,50453],{"class":38,"line":2362},[36,50441,48708],{"class":60},[36,50443,54],{"class":53},[36,50445,1552],{"class":53},[36,50447,1141],{"class":998},[36,50449,1440],{"class":60},[36,50451,50452],{"class":48719},"\u002Fdata\u002Ftest",[36,50454,25878],{"class":998},[36,50456,50457],{"class":38,"line":2367},[36,50458,194],{"emptyLinePlaceholder":193},[36,50460,50461],{"class":38,"line":2373},[36,50462,48731],{"class":42},[36,50464,50465],{"class":38,"line":2378},[36,50466,48736],{"class":42},[36,50468,50469],{"class":38,"line":2392},[36,50470,48741],{"class":42},[36,50472,50473],{"class":38,"line":2397},[36,50474,48746],{"class":42},[36,50476,50477,50479,50481,50483,50485,50487,50489,50491,50493,50495,50497,50499,50501,50503,50505],{"class":38,"line":2403},[36,50478,48751],{"class":49},[36,50480,54],{"class":53},[36,50482,48756],{"class":49},[36,50484,48759],{"class":60},[36,50486,64],{"class":49},[36,50488,48764],{"class":60},[36,50490,64],{"class":49},[36,50492,48769],{"class":60},[36,50494,48772],{"class":49},[36,50496,48775],{"class":60},[36,50498,64],{"class":49},[36,50500,48780],{"class":60},[36,50502,64],{"class":49},[36,50504,48785],{"class":60},[36,50506,165],{"class":49},[36,50508,50509],{"class":38,"line":2424},[36,50510,48792],{"class":42},[36,50512,50513,50515,50517],{"class":38,"line":2429},[36,50514,48797],{"class":49},[36,50516,54],{"class":53},[36,50518,48802],{"class":49},[36,50520,50521],{"class":38,"line":2443},[36,50522,48807],{"class":42},[36,50524,50525,50527,50529,50531,50533],{"class":38,"line":2448},[36,50526,48812],{"class":49},[36,50528,32243],{"class":60},[36,50530,64],{"class":49},[36,50532,32243],{"class":60},[36,50534,43364],{"class":49},[36,50536,50537],{"class":38,"line":2477},[36,50538,48825],{"class":42},[36,50540,50541],{"class":38,"line":2482},[36,50542,48830],{"class":49},[36,50544,50545],{"class":38,"line":2499},[36,50546,48835],{"class":49},[36,50548,50549],{"class":38,"line":2504},[36,50550,48840],{"class":42},[36,50552,50553],{"class":38,"line":2509},[36,50554,48845],{"class":42},[36,50556,50557],{"class":38,"line":2514},[36,50558,194],{"emptyLinePlaceholder":193},[36,50560,50561],{"class":38,"line":2528},[36,50562,48854],{"class":42},[36,50564,50565],{"class":38,"line":2533},[36,50566,48859],{"class":42},[36,50568,50569,50571,50573,50575,50577,50579,50581,50583],{"class":38,"line":3326},[36,50570,34707],{"class":49},[36,50572,54],{"class":53},[36,50574,48868],{"class":49},[36,50576,48871],{"class":60},[36,50578,64],{"class":49},[36,50580,48876],{"class":416},[36,50582,54],{"class":53},[36,50584,48881],{"class":49},[36,50586,50587,50589,50591,50593,50595,50597],{"class":38,"line":3340},[36,50588,34764],{"class":49},[36,50590,54],{"class":53},[36,50592,32276],{"class":49},[36,50594,32279],{"class":416},[36,50596,54],{"class":53},[36,50598,34775],{"class":49},[36,50600,50601],{"class":38,"line":3348},[36,50602,34780],{"class":42},[36,50604,50605,50607,50609,50611],{"class":38,"line":3353},[36,50606,34785],{"class":416},[36,50608,54],{"class":53},[36,50610,61],{"class":60},[36,50612,32208],{"class":49},[36,50614,50615,50617,50619,50621],{"class":38,"line":3359},[36,50616,34796],{"class":416},[36,50618,54],{"class":53},[36,50620,32218],{"class":60},[36,50622,32208],{"class":49},[36,50624,50625,50627,50629,50631],{"class":38,"line":3365},[36,50626,34807],{"class":416},[36,50628,54],{"class":53},[36,50630,643],{"class":60},[36,50632,75],{"class":49},[36,50634,50635,50637],{"class":38,"line":3370},[36,50636,4839],{"class":53},[36,50638,34820],{"class":49},[36,50640,50641],{"class":38,"line":8695},[36,50642,194],{"emptyLinePlaceholder":193},[36,50644,50645],{"class":38,"line":8719},[36,50646,34829],{"class":42},[36,50648,50649,50651,50653],{"class":38,"line":8724},[36,50650,32689],{"class":53},[36,50652,34836],{"class":2713},[36,50654,34839],{"class":49},[36,50656,50657],{"class":38,"line":8730},[36,50658,34844],{"class":42},[36,50660,50661,50663,50665,50667,50669,50671,50673],{"class":38,"line":8757},[36,50662,31979],{"class":49},[36,50664,54],{"class":53},[36,50666,31986],{"class":998},[36,50668,2454],{"class":53},[36,50670,31991],{"class":49},[36,50672,2451],{"class":53},[36,50674,34861],{"class":998},[36,50676,50677,50679,50681],{"class":38,"line":8762},[36,50678,32031],{"class":49},[36,50680,54],{"class":53},[36,50682,33031],{"class":49},[36,50684,50685],{"class":38,"line":8768},[36,50686,194],{"emptyLinePlaceholder":193},[36,50688,50689],{"class":38,"line":8780},[36,50690,34878],{"class":42},[36,50692,50693,50695,50697],{"class":38,"line":8792},[36,50694,34883],{"class":49},[36,50696,54],{"class":53},[36,50698,33084],{"class":60},[36,50700,50701,50703,50705],{"class":38,"line":8804},[36,50702,34892],{"class":49},[36,50704,54],{"class":53},[36,50706,3834],{"class":60},[36,50708,50709],{"class":38,"line":10463},[36,50710,194],{"emptyLinePlaceholder":193},[36,50712,50713],{"class":38,"line":10488},[36,50714,34905],{"class":42},[36,50716,50717],{"class":38,"line":10511},[36,50718,34910],{"class":42},[36,50720,50721],{"class":38,"line":10535},[36,50722,34915],{"class":42},[36,50724,50725,50727],{"class":38,"line":10540},[36,50726,34920],{"class":53},[36,50728,33626],{"class":49},[36,50730,50731],{"class":38,"line":10545},[36,50732,34927],{"class":42},[36,50734,50735,50737,50739,50741],{"class":38,"line":10550},[36,50736,4152],{"class":53},[36,50738,34934],{"class":49},[36,50740,26788],{"class":53},[36,50742,34939],{"class":49},[36,50744,50745,50747,50749],{"class":38,"line":10559},[36,50746,34944],{"class":49},[36,50748,54],{"class":53},[36,50750,34949],{"class":49},[36,50752,50753,50755,50757],{"class":38,"line":10564},[36,50754,34954],{"class":49},[36,50756,54],{"class":53},[36,50758,34959],{"class":49},[36,50760,50761],{"class":38,"line":10570},[36,50762,34964],{"class":42},[36,50764,50765],{"class":38,"line":10591},[36,50766,33617],{"class":49},[36,50768,50769],{"class":38,"line":10597},[36,50770,34973],{"class":42},[36,50772,50773,50775,50777],{"class":38,"line":10611},[36,50774,33402],{"class":49},[36,50776,54],{"class":53},[36,50778,34982],{"class":49},[36,50780,50781],{"class":38,"line":10617},[36,50782,34987],{"class":42},[36,50784,50785,50787,50789,50791,50793,50795,50797],{"class":38,"line":10644},[36,50786,33419],{"class":49},[36,50788,54],{"class":53},[36,50790,33424],{"class":49},[36,50792,33427],{"class":416},[36,50794,54],{"class":53},[36,50796,61],{"class":60},[36,50798,75],{"class":49},[36,50800,50801],{"class":38,"line":10653},[36,50802,35008],{"class":42},[36,50804,50805],{"class":38,"line":10659},[36,50806,35013],{"class":42},[36,50808,50809],{"class":38,"line":10667},[36,50810,35018],{"class":42},[36,50812,50813,50815,50817,50819,50821],{"class":38,"line":10672},[36,50814,35023],{"class":49},[36,50816,10224],{"class":53},[36,50818,33529],{"class":49},[36,50820,3698],{"class":53},[36,50822,35032],{"class":49},[36,50824,50825],{"class":38,"line":17348},[36,50826,35037],{"class":42},[36,50828,50829,50831,50833,50835,50837],{"class":38,"line":17354},[36,50830,35042],{"class":49},[36,50832,10224],{"class":53},[36,50834,35047],{"class":49},[36,50836,643],{"class":60},[36,50838,75],{"class":49},[36,50840,50841],{"class":38,"line":17377},[36,50842,194],{"emptyLinePlaceholder":193},[36,50844,50845],{"class":38,"line":17383},[36,50846,35060],{"class":42},[36,50848,50849,50851,50853,50855,50857],{"class":38,"line":17406},[36,50850,35065],{"class":49},[36,50852,54],{"class":53},[36,50854,35070],{"class":49},[36,50856,1466],{"class":53},[36,50858,35075],{"class":49},[36,50860,50861],{"class":38,"line":17420},[36,50862,35080],{"class":42},[36,50864,50865,50867,50869,50871],{"class":38,"line":17440},[36,50866,33193],{"class":60},[36,50868,901],{"class":49},[36,50870,35089],{"class":998},[36,50872,35092],{"class":49},[36,50874,50875],{"class":38,"line":17446},[36,50876,194],{"emptyLinePlaceholder":193},[36,50878,50879],{"class":38,"line":17457},[36,50880,35101],{"class":42},[36,50882,50883,50885,50887,50889,50891],{"class":38,"line":17480},[36,50884,2281],{"class":53},[36,50886,31962],{"class":60},[36,50888,3698],{"class":53},[36,50890,31967],{"class":998},[36,50892,4488],{"class":49},[36,50894,50895],{"class":38,"line":17502},[36,50896,35118],{"class":42},[36,50898,50899,50901,50903],{"class":38,"line":17507},[36,50900,32031],{"class":49},[36,50902,54],{"class":53},[36,50904,45293],{"class":49},[36,50906,50907],{"class":38,"line":17513},[36,50908,35131],{"class":42},[36,50910,50911],{"class":38,"line":17527},[36,50912,35136],{"class":42},[36,50914,50915,50917,50919],{"class":38,"line":17540},[36,50916,35141],{"class":49},[36,50918,35144],{"class":998},[36,50920,31239],{"class":49},[36,50922,50923],{"class":38,"line":17545},[36,50924,35151],{"class":42},[36,50926,50927,50929,50931],{"class":38,"line":17559},[36,50928,34764],{"class":49},[36,50930,54],{"class":53},[36,50932,35160],{"class":49},[36,50934,50935],{"class":38,"line":17564},[36,50936,35165],{"class":42},[36,50938,50939],{"class":38,"line":17570},[36,50940,35170],{"class":49},[36,50942,50943],{"class":38,"line":17575},[36,50944,194],{"emptyLinePlaceholder":193},[36,50946,50947],{"class":38,"line":17589},[36,50948,35179],{"class":42},[36,50950,50951],{"class":38,"line":17594},[36,50952,35184],{"class":42},[36,50954,50955,50957,50959,50961,50963,50965,50967],{"class":38,"line":17599},[36,50956,31979],{"class":49},[36,50958,54],{"class":53},[36,50960,31986],{"class":998},[36,50962,2454],{"class":53},[36,50964,31991],{"class":49},[36,50966,2451],{"class":53},[36,50968,34861],{"class":998},[36,50970,50971,50973,50975],{"class":38,"line":17613},[36,50972,32031],{"class":49},[36,50974,54],{"class":53},[36,50976,33031],{"class":49},[36,50978,50979],{"class":38,"line":17625},[36,50980,35213],{"class":42},[36,50982,50983],{"class":38,"line":17630},[36,50984,35218],{"class":42},[36,50986,50987,50989,50991,50993,50996,50998,51001],{"class":38,"line":17643},[36,50988,35223],{"class":49},[36,50990,54],{"class":53},[36,50992,1769],{"class":49},[36,50994,50995],{"class":998},"'猫'",[36,50997,64],{"class":49},[36,50999,51000],{"class":998},"'狗'",[36,51002,33988],{"class":49},[36,51004,51005,51007],{"class":38,"line":17648},[36,51006,34920],{"class":53},[36,51008,33626],{"class":49},[36,51010,51011],{"class":38,"line":17653},[36,51012,35288],{"class":42},[36,51014,51015,51017,51019,51021],{"class":38,"line":17658},[36,51016,4152],{"class":53},[36,51018,35295],{"class":49},[36,51020,26788],{"class":53},[36,51022,34939],{"class":49},[36,51024,51025,51027,51029],{"class":38,"line":17671},[36,51026,33352],{"class":49},[36,51028,54],{"class":53},[36,51030,33357],{"class":49},[36,51032,51033,51035,51037],{"class":38,"line":17676},[36,51034,33367],{"class":49},[36,51036,54],{"class":53},[36,51038,33372],{"class":49},[36,51040,51041],{"class":38,"line":33375},[36,51042,194],{"emptyLinePlaceholder":193},[36,51044,51045],{"class":38,"line":33381},[36,51046,35324],{"class":42},[36,51048,51049],{"class":38,"line":33387},[36,51050,33617],{"class":49},[36,51052,51053],{"class":38,"line":33393},[36,51054,35333],{"class":42},[36,51056,51057,51059,51061],{"class":38,"line":33399},[36,51058,33402],{"class":49},[36,51060,54],{"class":53},[36,51062,33407],{"class":49},[36,51064,51065],{"class":38,"line":33410},[36,51066,35346],{"class":42},[36,51068,51069,51071,51073,51075,51077,51079,51081],{"class":38,"line":33416},[36,51070,33419],{"class":49},[36,51072,54],{"class":53},[36,51074,33424],{"class":49},[36,51076,33427],{"class":416},[36,51078,54],{"class":53},[36,51080,61],{"class":60},[36,51082,75],{"class":49},[36,51084,51085],{"class":38,"line":33436},[36,51086,35367],{"class":42},[36,51088,51089,51091,51093],{"class":38,"line":33442},[36,51090,35372],{"class":49},[36,51092,54],{"class":53},[36,51094,35377],{"class":49},[36,51096,51097,51099,51101],{"class":38,"line":33453},[36,51098,35382],{"class":49},[36,51100,54],{"class":53},[36,51102,35387],{"class":49},[36,51104,51105,51107,51109,51111,51113,51115,51117,51119],{"class":38,"line":33459},[36,51106,35392],{"class":60},[36,51108,901],{"class":49},[36,51110,35397],{"class":998},[36,51112,35400],{"class":49},[36,51114,35403],{"class":998},[36,51116,64],{"class":49},[36,51118,35408],{"class":998},[36,51120,35411],{"class":49},[807,51122,51123],{},"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":46,"depth":46,"links":51125},[51126,51127,51128,51129],{"id":31333,"depth":78,"text":31334},{"id":38581,"depth":78,"text":38582},{"id":42014,"depth":78,"text":42015},{"id":46023,"depth":78,"text":46024},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31325,"description":823},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":51136,"title":51137,"body":51138,"description":823,"extension":824,"meta":51145,"navigation":193,"path":51146,"seo":51147,"stem":51148,"__hash__":51149},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":51139,"toc":51143},[51140],[10,51141,51137],{"id":51142},"_3yolo模型学习",{"title":31,"searchDepth":46,"depth":46,"links":51144},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":51137,"description":823},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":51151,"title":51152,"body":51153,"description":51160,"extension":824,"meta":51161,"navigation":193,"path":51163,"seo":51164,"stem":51165,"__hash__":51166},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":51154,"toc":51158},[51155],[14,51156,51157],{},"yolo模型还未补充",{"title":31,"searchDepth":46,"depth":46,"links":51159},[],"深度学习学习",{"category":51162},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":51152,"description":51160},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":51168,"title":51169,"body":51170,"description":823,"extension":824,"meta":51195,"navigation":193,"path":51196,"seo":51197,"stem":51198,"__hash__":51199},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":51171,"toc":51193},[51172,51175,51178,51183,51190],[10,51173,51169],{"id":51174},"_1工具",[14,51176,51177],{},"提示错误插件：有问题会提前报错",[14,51179,51180],{},[2212,51181],{"alt":31,"src":51182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,51184,51185],{},[50,51186,51189],{"href":51187,"rel":51188},"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",[24609],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,51191,51192],{},"alt键加上下箭头可以实现语句的移动",{"title":31,"searchDepth":46,"depth":46,"links":51194},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":51169,"description":823},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":51201,"title":51202,"body":51203,"description":823,"extension":824,"meta":54067,"navigation":193,"path":54068,"seo":54069,"stem":54070,"__hash__":54071},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":51204,"toc":54018},[51205,51208,51212,51216,51221,51224,51229,51233,51240,51245,51252,51257,51264,51269,51273,51278,51281,51285,51290,51294,51299,51302,51305,51308,51311,51314,51317,51320,51323,51328,51333,51338,51342,51345,51348,51352,51357,51360,51368,51373,51390,51398,51403,51408,51413,51418,51423,51426,51431,51436,51440,51449,51454,51459,51463,51468,51471,51475,51480,51488,51493,51498,51501,51506,51511,51516,51519,51522,51525,51530,51535,51538,51543,51546,51551,51554,51557,51560,51565,51568,51571,51586,51591,51596,51601,51604,51607,51610,51624,51627,51632,51637,51640,51643,51646,51649,51652,51655,51658,51662,51666,51671,51675,51678,51683,51688,51691,51696,51699,51703,51708,51711,51714,51717,51720,51723,51726,51729,51732,51735,51739,51744,51749,51754,51757,51760,51764,51769,51772,51776,51779,51782,51787,51790,51793,51797,51801,51804,51809,51814,51817,51846,51851,51856,51861,51866,51870,51875,51879,51884,51887,51891,51895,51900,51904,51909,51914,51918,51923,51926,51928,51931,51936,51940,51945,51949,51953,51958,51963,51968,51973,51977,51982,51987,51992,51995,51998,52003,52006,52011,52016,52021,52026,52030,52837,52841,53184,53189,53192,53195,53198,53201,53204,53207,53210,53213,53215,53218,53220,53223,53227,53232,53235,53238,53241,53245,53250,53255,53275,53278,53282,53287,53292,53309,53313,53342,53346,53368,53370,53409,53417,53423,53427,53430,53433,53438,53443,53446,53449,53452,53457,53462,53465,53468,53471,53474,53477,53480,53483,53486,53489,53492,53495,53497,53500,53503,53506,53509,53512,53515,53518,53521,53525,53530,53533,53538,53541,53544,53547,53550,53553,53556,53559,53561,53564,53567,53570,53573,53576,53579,53583,53586,53595,53598,53603,53606,53611,53614,53617,53620,53623,53626,53629,53632,53636,53640,53643,53646,53651,53656,53661,53665,53670,53675,53678,53681,53684,53687,53690,53695,53698,53703,53705,53710,53713,53717,53722,53725,53728,53733,53737,53740,53745,53748,53751,53780,53785,53788,53791,53794,53797,53800,53804,53807,53893,53897,53900,53905,53910,53917,53920,53923,53926,53929,53932,53937,53942,53945,53948,53951,53954,53957,53960,53963,53966,53969,53971,53974,53978,53983,53988,53993,53996,54001,54006,54009,54012,54015],[10,51206,51202],{"id":51207},"_2基础语法",[21,51209,51211],{"id":51210},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[868,51213,51215],{"id":51214},"_211-js组成","2.1.1 js组成",[851,51217,51218],{},[854,51219,51220],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,51222,51223],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[851,51225,51226],{"start":46},[854,51227,51228],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[868,51230,51232],{"id":51231},"_212-js书写位置","2.1.2 js书写位置",[851,51234,51235],{},[854,51236,51237],{},[1043,51238,51239],{},"内部 JavaScript",[14,51241,51242],{},[2212,51243],{"alt":31,"src":51244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[851,51246,51247],{"start":46},[854,51248,51249],{},[1043,51250,51251],{},"外部 JavaScript",[14,51253,51254],{},[2212,51255],{"alt":31,"src":51256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[851,51258,51259],{"start":78},[854,51260,51261],{},[1043,51262,51263],{},"内联 JavaScript",[14,51265,51266],{},[2212,51267],{"alt":31,"src":51268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[868,51270,51272],{"id":51271},"_213-javascript注释","2.1.3 JavaScript注释",[14,51274,51275],{},[2212,51276],{"alt":31,"src":51277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,51279,51280],{},"alt+shift+a一定要记住！",[868,51282,51284],{"id":51283},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,51286,51287],{},[2212,51288],{"alt":31,"src":51289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[868,51291,51293],{"id":51292},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[851,51295,51296],{},[854,51297,51298],{},"输出语法：",[14,51300,51301],{},"①document.write('要出的内容')",[14,51303,51304],{},"向body内输出内容；",[14,51306,51307],{},"如果输出的内容写的是标签，也会被解析cheng",[14,51309,51310],{},"②alert('要出的内容')",[14,51312,51313],{},"页面弹出警告对话框",[14,51315,51316],{},"③console.log('控制台打印')",[14,51318,51319],{},"控制台输出语法，程序员调试使用",[14,51321,51322],{},"输入log就行，自动生成：",[14,51324,51325],{},[2212,51326],{"alt":31,"src":51327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[851,51329,51330],{"start":46},[854,51331,51332],{},"输入语法：",[14,51334,51335],{},[2212,51336],{"alt":31,"src":51337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[868,51339,51341],{"id":51340},"_2116-字面量","21.1.6 字面量",[14,51343,51344],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,51346,51347],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[21,51349,51351],{"id":51350},"_22-变量","2.2 变量",[851,51353,51354],{},[854,51355,51356],{},"变量声明",[14,51358,51359],{},"let 变量名",[1886,51361,51362,51365],{},[854,51363,51364],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[854,51366,51367],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[851,51369,51370],{"start":46},[854,51371,51372],{},"变量赋值",[26,51374,51378],{"className":51375,"code":51376,"language":51377,"meta":31,"style":31},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[33,51379,51380,51385],{"__ignoreMap":31},[36,51381,51382],{"class":38,"line":39},[36,51383,51384],{"class":49},"let age\n",[36,51386,51387],{"class":38,"line":46},[36,51388,51389],{"class":49},"age=18\n",[851,51391,51392,51395],{"start":78},[854,51393,51394],{},"连这些（变量的初始化）：let age=18",[854,51396,51397],{},"更新变量",[14,51399,51400],{},[2212,51401],{"alt":31,"src":51402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[851,51404,51405],{"start":131},[854,51406,51407],{},"声明多个变量",[14,51409,51410],{},[2212,51411],{"alt":31,"src":51412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[851,51414,51415],{"start":396},[854,51416,51417],{},"变量命名规则与规范",[14,51419,51420],{},[2212,51421],{"alt":31,"src":51422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,51424,51425],{},"遵守小驼峰！",[851,51427,51428],{"start":407},[854,51429,51430],{},"变量拓展-let和var的区别",[14,51432,51433],{},[2212,51434],{"alt":31,"src":51435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[21,51437,51439],{"id":51438},"_23-数组","2.3 数组",[26,51441,51443],{"className":51375,"code":51442,"language":51377,"meta":31,"style":31},"let arr = []\n",[33,51444,51445],{"__ignoreMap":31},[36,51446,51447],{"class":38,"line":39},[36,51448,51442],{"class":49},[14,51450,51451],{},[2212,51452],{"alt":31,"src":51453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,51455,51456],{},[2212,51457],{"alt":31,"src":51458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[21,51460,51462],{"id":51461},"_24-常量","2.4 常量",[14,51464,51465],{},[2212,51466],{"alt":31,"src":51467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,51469,51470],{},"const — 类似于 let ，但是变量的值无法被修改",[21,51472,51474],{"id":51473},"_25-数据类型","2.5 数据类型",[14,51476,51477],{},[2212,51478],{"alt":31,"src":51479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[851,51481,51482,51485],{},[854,51483,51484],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[854,51486,51487],{},"算数运算符：",[14,51489,51490],{},[2212,51491],{"alt":31,"src":51492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[851,51494,51495],{"start":78},[854,51496,51497],{},"数字类型（Number）",[14,51499,51500],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,51502,51503],{},[2212,51504],{"alt":31,"src":51505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[851,51507,51508],{"start":125},[854,51509,51510],{},"字符串类型（string）",[14,51512,51513],{},[2212,51514],{"alt":31,"src":51515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,51517,51518],{},"反引号也是可以使用的",[14,51520,51521],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,51523,51524],{},"例如：document.write(\"我今年\"+age+\"岁\")",[851,51526,51527],{"start":131},[854,51528,51529],{},"模板字符串",[14,51531,51532],{},[2212,51533],{"alt":31,"src":51534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,51536,51537],{},"类似于python的字符串格式化",[851,51539,51540],{"start":396},[854,51541,51542],{},"布尔类型",[14,51544,51545],{},"true 和 false",[851,51547,51548],{"start":407},[854,51549,51550],{},"未定义类型（underfined）",[14,51552,51553],{},"表示没有赋值",[14,51555,51556],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,51558,51559],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[851,51561,51562],{"start":2061},[854,51563,51564],{},"null（空类型）",[14,51566,51567],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,51569,51570],{},"赋值了，但是内容为空",[26,51572,51574],{"className":51375,"code":51573,"language":51377,"meta":31,"style":31},"typeof null\n输出的是'object'，是一个对象数据类型\n",[33,51575,51576,51581],{"__ignoreMap":31},[36,51577,51578],{"class":38,"line":39},[36,51579,51580],{"class":49},"typeof null\n",[36,51582,51583],{"class":38,"line":46},[36,51584,51585],{"class":49},"输出的是'object'，是一个对象数据类型\n",[851,51587,51588],{"start":2067},[854,51589,51590],{},"控制台检测数据类型",[14,51592,51593],{},[2212,51594],{"alt":31,"src":51595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[851,51597,51598],{"start":2079},[854,51599,51600],{},"类型转换",[14,51602,51603],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,51605,51606],{},"转换方式：隐式转换和显示转换",[14,51608,51609],{},"①隐式转换",[1886,51611,51612,51615,51618,51621],{},[854,51613,51614],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[854,51616,51617],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[854,51619,51620],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[854,51622,51623],{},"任何数据和字符串相加结果都是字符串",[14,51625,51626],{},"②显示转换",[14,51628,51629],{},[2212,51630],{"alt":31,"src":51631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,51633,51634],{},[2212,51635],{"alt":31,"src":51636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,51638,51639],{},"在输入的时候要用好隐式转换，简单写起来",[14,51641,51642],{},"let num = +prompt(’请输入数字：‘)",[14,51644,51645],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,51647,51648],{},"console.log(parseInt('12.333px'))",[14,51650,51651],{},"输出为：12",[14,51653,51654],{},"console.log(parseInt('a'a'a12.333px'))",[14,51656,51657],{},"输出：NaN",[21,51659,51661],{"id":51660},"_26-运算符","2.6 运算符",[868,51663,51665],{"id":51664},"_261-赋值运算符","2.6.1 赋值运算符",[14,51667,51668],{},[2212,51669],{"alt":31,"src":51670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[868,51672,51674],{"id":51673},"_262-一元运算符","2.6.2 一元运算符",[14,51676,51677],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,51679,51680],{},[2212,51681],{"alt":31,"src":51682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,51684,51685],{},[2212,51686],{"alt":31,"src":51687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,51689,51690],{},"两者的区别：",[14,51692,51693],{},[2212,51694],{"alt":31,"src":51695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,51697,51698],{},"前置先自加；后置后加，代码执行完之后再加",[868,51700,51702],{"id":51701},"_263-比较运算符","2.6.3 比较运算符",[14,51704,51705],{},[2212,51706],{"alt":31,"src":51707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,51709,51710],{},"比较运算符也有隐式转换",[14,51712,51713],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,51715,51716],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,51718,51719],{},"要使用三等，开发的时候",[14,51721,51722],{},"NaN不等于任何人，包括它自己",[14,51724,51725],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,51727,51728],{},"7\u002F10=0.7",[14,51730,51731],{},"最后：0.5+0.2=0.7",[14,51733,51734],{},"字符串比较，比较的是字符对应的ASCII码",[868,51736,51738],{"id":51737},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,51740,51741],{},[2212,51742],{"alt":31,"src":51743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,51745,51746],{},[2212,51747],{"alt":31,"src":51748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,51750,51751],{},[2212,51752],{"alt":31,"src":51753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,51755,51756],{},"上述题目选D",[14,51758,51759],{},"与真2假1；或真1假2",[868,51761,51763],{"id":51762},"_265-运算符优先级","2.6.5 运算符优先级",[14,51765,51766],{},[2212,51767],{"alt":31,"src":51768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51770,51771],{},"先算逻辑与，后算逻辑或",[21,51773,51775],{"id":51774},"_27-语句","2.7 语句",[14,51777,51778],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51780,51781],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51783,51784],{},[2212,51785],{"alt":31,"src":51786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51788,51789],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51791,51792],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[868,51794,51796],{"id":51795},"_271-分支语句","2.7.1 分支语句",[22742,51798,51800],{"id":51799},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51802,51803],{},"if语句单行简单的话，可以不写{}，写在一行就行",[851,51805,51806],{},[854,51807,51808],{},"单分支语句",[14,51810,51811],{},[2212,51812],{"alt":31,"src":51813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51815,51816],{},"除了0，所有数字都为真",[26,51818,51820],{"className":51375,"code":51819,"language":51377,"meta":31,"style":31},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[33,51821,51822,51827,51832,51837,51841],{"__ignoreMap":31},[36,51823,51824],{"class":38,"line":39},[36,51825,51826],{"class":49},"if（0) {\n",[36,51828,51829],{"class":38,"line":46},[36,51830,51831],{"class":49},"    let a=1\n",[36,51833,51834],{"class":38,"line":78},[36,51835,51836],{"class":49},"    alert(typeof a)\n",[36,51838,51839],{"class":38,"line":125},[36,51840,2315],{"class":49},[36,51842,51843],{"class":38,"line":131},[36,51844,51845],{"class":49},"不输出，括号为假\n",[851,51847,51848],{"start":46},[854,51849,51850],{},"双分支语句",[14,51852,51853],{},[2212,51854],{"alt":31,"src":51855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[851,51857,51858],{"start":78},[854,51859,51860],{},"多分支语句",[14,51862,51863],{},[2212,51864],{"alt":31,"src":51865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22742,51867,51869],{"id":51868},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51871,51872],{},[2212,51873],{"alt":31,"src":51874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22742,51876,51878],{"id":51877},"_2713-switch语句","2.7.1.3 switch语句",[14,51880,51881],{},[2212,51882],{"alt":31,"src":51883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51885,51886],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[868,51888,51890],{"id":51889},"_272-循环语句","2.7.2 循环语句",[22742,51892,51894],{"id":51893},"_2721-断点演示","2.7.2.1 断点演示",[14,51896,51897],{},[2212,51898],{"alt":31,"src":51899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22742,51901,51903],{"id":51902},"_2722-while循环","2.7.2.2 while循环",[14,51905,51906],{},[2212,51907],{"alt":31,"src":51908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51910,51911],{},[2212,51912],{"alt":31,"src":51913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22742,51915,51917],{"id":51916},"_2723-for循环","2.7.2.3 for循环",[14,51919,51920],{},[2212,51921],{"alt":31,"src":51922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51924,51925],{},"for(;;) {",[14,51927,1825],{},[14,51929,51930],{},"表示无限循环",[14,51932,51933],{},[2212,51934],{"alt":31,"src":51935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22742,51937,51939],{"id":51938},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51941,51942],{},[2212,51943],{"alt":31,"src":51944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[21,51946,51948],{"id":51947},"_28-数组","2.8 数组",[868,51950,51952],{"id":51951},"_281-基础认识","2.8.1 基础认识",[14,51954,51955],{},[2212,51956],{"alt":31,"src":51957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51959,51960],{},[2212,51961],{"alt":31,"src":51962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51964,51965],{},[2212,51966],{"alt":31,"src":51967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51969,51970],{},[2212,51971],{"alt":31,"src":51972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[868,51974,51976],{"id":51975},"_282-操作数组","2.8.2 操作数组",[14,51978,51979],{},[2212,51980],{"alt":31,"src":51981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[851,51983,51984],{},[854,51985,51986],{},"添加元素",[14,51988,51989],{},[2212,51990],{"alt":31,"src":51991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51993,51994],{},"console.log(arr.push('green'))",[14,51996,51997],{},"输出结果：为新数组的长度",[14,51999,52000],{},[2212,52001],{"alt":31,"src":52002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,52004,52005],{},"push用的非常多，一定要记住",[851,52007,52008],{},[854,52009,52010],{},"删除元素",[14,52012,52013],{},[2212,52014],{"alt":31,"src":52015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,52017,52018],{},[2212,52019],{"alt":31,"src":52020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,52022,52023],{},[2212,52024],{"alt":31,"src":52025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[868,52027,52029],{"id":52028},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[26,52031,52033],{"className":51375,"code":52032,"language":51377,"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,52034,52035,52050,52066,52070,52079,52097,52121,52143,52157,52165,52172,52184,52195,52199,52203,52210,52222,52237,52250,52269,52286,52301,52313,52325,52337,52341,52345,52356,52366,52378,52390,52402,52413,52417,52421,52433,52437,52451,52455,52459,52470,52484,52496,52510,52514,52523,52532,52536,52545,52549,52558,52563,52568,52581,52609,52614,52619,52644,52649,52653,52658,52663,52678,52682,52687,52717,52729,52745,52761,52775,52780,52787,52791,52796,52809,52817,52825,52829],{"__ignoreMap":31},[36,52036,52037,52040,52044,52047],{"class":38,"line":39},[36,52038,52039],{"class":49},"\u003C!",[36,52041,52043],{"class":52042},"s9eBZ","DOCTYPE",[36,52045,52046],{"class":2713}," html",[36,52048,52049],{"class":49},">\n",[36,52051,52052,52054,52056,52059,52061,52064],{"class":38,"line":46},[36,52053,1789],{"class":49},[36,52055,51377],{"class":52042},[36,52057,52058],{"class":2713}," lang",[36,52060,54],{"class":49},[36,52062,52063],{"class":998},"\"en\"",[36,52065,52049],{"class":49},[36,52067,52068],{"class":38,"line":78},[36,52069,194],{"emptyLinePlaceholder":193},[36,52071,52072,52074,52077],{"class":38,"line":125},[36,52073,1789],{"class":49},[36,52075,52076],{"class":52042},"head",[36,52078,52049],{"class":49},[36,52080,52081,52084,52087,52090,52092,52095],{"class":38,"line":131},[36,52082,52083],{"class":49},"    \u003C",[36,52085,52086],{"class":52042},"meta",[36,52088,52089],{"class":2713}," charset",[36,52091,54],{"class":49},[36,52093,52094],{"class":998},"\"UTF-8\"",[36,52096,52049],{"class":49},[36,52098,52099,52101,52103,52106,52108,52111,52114,52116,52119],{"class":38,"line":396},[36,52100,52083],{"class":49},[36,52102,52086],{"class":52042},[36,52104,52105],{"class":2713}," http-equiv",[36,52107,54],{"class":49},[36,52109,52110],{"class":998},"\"X-UA-Compatible\"",[36,52112,52113],{"class":2713}," content",[36,52115,54],{"class":49},[36,52117,52118],{"class":998},"\"IE=edge\"",[36,52120,52049],{"class":49},[36,52122,52123,52125,52127,52129,52131,52134,52136,52138,52141],{"class":38,"line":407},[36,52124,52083],{"class":49},[36,52126,52086],{"class":52042},[36,52128,15664],{"class":2713},[36,52130,54],{"class":49},[36,52132,52133],{"class":998},"\"viewport\"",[36,52135,52113],{"class":2713},[36,52137,54],{"class":49},[36,52139,52140],{"class":998},"\"width=device-width, initial-scale=1.0\"",[36,52142,52049],{"class":49},[36,52144,52145,52147,52150,52153,52155],{"class":38,"line":2061},[36,52146,52083],{"class":49},[36,52148,52149],{"class":52042},"title",[36,52151,52152],{"class":49},">Document\u003C\u002F",[36,52154,52149],{"class":52042},[36,52156,52049],{"class":49},[36,52158,52159,52161,52163],{"class":38,"line":2067},[36,52160,52083],{"class":49},[36,52162,807],{"class":52042},[36,52164,52049],{"class":49},[36,52166,52167,52170],{"class":38,"line":2079},[36,52168,52169],{"class":52042},"        *",[36,52171,16316],{"class":49},[36,52173,52174,52177,52180,52182],{"class":38,"line":2362},[36,52175,52176],{"class":60},"            margin",[36,52178,52179],{"class":49},": ",[36,52181,643],{"class":60},[36,52183,2040],{"class":49},[36,52185,52186,52189,52191,52193],{"class":38,"line":2367},[36,52187,52188],{"class":60},"            padding",[36,52190,52179],{"class":49},[36,52192,643],{"class":60},[36,52194,2040],{"class":49},[36,52196,52197],{"class":38,"line":2373},[36,52198,3278],{"class":49},[36,52200,52201],{"class":38,"line":2378},[36,52202,194],{"emptyLinePlaceholder":193},[36,52204,52205,52208],{"class":38,"line":2392},[36,52206,52207],{"class":2713},"        .box",[36,52209,16316],{"class":49},[36,52211,52212,52215,52217,52220],{"class":38,"line":2397},[36,52213,52214],{"class":60},"            display",[36,52216,52179],{"class":49},[36,52218,52219],{"class":60},"flex",[36,52221,2040],{"class":49},[36,52223,52224,52227,52229,52232,52235],{"class":38,"line":2403},[36,52225,52226],{"class":60},"            width",[36,52228,52179],{"class":49},[36,52230,52231],{"class":60},"700",[36,52233,52234],{"class":53},"px",[36,52236,2040],{"class":49},[36,52238,52239,52242,52244,52246,52248],{"class":38,"line":2424},[36,52240,52241],{"class":60},"            height",[36,52243,52179],{"class":49},[36,52245,4722],{"class":60},[36,52247,52234],{"class":53},[36,52249,2040],{"class":49},[36,52251,52252,52255,52257,52259,52261,52264,52267],{"class":38,"line":2429},[36,52253,52254],{"class":60},"            border-left",[36,52256,52179],{"class":49},[36,52258,61],{"class":60},[36,52260,52234],{"class":53},[36,52262,52263],{"class":60}," solid",[36,52265,52266],{"class":60}," pink",[36,52268,2040],{"class":49},[36,52270,52271,52274,52276,52278,52280,52282,52284],{"class":38,"line":2443},[36,52272,52273],{"class":60},"            border-bottom",[36,52275,52179],{"class":49},[36,52277,61],{"class":60},[36,52279,52234],{"class":53},[36,52281,52263],{"class":60},[36,52283,52266],{"class":60},[36,52285,2040],{"class":49},[36,52287,52288,52290,52292,52294,52296,52299],{"class":38,"line":2448},[36,52289,52176],{"class":60},[36,52291,52179],{"class":49},[36,52293,1538],{"class":60},[36,52295,52234],{"class":53},[36,52297,52298],{"class":60}," auto",[36,52300,2040],{"class":49},[36,52302,52303,52306,52308,52311],{"class":38,"line":2477},[36,52304,52305],{"class":60},"            justify-content",[36,52307,52179],{"class":49},[36,52309,52310],{"class":60},"space-around",[36,52312,2040],{"class":49},[36,52314,52315,52318,52320,52323],{"class":38,"line":2482},[36,52316,52317],{"class":60},"            align-items",[36,52319,52179],{"class":49},[36,52321,52322],{"class":60},"flex-end",[36,52324,2040],{"class":49},[36,52326,52327,52330,52332,52335],{"class":38,"line":2499},[36,52328,52329],{"class":60},"            text-align",[36,52331,52179],{"class":49},[36,52333,52334],{"class":60},"center",[36,52336,2040],{"class":49},[36,52338,52339],{"class":38,"line":2504},[36,52340,3278],{"class":49},[36,52342,52343],{"class":38,"line":2509},[36,52344,194],{"emptyLinePlaceholder":193},[36,52346,52347,52349,52351,52354],{"class":38,"line":2514},[36,52348,52207],{"class":2713},[36,52350,1839],{"class":53},[36,52352,52353],{"class":52042},"div",[36,52355,16316],{"class":49},[36,52357,52358,52360,52362,52364],{"class":38,"line":2528},[36,52359,52214],{"class":60},[36,52361,52179],{"class":49},[36,52363,52219],{"class":60},[36,52365,2040],{"class":49},[36,52367,52368,52370,52372,52374,52376],{"class":38,"line":2533},[36,52369,52226],{"class":60},[36,52371,52179],{"class":49},[36,52373,1538],{"class":60},[36,52375,52234],{"class":53},[36,52377,2040],{"class":49},[36,52379,52380,52383,52385,52388],{"class":38,"line":3326},[36,52381,52382],{"class":60},"            background-color",[36,52384,52179],{"class":49},[36,52386,52387],{"class":60},"pink",[36,52389,2040],{"class":49},[36,52391,52392,52395,52397,52400],{"class":38,"line":3340},[36,52393,52394],{"class":60},"            flex-direction",[36,52396,52179],{"class":49},[36,52398,52399],{"class":60},"column",[36,52401,2040],{"class":49},[36,52403,52404,52406,52408,52411],{"class":38,"line":3348},[36,52405,52305],{"class":60},[36,52407,52179],{"class":49},[36,52409,52410],{"class":60},"space-between",[36,52412,2040],{"class":49},[36,52414,52415],{"class":38,"line":3353},[36,52416,3278],{"class":49},[36,52418,52419],{"class":38,"line":3359},[36,52420,194],{"emptyLinePlaceholder":193},[36,52422,52423,52425,52428,52431],{"class":38,"line":3365},[36,52424,52207],{"class":2713},[36,52426,52427],{"class":52042}," div",[36,52429,52430],{"class":52042}," span",[36,52432,16316],{"class":49},[36,52434,52435],{"class":38,"line":3370},[36,52436,194],{"emptyLinePlaceholder":193},[36,52438,52439,52442,52444,52447,52449],{"class":38,"line":8695},[36,52440,52441],{"class":60},"            margin-top",[36,52443,52179],{"class":49},[36,52445,52446],{"class":60},"-20",[36,52448,52234],{"class":53},[36,52450,2040],{"class":49},[36,52452,52453],{"class":38,"line":8719},[36,52454,3278],{"class":49},[36,52456,52457],{"class":38,"line":8724},[36,52458,194],{"emptyLinePlaceholder":193},[36,52460,52461,52463,52465,52468],{"class":38,"line":8730},[36,52462,52207],{"class":2713},[36,52464,52427],{"class":52042},[36,52466,52467],{"class":52042}," h4",[36,52469,16316],{"class":49},[36,52471,52472,52475,52477,52480,52482],{"class":38,"line":8757},[36,52473,52474],{"class":60},"            margin-bottom",[36,52476,52179],{"class":49},[36,52478,52479],{"class":60},"-35",[36,52481,52234],{"class":53},[36,52483,2040],{"class":49},[36,52485,52486,52488,52490,52492,52494],{"class":38,"line":8762},[36,52487,52226],{"class":60},[36,52489,52179],{"class":49},[36,52491,1242],{"class":60},[36,52493,52234],{"class":53},[36,52495,2040],{"class":49},[36,52497,52498,52501,52503,52506,52508],{"class":38,"line":8768},[36,52499,52500],{"class":60},"            margin-left",[36,52502,52179],{"class":49},[36,52504,52505],{"class":60},"-10",[36,52507,52234],{"class":53},[36,52509,2040],{"class":49},[36,52511,52512],{"class":38,"line":8780},[36,52513,3278],{"class":49},[36,52515,52516,52519,52521],{"class":38,"line":8792},[36,52517,52518],{"class":49},"    \u003C\u002F",[36,52520,807],{"class":52042},[36,52522,52049],{"class":49},[36,52524,52525,52528,52530],{"class":38,"line":8804},[36,52526,52527],{"class":49},"\u003C\u002F",[36,52529,52076],{"class":52042},[36,52531,52049],{"class":49},[36,52533,52534],{"class":38,"line":10463},[36,52535,194],{"emptyLinePlaceholder":193},[36,52537,52538,52540,52543],{"class":38,"line":10488},[36,52539,1789],{"class":49},[36,52541,52542],{"class":52042},"body",[36,52544,52049],{"class":49},[36,52546,52547],{"class":38,"line":10511},[36,52548,194],{"emptyLinePlaceholder":193},[36,52550,52551,52553,52556],{"class":38,"line":10535},[36,52552,52083],{"class":49},[36,52554,52555],{"class":52042},"script",[36,52557,52049],{"class":49},[36,52559,52560],{"class":38,"line":10540},[36,52561,52562],{"class":42},"        \u002F\u002F 1. 四次弹框效果\n",[36,52564,52565],{"class":38,"line":10545},[36,52566,52567],{"class":42},"        \u002F\u002F 声明一个新的数组\n",[36,52569,52570,52573,52576,52578],{"class":38,"line":10550},[36,52571,52572],{"class":53},"        let",[36,52574,52575],{"class":49}," arr ",[36,52577,54],{"class":53},[36,52579,52580],{"class":49}," []\n",[36,52582,52583,52585,52587,52590,52592,52594,52596,52598,52600,52603,52605,52607],{"class":38,"line":10559},[36,52584,4152],{"class":53},[36,52586,2408],{"class":49},[36,52588,52589],{"class":53},"let",[36,52591,10185],{"class":49},[36,52593,54],{"class":53},[36,52595,25863],{"class":60},[36,52597,10192],{"class":49},[36,52599,2338],{"class":53},[36,52601,52602],{"class":60}," 4",[36,52604,3963],{"class":49},[36,52606,3042],{"class":53},[36,52608,13186],{"class":49},[36,52610,52611],{"class":38,"line":10564},[36,52612,52613],{"class":42},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[36,52615,52616],{"class":38,"line":10570},[36,52617,52618],{"class":42},"            \u002F\u002F arr.push(num)\n",[36,52620,52621,52624,52627,52629,52632,52634,52637,52639,52642],{"class":38,"line":10591},[36,52622,52623],{"class":49},"            arr.",[36,52625,52626],{"class":2713},"push",[36,52628,901],{"class":49},[36,52630,52631],{"class":2713},"prompt",[36,52633,901],{"class":49},[36,52635,52636],{"class":998},"`请输入第${",[36,52638,1326],{"class":49},[36,52640,52641],{"class":998},"}季度的数据:`",[36,52643,31239],{"class":49},[36,52645,52646],{"class":38,"line":10597},[36,52647,52648],{"class":42},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[36,52650,52651],{"class":38,"line":10611},[36,52652,3278],{"class":49},[36,52654,52655],{"class":38,"line":10617},[36,52656,52657],{"class":42},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[36,52659,52660],{"class":38,"line":10644},[36,52661,52662],{"class":42},"        \u002F\u002F 盒子开头\n",[36,52664,52665,52668,52671,52673,52676],{"class":38,"line":10653},[36,52666,52667],{"class":49},"        document.",[36,52669,52670],{"class":2713},"write",[36,52672,901],{"class":49},[36,52674,52675],{"class":998},"` \u003Cdiv class=\"box\">`",[36,52677,75],{"class":49},[36,52679,52680],{"class":38,"line":10659},[36,52681,194],{"emptyLinePlaceholder":193},[36,52683,52684],{"class":38,"line":10667},[36,52685,52686],{"class":42},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[36,52688,52689,52691,52693,52695,52697,52699,52701,52703,52705,52708,52711,52713,52715],{"class":38,"line":10672},[36,52690,4152],{"class":53},[36,52692,2408],{"class":49},[36,52694,52589],{"class":53},[36,52696,10185],{"class":49},[36,52698,54],{"class":53},[36,52700,4842],{"class":60},[36,52702,10192],{"class":49},[36,52704,1789],{"class":53},[36,52706,52707],{"class":49}," arr.",[36,52709,52710],{"class":60},"length",[36,52712,3963],{"class":49},[36,52714,3042],{"class":53},[36,52716,13186],{"class":49},[36,52718,52719,52722,52724,52726],{"class":38,"line":17348},[36,52720,52721],{"class":49},"            document.",[36,52723,52670],{"class":2713},[36,52725,901],{"class":49},[36,52727,52728],{"class":998},"`\n",[36,52730,52731,52734,52736,52738,52740,52742],{"class":38,"line":17354},[36,52732,52733],{"class":998},"              \u003Cdiv style=\"height: ${",[36,52735,4629],{"class":49},[36,52737,1769],{"class":998},[36,52739,1326],{"class":49},[36,52741,1819],{"class":998},[36,52743,52744],{"class":998},"}px;\">\n",[36,52746,52747,52750,52752,52754,52756,52758],{"class":38,"line":17377},[36,52748,52749],{"class":998},"                \u003Cspan>${",[36,52751,4629],{"class":49},[36,52753,1769],{"class":998},[36,52755,1326],{"class":49},[36,52757,1819],{"class":998},[36,52759,52760],{"class":998},"}\u003C\u002Fspan>\n",[36,52762,52763,52766,52768,52770,52772],{"class":38,"line":17383},[36,52764,52765],{"class":998},"                \u003Ch4>第${",[36,52767,1326],{"class":49},[36,52769,46308],{"class":53},[36,52771,25863],{"class":60},[36,52773,52774],{"class":998},"}季度\u003C\u002Fh4>\n",[36,52776,52777],{"class":38,"line":17406},[36,52778,52779],{"class":998},"              \u003C\u002Fdiv>          \n",[36,52781,52782,52785],{"class":38,"line":17420},[36,52783,52784],{"class":998},"            `",[36,52786,75],{"class":49},[36,52788,52789],{"class":38,"line":17440},[36,52790,3278],{"class":49},[36,52792,52793],{"class":38,"line":17446},[36,52794,52795],{"class":42},"        \u002F\u002F 盒子结尾\n",[36,52797,52798,52800,52802,52804,52807],{"class":38,"line":17457},[36,52799,52667],{"class":49},[36,52801,52670],{"class":2713},[36,52803,901],{"class":49},[36,52805,52806],{"class":998},"` \u003C\u002Fdiv>`",[36,52808,75],{"class":49},[36,52810,52811,52813,52815],{"class":38,"line":17480},[36,52812,52518],{"class":49},[36,52814,52555],{"class":52042},[36,52816,52049],{"class":49},[36,52818,52819,52821,52823],{"class":38,"line":17502},[36,52820,52527],{"class":49},[36,52822,52542],{"class":52042},[36,52824,52049],{"class":49},[36,52826,52827],{"class":38,"line":17507},[36,52828,194],{"emptyLinePlaceholder":193},[36,52830,52831,52833,52835],{"class":38,"line":17513},[36,52832,52527],{"class":49},[36,52834,51377],{"class":52042},[36,52836,52049],{"class":49},[868,52838,52840],{"id":52839},"_284-冒泡排序","2.8.4 冒泡排序",[26,52842,52844],{"className":51375,"code":52843,"language":51377,"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,52845,52846,52856,52870,52874,52882,52897,52917,52929,52937,52941,52949,52957,52989,53022,53059,53064,53083,53088,53101,53116,53132,53136,53141,53145,53155,53164,53172,53176],{"__ignoreMap":31},[36,52847,52848,52850,52852,52854],{"class":38,"line":39},[36,52849,52039],{"class":49},[36,52851,52043],{"class":52042},[36,52853,52046],{"class":2713},[36,52855,52049],{"class":49},[36,52857,52858,52860,52862,52864,52866,52868],{"class":38,"line":46},[36,52859,1789],{"class":49},[36,52861,51377],{"class":52042},[36,52863,52058],{"class":2713},[36,52865,54],{"class":49},[36,52867,52063],{"class":998},[36,52869,52049],{"class":49},[36,52871,52872],{"class":38,"line":78},[36,52873,194],{"emptyLinePlaceholder":193},[36,52875,52876,52878,52880],{"class":38,"line":125},[36,52877,1789],{"class":49},[36,52879,52076],{"class":52042},[36,52881,52049],{"class":49},[36,52883,52884,52887,52889,52891,52893,52895],{"class":38,"line":131},[36,52885,52886],{"class":49},"  \u003C",[36,52888,52086],{"class":52042},[36,52890,52089],{"class":2713},[36,52892,54],{"class":49},[36,52894,52094],{"class":998},[36,52896,52049],{"class":49},[36,52898,52899,52901,52903,52905,52907,52909,52911,52913,52915],{"class":38,"line":396},[36,52900,52886],{"class":49},[36,52902,52086],{"class":52042},[36,52904,15664],{"class":2713},[36,52906,54],{"class":49},[36,52908,52133],{"class":998},[36,52910,52113],{"class":2713},[36,52912,54],{"class":49},[36,52914,52140],{"class":998},[36,52916,52049],{"class":49},[36,52918,52919,52921,52923,52925,52927],{"class":38,"line":407},[36,52920,52886],{"class":49},[36,52922,52149],{"class":52042},[36,52924,52152],{"class":49},[36,52926,52149],{"class":52042},[36,52928,52049],{"class":49},[36,52930,52931,52933,52935],{"class":38,"line":2061},[36,52932,52527],{"class":49},[36,52934,52076],{"class":52042},[36,52936,52049],{"class":49},[36,52938,52939],{"class":38,"line":2067},[36,52940,194],{"emptyLinePlaceholder":193},[36,52942,52943,52945,52947],{"class":38,"line":2079},[36,52944,1789],{"class":49},[36,52946,52542],{"class":52042},[36,52948,52049],{"class":49},[36,52950,52951,52953,52955],{"class":38,"line":2362},[36,52952,52886],{"class":49},[36,52954,52555],{"class":52042},[36,52956,52049],{"class":49},[36,52958,52959,52962,52964,52966,52969,52971,52973,52975,52977,52979,52981,52983,52985,52987],{"class":38,"line":2367},[36,52960,52961],{"class":53},"    let",[36,52963,52575],{"class":49},[36,52965,54],{"class":53},[36,52967,52968],{"class":49}," [",[36,52970,157],{"class":60},[36,52972,154],{"class":49},[36,52974,186],{"class":60},[36,52976,154],{"class":49},[36,52978,162],{"class":60},[36,52980,154],{"class":49},[36,52982,181],{"class":60},[36,52984,154],{"class":49},[36,52986,61],{"class":60},[36,52988,33988],{"class":49},[36,52990,52991,52993,52995,52997,52999,53001,53003,53005,53007,53009,53011,53014,53016,53018,53020],{"class":38,"line":2373},[36,52992,3950],{"class":53},[36,52994,2408],{"class":49},[36,52996,52589],{"class":53},[36,52998,10185],{"class":49},[36,53000,54],{"class":53},[36,53002,4842],{"class":60},[36,53004,10192],{"class":49},[36,53006,1789],{"class":53},[36,53008,52707],{"class":49},[36,53010,52710],{"class":60},[36,53012,53013],{"class":53}," -",[36,53015,25863],{"class":60},[36,53017,3963],{"class":49},[36,53019,3042],{"class":53},[36,53021,13186],{"class":49},[36,53023,53024,53027,53029,53031,53033,53035,53037,53039,53041,53043,53045,53047,53049,53051,53053,53055,53057],{"class":38,"line":2378},[36,53025,53026],{"class":53},"      for",[36,53028,2408],{"class":49},[36,53030,52589],{"class":53},[36,53032,10247],{"class":49},[36,53034,54],{"class":53},[36,53036,4842],{"class":60},[36,53038,10254],{"class":49},[36,53040,1789],{"class":53},[36,53042,52707],{"class":49},[36,53044,52710],{"class":60},[36,53046,53013],{"class":53},[36,53048,10185],{"class":49},[36,53050,1414],{"class":53},[36,53052,25863],{"class":60},[36,53054,10261],{"class":49},[36,53056,3042],{"class":53},[36,53058,13186],{"class":49},[36,53060,53061],{"class":38,"line":2392},[36,53062,53063],{"class":42},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[36,53065,53066,53068,53071,53073,53076,53078,53080],{"class":38,"line":2397},[36,53067,3246],{"class":53},[36,53069,53070],{"class":49}," (arr[j] ",[36,53072,1839],{"class":53},[36,53074,53075],{"class":49}," arr[j ",[36,53077,1365],{"class":53},[36,53079,25863],{"class":60},[36,53081,53082],{"class":49},"]) {\n",[36,53084,53085],{"class":38,"line":2403},[36,53086,53087],{"class":42},"          \u002F\u002F 交换两个变量\n",[36,53089,53090,53093,53096,53098],{"class":38,"line":2424},[36,53091,53092],{"class":53},"          let",[36,53094,53095],{"class":49}," tmp ",[36,53097,54],{"class":53},[36,53099,53100],{"class":49}," arr[j]\n",[36,53102,53103,53106,53108,53110,53112,53114],{"class":38,"line":2429},[36,53104,53105],{"class":49},"          arr[j] ",[36,53107,54],{"class":53},[36,53109,53075],{"class":49},[36,53111,1365],{"class":53},[36,53113,25863],{"class":60},[36,53115,33988],{"class":49},[36,53117,53118,53121,53123,53125,53127,53129],{"class":38,"line":2443},[36,53119,53120],{"class":49},"          arr[j ",[36,53122,1365],{"class":53},[36,53124,25863],{"class":60},[36,53126,5192],{"class":49},[36,53128,54],{"class":53},[36,53130,53131],{"class":49}," tmp\n",[36,53133,53134],{"class":38,"line":2448},[36,53135,3278],{"class":49},[36,53137,53138],{"class":38,"line":2477},[36,53139,53140],{"class":49},"      }\n",[36,53142,53143],{"class":38,"line":2482},[36,53144,2937],{"class":49},[36,53146,53147,53150,53152],{"class":38,"line":2499},[36,53148,53149],{"class":49},"    document.",[36,53151,52670],{"class":2713},[36,53153,53154],{"class":49},"(arr)\n",[36,53156,53157,53160,53162],{"class":38,"line":2504},[36,53158,53159],{"class":49},"  \u003C\u002F",[36,53161,52555],{"class":52042},[36,53163,52049],{"class":49},[36,53165,53166,53168,53170],{"class":38,"line":2509},[36,53167,52527],{"class":49},[36,53169,52542],{"class":52042},[36,53171,52049],{"class":49},[36,53173,53174],{"class":38,"line":2514},[36,53175,194],{"emptyLinePlaceholder":193},[36,53177,53178,53180,53182],{"class":38,"line":2528},[36,53179,52527],{"class":49},[36,53181,51377],{"class":52042},[36,53183,52049],{"class":49},[14,53185,53186],{},[2212,53187],{"alt":31,"src":53188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,53190,53191],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,53193,53194],{},"let arr = [4, 2, 5, 1, 3]",[14,53196,53197],{},"\u002F\u002F 1.升序排列写法",[14,53199,53200],{},"arr.sort(function (a, b) {",[14,53202,53203],{},"return a - b",[14,53205,53206],{},"})",[14,53208,53209],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,53211,53212],{},"\u002F\u002F 降序排列写法",[14,53214,53200],{},[14,53216,53217],{},"return b - a",[14,53219,53206],{},[14,53221,53222],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[21,53224,53226],{"id":53225},"_29-函数","2.9 函数",[14,53228,53229],{},[2212,53230],{"alt":31,"src":53231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,53233,53234],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,53236,53237],{},"函数的声明用function",[14,53239,53240],{},"函数里边可以嵌套函数",[868,53242,53244],{"id":53243},"_291-函数传参","2.9.1 函数传参",[14,53246,53247],{},[2212,53248],{"alt":31,"src":53249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,53251,53252],{},[2212,53253],{"alt":31,"src":53254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1886,53256,53257,53260,53263,53266,53269,53272],{},[854,53258,53259],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[854,53261,53262],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[854,53264,53265],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[854,53267,53268],{},"开发中尽量保持形参和实参个数一致",[854,53270,53271],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[854,53273,53274],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,53276,53277],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[868,53279,53281],{"id":53280},"_292-函数的返回值","2.9.2 函数的返回值",[14,53283,53284],{},[2212,53285],{"alt":31,"src":53286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,53288,53289],{},[2212,53290],{"alt":31,"src":53291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1886,53293,53294,53297,53300,53303,53306],{},[854,53295,53296],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[854,53298,53299],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[854,53301,53302],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[854,53304,53305],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[854,53307,53308],{},"断点调试:进入函数内部看执行过程F11",[868,53310,53312],{"id":53311},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[26,53314,53316],{"className":51375,"code":53315,"language":51377,"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,53317,53318,53323,53328,53332,53337],{"__ignoreMap":31},[36,53319,53320],{"class":38,"line":39},[36,53321,53322],{"class":49},"    function fn(a, b) {\n",[36,53324,53325],{"class":38,"line":46},[36,53326,53327],{"class":49},"      console.log(a + b);\n",[36,53329,53330],{"class":38,"line":78},[36,53331,2937],{"class":49},[36,53333,53334],{"class":38,"line":125},[36,53335,53336],{"class":49},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[36,53338,53339],{"class":38,"line":131},[36,53340,53341],{"class":49},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[868,53343,53345],{"id":53344},"_294-作用域","2.9.4 作用域",[1886,53347,53348,53354,53359,53362,53365],{},[854,53349,53350,53351],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[1043,53352,53353],{},"作用域",[854,53355,53356],{},[1043,53357,53358],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[854,53360,53361],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[854,53363,53364],{},"函数内部可以直接所使用全局变量",[854,53366,53367],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,53369,15377],{},[26,53371,53373],{"className":51375,"code":53372,"language":51377,"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,53374,53375,53380,53385,53389,53394,53399,53404],{"__ignoreMap":31},[36,53376,53377],{"class":38,"line":39},[36,53378,53379],{"class":49},"    function fun() {\n",[36,53381,53382],{"class":38,"line":46},[36,53383,53384],{"class":49},"      num = 10\n",[36,53386,53387],{"class":38,"line":78},[36,53388,2937],{"class":49},[36,53390,53391],{"class":38,"line":125},[36,53392,53393],{"class":49},"    fun()\n",[36,53395,53396],{"class":38,"line":131},[36,53397,53398],{"class":49},"    console.log(num)\n",[36,53400,53401],{"class":38,"line":396},[36,53402,53403],{"class":49},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[36,53405,53406],{"class":38,"line":407},[36,53407,53408],{"class":49},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1886,53410,53411,53414],{},[854,53412,53413],{},"函数内部的形参可以看做是局部变量",[854,53415,53416],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,53418,53419,53420],{},"变量访问原则： ",[1043,53421,53422],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[868,53424,53426],{"id":53425},"_295-匿名函数","2.9.5 匿名函数",[14,53428,53429],{},"函数可以分为具名函数和匿名函数",[14,53431,53432],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[851,53434,53435],{},[854,53436,53437],{},"函数表达式",[14,53439,53440],{},[2212,53441],{"alt":31,"src":53442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,53444,53445],{},"里边也可以写参数",[14,53447,53448],{},"具名函数调用位置可以随意调整；",[14,53450,53451],{},"匿名函数函数表达式形式只能在声明后才可以使用",[851,53453,53454],{"start":46},[854,53455,53456],{},"立即执行函数",[14,53458,53459],{},[2212,53460],{"alt":31,"src":53461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,53463,53464],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,53466,53467],{},"写法：两个小括号，然后在第一个小括号中写function",[14,53469,53470],{},"(function () {})();",[14,53472,53473],{},"不要落下最后的;",[14,53475,53476],{},"立即执行函数必须要加;",[14,53478,53479],{},"分号写前写后都没问题",[14,53481,53482],{},"写前：",[14,53484,53485],{},"(function() {})()",[14,53487,53488],{},";(function () {})();",[14,53490,53491],{},"写后:",[14,53493,53494],{},"(function() {})();",[14,53496,53470],{},[14,53498,53499],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,53501,53502],{},"还有一种写法：",[14,53504,53505],{},"(function(){}());",[14,53507,53508],{},"或者:",[14,53510,53511],{},"!function(){}();",[14,53513,53514],{},"立即执行函数有时候也是可以加名字的：",[14,53516,53517],{},"(function flexible(window,document) {}(window,document));",[14,53519,53520],{},"省一些调用方法",[868,53522,53524],{"id":53523},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,53526,53527],{},[2212,53528],{"alt":31,"src":53529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,53531,53532],{},"这样就不用非得给x,y初始化了",[14,53534,53535],{},[2212,53536],{"alt":31,"src":53537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,53539,53540],{},"代码执行时先看左边",[14,53542,53543],{},"例如：console.log(false && 3+5)",[14,53545,53546],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,53548,53549],{},"&&都是真时，就返回最后一个真值",[14,53551,53552],{},"console.log(11 && 22)",[14,53554,53555],{},"输出22",[14,53557,53558],{},"逻辑与：遇真则真",[14,53560,15377],{},[14,53562,53563],{},"let age=1",[14,53565,53566],{},"console.log(11 || age++)",[14,53568,53569],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,53571,53572],{},"console.log(11 || 22)",[14,53574,53575],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,53577,53578],{},"||如果都是假的话，就取最后一个假的值了",[868,53580,53582],{"id":53581},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,53584,53585],{},"显示转换：",[14,53587,53588,53591,53592],{},[1043,53589,53590],{},"记忆","： ",[1043,53593,53594],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,53596,53597],{},"空字符串为假，其他字符串全为真",[14,53599,53600],{},[2212,53601],{"alt":31,"src":53602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,53604,53605],{},"隐式转换：",[14,53607,53608],{},[2212,53609],{"alt":31,"src":53610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,53612,53613],{},"隐式转换:",[14,53615,53616],{},"null+3=3",[14,53618,53619],{},"undefined+3=NaN",[14,53621,53622],{},"null==undefined 输出true,他两个都当0看",[14,53624,53625],{},"null===undefined 输出false",[14,53627,53628],{},"undefined做任何操作都是NaN",[14,53630,53631],{},"NaN不等于NaN，NaN表示计算错误",[21,53633,53635],{"id":53634},"_210-对象","2.10 对象",[868,53637,53639],{"id":53638},"_2101-对象的介绍","2.10.1 对象的介绍",[14,53641,53642],{},"对象也是一种数据类型，里边的数据是无序的",[14,53644,53645],{},"对象由属性和方法组成",[14,53647,53648],{},[2212,53649],{"alt":31,"src":53650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,53652,53653],{},[2212,53654],{"alt":31,"src":53655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,53657,53658],{},[2212,53659],{"alt":31,"src":53660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[868,53662,53664],{"id":53663},"_2102-对象属性","2.10.2 对象属性",[14,53666,53667],{},[2212,53668],{"alt":31,"src":53669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[851,53671,53672],{},[854,53673,53674],{},"查询对象",[14,53676,53677],{},"对象名.属性 goods.uname",[14,53679,53680],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,53682,53683],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,53685,53686],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,53688,53689],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[851,53691,53692],{"start":46},[854,53693,53694],{},"重新赋值",[14,53696,53697],{},"对象名.属性=新值",[851,53699,53700],{"start":78},[854,53701,53702],{},"增加新数据",[14,53704,53697],{},[851,53706,53707],{"start":125},[854,53708,53709],{},"删除对象中的属性",[14,53711,53712],{},"delete 对象名.属性",[868,53714,53716],{"id":53715},"_2103-对象方法","2.10.3 对象方法",[14,53718,53719],{},[2212,53720],{"alt":31,"src":53721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,53723,53724],{},"后边跟的是匿名函数",[14,53726,53727],{},"对象外面的叫函数；对象内部的叫方法",[14,53729,53730],{},[2212,53731],{"alt":31,"src":53732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[868,53734,53736],{"id":53735},"_2104-遍历对象","2.10.4 遍历对象",[14,53738,53739],{},"理解为加括号的python字典遍历",[14,53741,53742],{},[2212,53743],{"alt":31,"src":53744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,53746,53747],{},"k是字符串类型",[14,53749,53750],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[26,53752,53754],{"className":51375,"code":53753,"language":51377,"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,53755,53756,53761,53766,53771,53776],{"__ignoreMap":31},[36,53757,53758],{"class":38,"line":39},[36,53759,53760],{"class":49},"   let arr = [1, 2, 3]\n",[36,53762,53763],{"class":38,"line":46},[36,53764,53765],{"class":49},"    for (let k in arr) {\n",[36,53767,53768],{"class":38,"line":78},[36,53769,53770],{"class":49},"      console.log(k)\n",[36,53772,53773],{"class":38,"line":125},[36,53774,53775],{"class":49},"      console.log(arr[k])\n",[36,53777,53778],{"class":38,"line":131},[36,53779,2937],{"class":49},[14,53781,53782],{},[2212,53783],{"alt":31,"src":53784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53786,53787],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53789,53790],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53792,53793],{},"for in 得到的k是属性名",[52555,53795,53796],{},"\n\nlet pink = {\n\nuname: 'pink老师',\n\nage: 18,\n\ngender: '男',\n\nsing: function () {\n\ndocument.write('唱歌')\n\n}\n\n}\n\n\u002F\u002F 遍历对象\n\nfor (let k in pink) {\n\nconsole.log(k)\n\nconsole.log(pink\\[k\\])\n\n}\n\n",[14,53798,53799],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[868,53801,53803],{"id":53802},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53805,53806],{},"数组中放对象信息",[26,53808,53812],{"className":53809,"code":53810,"language":53811,"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,53813,53814,53822,53827,53832,53837,53842,53847,53852,53857,53862,53867,53872,53877,53881,53885],{"__ignoreMap":31},[36,53815,53816,53818,53820],{"class":38,"line":39},[36,53817,1789],{"class":49},[36,53819,52555],{"class":52042},[36,53821,52049],{"class":49},[36,53823,53824],{"class":38,"line":46},[36,53825,53826],{"class":49},"    let students = [\n",[36,53828,53829],{"class":38,"line":78},[36,53830,53831],{"class":49},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[36,53833,53834],{"class":38,"line":125},[36,53835,53836],{"class":49},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[36,53838,53839],{"class":38,"line":131},[36,53840,53841],{"class":49},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[36,53843,53844],{"class":38,"line":396},[36,53845,53846],{"class":49},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[36,53848,53849],{"class":38,"line":407},[36,53850,53851],{"class":49},"    ]\n",[36,53853,53854],{"class":38,"line":2061},[36,53855,53856],{"class":49},"    for (let i = 0; i \u003C students.length; i++) {\n",[36,53858,53859],{"class":38,"line":2067},[36,53860,53861],{"class":49},"      for (let k in students[i]) {\n",[36,53863,53864],{"class":38,"line":2079},[36,53865,53866],{"class":49},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[36,53868,53869],{"class":38,"line":2362},[36,53870,53871],{"class":49},"        \u002F\u002F输出每个人的名字：\n",[36,53873,53874],{"class":38,"line":2367},[36,53875,53876],{"class":49},"        \u002F\u002Fconsole.log(students[i].name)\n",[36,53878,53879],{"class":38,"line":2373},[36,53880,53140],{"class":49},[36,53882,53883],{"class":38,"line":2378},[36,53884,2937],{"class":49},[36,53886,53887,53889,53891],{"class":38,"line":2392},[36,53888,53159],{"class":49},[36,53890,52555],{"class":52042},[36,53892,52049],{"class":49},[868,53894,53896],{"id":53895},"_2106-内置对象","2.10.6 内置对象",[14,53898,53899],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[851,53901,53902],{},[854,53903,53904],{},"数学对象Math",[14,53906,53907],{},[2212,53908],{"alt":31,"src":53909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53911,53912],{},[50,53913,53916],{"href":53914,"rel":53915},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24609],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53918,53919],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53921,53922],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53924,53925],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53927,53928],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53930,53931],{},"null属于对象数据类型",[851,53933,53934],{"start":46},[854,53935,53936],{},"生成任意范围随机数",[14,53938,53939],{},[2212,53940],{"alt":31,"src":53941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53943,53944],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53946,53947],{},"乘以几就取不到几",[14,53949,53950],{},"取数组中的随机元素：",[14,53952,53953],{},"let arr = ['red', 'green', 'blue']",[14,53955,53956],{},"let random = Math.floor(Math.random() * arr.length)",[14,53958,53959],{},"console.log(arr[random])",[14,53961,53962],{},"这个函数得到的是全闭区间",[14,53964,53965],{},"function getRandom(N, M) {",[14,53967,53968],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53970,1825],{},[14,53972,53973],{},"console.log(getRandom(4, 8))",[868,53975,53977],{"id":53976},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53979,53980],{},[2212,53981],{"alt":31,"src":53982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53984,53985],{},[2212,53986],{"alt":31,"src":53987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53989,53990],{},[2212,53991],{"alt":31,"src":53992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53994,53995],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53997,53998],{},[2212,53999],{"alt":31,"src":54000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,54002,54003],{},[2212,54004],{"alt":31,"src":54005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,54007,54008],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,54010,54011],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,54013,54014],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[807,54016,54017],{},"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":46,"depth":46,"links":54019},[54020,54028,54029,54030,54031,54032,54039,54043,54049,54058],{"id":51210,"depth":46,"text":51211,"children":54021},[54022,54023,54024,54025,54026,54027],{"id":51214,"depth":78,"text":51215},{"id":51231,"depth":78,"text":51232},{"id":51271,"depth":78,"text":51272},{"id":51283,"depth":78,"text":51284},{"id":51292,"depth":78,"text":51293},{"id":51340,"depth":78,"text":51341},{"id":51350,"depth":46,"text":51351},{"id":51438,"depth":46,"text":51439},{"id":51461,"depth":46,"text":51462},{"id":51473,"depth":46,"text":51474},{"id":51660,"depth":46,"text":51661,"children":54033},[54034,54035,54036,54037,54038],{"id":51664,"depth":78,"text":51665},{"id":51673,"depth":78,"text":51674},{"id":51701,"depth":78,"text":51702},{"id":51737,"depth":78,"text":51738},{"id":51762,"depth":78,"text":51763},{"id":51774,"depth":46,"text":51775,"children":54040},[54041,54042],{"id":51795,"depth":78,"text":51796},{"id":51889,"depth":78,"text":51890},{"id":51947,"depth":46,"text":51948,"children":54044},[54045,54046,54047,54048],{"id":51951,"depth":78,"text":51952},{"id":51975,"depth":78,"text":51976},{"id":52028,"depth":78,"text":52029},{"id":52839,"depth":78,"text":52840},{"id":53225,"depth":46,"text":53226,"children":54050},[54051,54052,54053,54054,54055,54056,54057],{"id":53243,"depth":78,"text":53244},{"id":53280,"depth":78,"text":53281},{"id":53311,"depth":78,"text":53312},{"id":53344,"depth":78,"text":53345},{"id":53425,"depth":78,"text":53426},{"id":53523,"depth":78,"text":53524},{"id":53581,"depth":78,"text":53582},{"id":53634,"depth":46,"text":53635,"children":54059},[54060,54061,54062,54063,54064,54065,54066],{"id":53638,"depth":78,"text":53639},{"id":53663,"depth":78,"text":53664},{"id":53715,"depth":78,"text":53716},{"id":53735,"depth":78,"text":53736},{"id":53802,"depth":78,"text":53803},{"id":53895,"depth":78,"text":53896},{"id":53976,"depth":78,"text":53977},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":51202,"description":823},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":54073,"title":54074,"body":54075,"description":823,"extension":824,"meta":77415,"navigation":193,"path":77416,"seo":77417,"stem":77418,"__hash__":77419},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":54076,"toc":77355},[54077,54080,54083,54086,54091,54094,54097,54100,54104,54108,54114,54119,54127,54134,54137,54141,54146,54151,54156,54159,54162,54173,54176,54180,54183,54186,54191,54196,54201,54204,54207,54299,54302,54307,54310,54315,54318,54321,54326,54329,54334,54338,54341,54355,54359,54364,54367,54370,54374,54379,54382,54386,54390,54395,54399,54404,54407,54410,54413,54416,54419,54422,54427,54432,54460,54463,54466,54469,54474,54477,54480,54483,54486,54490,54519,54523,54528,54533,54536,54539,54542,54547,54662,54667,54672,54833,54838,54841,54845,54850,54855,54858,54861,54864,54867,54870,54873,54876,54879,54882,54885,54888,54891,54894,54897,54899,54902,54905,54908,54913,54917,55314,55317,55323,55327,55332,56614,56619,56622,56625,56628,56633,57829,57833,57839,57844,57847,57852,57857,57861,57865,57870,57873,57878,57881,57884,57888,58796,58799,58803,59024,59027,59030,59033,59259,59262,59486,59489,59493,59498,59501,59504,59732,59735,59768,59771,59775,59780,59784,59787,59790,59793,59796,59799,59802,59805,59810,61090,61094,61097,62190,62194,62197,62200,62203,62206,62210,62213,62216,62218,62226,63707,63711,63714,63717,63720,63929,63932,63936,63940,63945,63950,63953,63956,63961,63965,63970,63973,64082,64086,64091,64096,64099,64102,64106,64111,64116,64121,64124,64127,64138,64141,64146,64151,64154,64157,64230,64234,64239,64242,64244,64255,64259,64264,65590,65593,65596,65599,65601,65604,65607,65610,65613,65616,65619,65622,65625,65628,65631,65634,65637,65639,65641,65644,65648,66742,66745,66748,66764,66778,66781,66786,66792,66797,66801,66805,66810,66814,66819,67261,67266,67269,67273,67278,67281,67284,67288,67293,67297,67302,67307,67311,67316,67321,67324,67329,67334,67338,67343,67348,67452,67455,67459,67464,67830,67833,67836,67839,67842,67845,67848,67851,67854,69150,69154,69159,69164,69167,69170,69173,69176,69178,69183,69188,69191,69195,69200,69205,69210,69213,69216,69219,69222,69225,69230,69233,69237,69242,69247,69251,69256,69259,69264,69267,69270,69273,69276,69279,69284,69287,69290,69293,69296,69300,69305,69308,69312,69317,69320,69323,69327,69356,69359,69363,69367,69372,69376,69381,69384,69387,69390,69393,69396,69399,69402,69405,69408,69411,69414,69417,69420,69423,69427,69432,69437,69440,69444,69448,69453,69456,69460,69463,69466,69471,69476,69481,69486,69491,69494,69497,69502,69507,69511,69516,69519,69524,69527,69530,69533,69536,69541,69544,69553,69557,69562,69565,69568,69572,69575,69580,69584,69587,69593,69599,69603,69629,69632,71193,71196,71692,71695,71700,71705,71710,71714,71719,71724,71729,71733,71738,71741,71744,71747,71750,71754,71757,71762,71765,71770,71774,71779,71782,71787,71792,71797,71800,71803,71808,71813,71816,71819,71823,71826,71831,71834,71839,71842,71847,71852,71857,71860,71865,71930,71933,71944,71948,71953,72125,72129,72134,72137,72140,72143,72147,72158,72162,72165,72170,72175,72178,72181,72184,72187,72190,72192,72195,72198,72201,72206,72209,72214,72217,72221,72224,72227,72241,72245,72248,72303,72308,72311,72314,72319,72322,72326,72331,72461,72465,72470,72475,72556,72561,72565,72568,72573,72578,72584,72587,72590,72593,72597,72602,72605,72616,72620,72637,75684,75688,75691,75694,75697,75718,75722,75725,75733,75736,75741,75744,75747,75752,75757,75761,75782,75786,75791,75794,75797,75800,75803,75807,75812,75815,75819,75824,75827,75832,75835,75840,75843,75848,77051,77055,77060,77063,77068,77352],[10,54078,54074],{"id":54079},"_3web-apis",[14,54081,54082],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,54084,54085],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,54087,54088],{},[2212,54089],{"alt":31,"src":54090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,54092,54093],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,54095,54096],{},"建议数组和对象使用 const 来声明",[14,54098,54099],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[21,54101,54103],{"id":54102},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[868,54105,54107],{"id":54106},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,54109,54110,54113],{},[33,54111,54112],{},"document"," = HTML 文件解析后的对象化表示；",[14,54115,54116,54118],{},[33,54117,54112],{}," ≠ HTML 文件本身",[14,54120,54121,54126],{},[1043,54122,54123],{},[33,54124,54125],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,54128,54129,54133],{},[1043,54130,54131],{},[33,54132,54112],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,54135,54136],{},"document实际上为window.document的简写",[868,54138,54140],{"id":54139},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,54142,54143],{},[2212,54144],{"alt":31,"src":54145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,54147,54148],{},[2212,54149],{"alt":31,"src":54150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,54152,54153],{},[2212,54154],{"alt":31,"src":54155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,54157,54158],{},"console.dir()",[14,54160,54161],{},"dir用来打印对象",[1886,54163,54164,54167,54170],{},[854,54165,54166],{},"任何一个标签，都是一个对象",[854,54168,54169],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[854,54171,54172],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,54174,54175],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[868,54177,54179],{"id":54178},"_312-获取dom对象","3.1.2 获取DoM对象",[14,54181,54182],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,54184,54185],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,54187,54188],{},[1043,54189,54190],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[851,54192,54193],{},[854,54194,54195],{},"利用CSS选择器来获取标签元素",[14,54197,54198],{},[2212,54199],{"alt":31,"src":54200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,54202,54203],{},"里边的选择器必须必须加引号！！！",[14,54205,54206],{},"只选择第一个元素",[26,54208,54210],{"className":53809,"code":54209,"language":53811,"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,54211,54212,54220,54241,54260,54268,54273,54278,54283,54291],{"__ignoreMap":31},[36,54213,54214,54216,54218],{"class":38,"line":39},[36,54215,1789],{"class":49},[36,54217,52542],{"class":52042},[36,54219,52049],{"class":49},[36,54221,54222,54224,54226,54229,54231,54234,54237,54239],{"class":38,"line":46},[36,54223,52886],{"class":49},[36,54225,52353],{"class":52042},[36,54227,54228],{"class":2713}," class",[36,54230,54],{"class":49},[36,54232,54233],{"class":998},"\"box\"",[36,54235,54236],{"class":49},">123\u003C\u002F",[36,54238,52353],{"class":52042},[36,54240,52049],{"class":49},[36,54242,54243,54245,54247,54249,54251,54253,54256,54258],{"class":38,"line":78},[36,54244,52886],{"class":49},[36,54246,52353],{"class":52042},[36,54248,54228],{"class":2713},[36,54250,54],{"class":49},[36,54252,54233],{"class":998},[36,54254,54255],{"class":49},">456\u003C\u002F",[36,54257,52353],{"class":52042},[36,54259,52049],{"class":49},[36,54261,54262,54264,54266],{"class":38,"line":125},[36,54263,52886],{"class":49},[36,54265,52555],{"class":52042},[36,54267,52049],{"class":49},[36,54269,54270],{"class":38,"line":131},[36,54271,54272],{"class":49},"    \u002F\u002F 1.获取匹配的第一个元素\n",[36,54274,54275],{"class":38,"line":396},[36,54276,54277],{"class":49},"    const box = document.querySelector('div')\n",[36,54279,54280],{"class":38,"line":407},[36,54281,54282],{"class":49},"    console.dir(box)\n",[36,54284,54285,54287,54289],{"class":38,"line":2061},[36,54286,53159],{"class":49},[36,54288,52555],{"class":52042},[36,54290,52049],{"class":49},[36,54292,54293,54295,54297],{"class":38,"line":2067},[36,54294,52527],{"class":49},[36,54296,52542],{"class":52042},[36,54298,52049],{"class":49},[14,54300,54301],{},"只选123，不选456",[14,54303,54304],{},[2212,54305],{"alt":31,"src":54306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,54308,54309],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,54311,54312],{},[2212,54313],{"alt":31,"src":54314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,54316,54317],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,54319,54320],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[851,54322,54323],{"start":46},[854,54324,54325],{},"其他方法来获取标签元素",[14,54327,54328],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,54330,54331],{},[2212,54332],{"alt":31,"src":54333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[868,54335,54337],{"id":54336},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,54339,54340],{},"设置修改DOM元素内容有两种方式：",[1886,54342,54343,54346,54349,54352],{},[854,54344,54345],{},"元素.innerText=''",[854,54347,54348],{},"元素.innerHTML=''",[854,54350,54351],{},"不写字符串输出数字也是可以的",[854,54353,54354],{},"元素.innerHtml=1",[22742,54356,54358],{"id":54357},"_3131-innertext","3.1.3.1 innerText",[14,54360,54361],{},[2212,54362],{"alt":31,"src":54363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,54365,54366],{},"思路：实现了修改盒子中的内容！",[14,54368,54369],{},"它只显示纯文本，不解析标签",[22742,54371,54373],{"id":54372},"_3132-innerhtml","3.1.3.2 innerHTML",[14,54375,54376],{},[2212,54377],{"alt":31,"src":54378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,54380,54381],{},"相比于innerText，他的强大之处在于可以解析标签",[868,54383,54385],{"id":54384},"_314-操作元素属性","3.1.4 操作元素属性",[22742,54387,54389],{"id":54388},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,54391,54392],{},[2212,54393],{"alt":31,"src":54394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22742,54396,54398],{"id":54397},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,54400,54401],{},[2212,54402],{"alt":31,"src":54403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,54405,54406],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,54408,54409],{},"div.style.backgroundColor = 'hotpink'",[14,54411,54412],{},"如果按照css的写法，-表示减，就会出错",[14,54414,54415],{},"body元素不需要再获取，直接用就行！！！！！！",[14,54417,54418],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,54420,54421],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,54423,54424],{},[2212,54425],{"alt":31,"src":54426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,54428,54429],{},[2212,54430],{"alt":31,"src":54431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[851,54433,54434,54437,54440,54443,54446,54449],{},[854,54435,54436],{},"className这个方式就是修改很多样式的时候来使用的！",[854,54438,54439],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[854,54441,54442],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[854,54444,54445],{},"className为属性名，如果还用class的话就导致与关键字冲突",[854,54447,54448],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[854,54450,54451,54452,54457],{},"解析标签的时候就变为了",[52353,54453],{"className":54454},[54455,54456],"nav","box",[54458,54459],"br",{},[14,54461,54462],{},"例子：",[52353,54464],{"className":54465},[54455],[52555,54467,54468],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,54470,54471],{},[2212,54472],{"alt":31,"src":54473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,54475,54476],{},"追加和删除类名用classList",[14,54478,54479],{},"常用于类似于开关的操作",[14,54481,54482],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,54484,54485],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22742,54487,54489],{"id":54488},"_3143-牢记点","3.1.4.3 牢记点",[851,54491,54492,54495,54498,54501,54504,54507,54510,54513,54516],{},[854,54493,54494],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[854,54496,54497],{},"使用style属性操作css时不要忘记引号",[854,54499,54500],{},"使用className或者classList时也不要忘记引号",[854,54502,54503],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[854,54505,54506],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[854,54508,54509],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[854,54511,54512],{},"若： let arr=['1','2',3] arr[0]=1",[854,54514,54515],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[854,54517,54518],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[868,54520,54522],{"id":54521},"_315-操作表单元素","3.1.5 操作表单元素",[851,54524,54525],{},[854,54526,54527],{},"天生的属性",[14,54529,54530],{},[2212,54531],{"alt":31,"src":54532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,54534,54535],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,54537,54538],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,54540,54541],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,54543,54544],{},[2212,54545],{"alt":31,"src":54546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[26,54548,54550],{"className":51375,"code":54549,"language":51377,"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,54551,54552,54557,54589,54594,54599,54604,54609,54613,54618,54623,54640,54652,54657],{"__ignoreMap":31},[36,54553,54554],{"class":38,"line":39},[36,54555,54556],{"class":49},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[36,54558,54559,54561,54564,54567,54569,54572,54574,54576,54578,54580,54582,54584,54587],{"class":38,"line":46},[36,54560,1789],{"class":49},[36,54562,54563],{"class":52042},"input",[36,54565,54566],{"class":2713}," type",[36,54568,54],{"class":49},[36,54570,54571],{"class":998},"\"checkbox\"",[36,54573,15664],{"class":2713},[36,54575,54],{"class":49},[36,54577,8399],{"class":998},[36,54579,15703],{"class":2713},[36,54581,54],{"class":49},[36,54583,8399],{"class":998},[36,54585,54586],{"class":2713}," checked",[36,54588,52049],{"class":49},[36,54590,54591],{"class":38,"line":78},[36,54592,54593],{"class":49},"不选的话：\n",[36,54595,54596],{"class":38,"line":125},[36,54597,54598],{"class":49},"const input = document.querySelector('input')\n",[36,54600,54601],{"class":38,"line":131},[36,54602,54603],{"class":49},"input.checked=false\n",[36,54605,54606],{"class":38,"line":396},[36,54607,54608],{"class":49},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[36,54610,54611],{"class":38,"line":407},[36,54612,194],{"emptyLinePlaceholder":193},[36,54614,54615],{"class":38,"line":2061},[36,54616,54617],{"class":49},"禁用按钮：\n",[36,54619,54620],{"class":38,"line":2067},[36,54621,54622],{"class":49},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[36,54624,54625,54627,54630,54633,54636,54638],{"class":38,"line":2079},[36,54626,1789],{"class":49},[36,54628,54629],{"class":52042},"button",[36,54631,54632],{"class":2713}," disabled",[36,54634,54635],{"class":49},">点击\u003C\u002F",[36,54637,54629],{"class":52042},[36,54639,52049],{"class":49},[36,54641,54642,54644,54646,54648,54650],{"class":38,"line":2362},[36,54643,1789],{"class":49},[36,54645,54629],{"class":52042},[36,54647,54635],{"class":49},[36,54649,54629],{"class":52042},[36,54651,52049],{"class":49},[36,54653,54654],{"class":38,"line":2367},[36,54655,54656],{"class":49},"const bt = document.querySelector('button')\n",[36,54658,54659],{"class":38,"line":2373},[36,54660,54661],{"class":49},"bt.disabled = false\n",[851,54663,54664],{"start":46},[854,54665,54666],{},"自定义属性",[14,54668,54669],{},[2212,54670],{"alt":31,"src":54671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[26,54673,54675],{"className":53809,"code":54674,"language":53811,"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,54676,54677,54685,54713,54732,54751,54770,54789,54797,54802,54807,54812,54817,54825],{"__ignoreMap":31},[36,54678,54679,54681,54683],{"class":38,"line":39},[36,54680,1789],{"class":49},[36,54682,52542],{"class":52042},[36,54684,52049],{"class":49},[36,54686,54687,54689,54691,54694,54696,54698,54701,54703,54706,54709,54711],{"class":38,"line":46},[36,54688,52886],{"class":49},[36,54690,52353],{"class":52042},[36,54692,54693],{"class":2713}," data-id",[36,54695,54],{"class":49},[36,54697,4427],{"class":998},[36,54699,54700],{"class":2713}," data-spm",[36,54702,54],{"class":49},[36,54704,54705],{"class":998},"\"我不知道\"",[36,54707,54708],{"class":49},">1\u003C\u002F",[36,54710,52353],{"class":52042},[36,54712,52049],{"class":49},[36,54714,54715,54717,54719,54721,54723,54725,54728,54730],{"class":38,"line":78},[36,54716,52886],{"class":49},[36,54718,52353],{"class":52042},[36,54720,54693],{"class":2713},[36,54722,54],{"class":49},[36,54724,4450],{"class":998},[36,54726,54727],{"class":49},">2\u003C\u002F",[36,54729,52353],{"class":52042},[36,54731,52049],{"class":49},[36,54733,54734,54736,54738,54740,54742,54744,54747,54749],{"class":38,"line":125},[36,54735,52886],{"class":49},[36,54737,52353],{"class":52042},[36,54739,54693],{"class":2713},[36,54741,54],{"class":49},[36,54743,4463],{"class":998},[36,54745,54746],{"class":49},">3\u003C\u002F",[36,54748,52353],{"class":52042},[36,54750,52049],{"class":49},[36,54752,54753,54755,54757,54759,54761,54763,54766,54768],{"class":38,"line":131},[36,54754,52886],{"class":49},[36,54756,52353],{"class":52042},[36,54758,54693],{"class":2713},[36,54760,54],{"class":49},[36,54762,4476],{"class":998},[36,54764,54765],{"class":49},">4\u003C\u002F",[36,54767,52353],{"class":52042},[36,54769,52049],{"class":49},[36,54771,54772,54774,54776,54778,54780,54782,54785,54787],{"class":38,"line":396},[36,54773,52886],{"class":49},[36,54775,52353],{"class":52042},[36,54777,54693],{"class":2713},[36,54779,54],{"class":49},[36,54781,4497],{"class":998},[36,54783,54784],{"class":49},">5\u003C\u002F",[36,54786,52353],{"class":52042},[36,54788,52049],{"class":49},[36,54790,54791,54793,54795],{"class":38,"line":407},[36,54792,52886],{"class":49},[36,54794,52555],{"class":52042},[36,54796,52049],{"class":49},[36,54798,54799],{"class":38,"line":2061},[36,54800,54801],{"class":49},"    const one = document.querySelector('div')\n",[36,54803,54804],{"class":38,"line":2067},[36,54805,54806],{"class":49},"    console.log(one.dataset)\n",[36,54808,54809],{"class":38,"line":2079},[36,54810,54811],{"class":49},"    console.log(one.dataset.id)\n",[36,54813,54814],{"class":38,"line":2362},[36,54815,54816],{"class":49},"    console.log(one.dataset.spm)\n",[36,54818,54819,54821,54823],{"class":38,"line":2367},[36,54820,53159],{"class":49},[36,54822,52555],{"class":52042},[36,54824,52049],{"class":49},[36,54826,54827,54829,54831],{"class":38,"line":2373},[36,54828,52527],{"class":49},[36,54830,52542],{"class":52042},[36,54832,52049],{"class":49},[14,54834,54835],{},[2212,54836],{"alt":31,"src":54837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54839,54840],{},"document.querySelector选择的是第一个对象（元素）",[868,54842,54844],{"id":54843},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54846,54847],{},[2212,54848],{"alt":31,"src":54849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54851,54852],{},[2212,54853],{"alt":31,"src":54854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54856,54857],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52555,54859,54860],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54862,54863],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52555,54865,54866],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[14,54868,54869],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54871,54872],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54874,54875],{},"单位为毫秒！！！",[14,54877,54878],{},"可以搭配匿名函数来用！！！",[14,54880,54881],{},"setInterval(function () {",[14,54883,54884],{},"alert('两秒执行一次')",[14,54886,54887],{},"}, 2000)",[14,54889,54890],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54892,54893],{},"function fn() {",[14,54895,54896],{},"document.write(1)",[14,54898,1825],{},[14,54900,54901],{},"setInterval(fn, 1000)",[14,54903,54904],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54906,54907],{},"setInterval('fn()', 1000)",[14,54909,54910],{},[2212,54911],{"alt":31,"src":54912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22742,54914,54916],{"id":54915},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[26,54918,54920],{"className":51375,"code":54919,"language":51377,"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,54921,54922,54932,54946,54950,54958,54972,54992,55004,55012,55016,55024,55061,55066,55071,55076,55084,55092,55114,55122,55127,55149,55154,55159,55170,55175,55195,55203,55218,55233,55244,55249,55259,55269,55273,55282,55286,55294,55302,55306],{"__ignoreMap":31},[36,54923,54924,54926,54928,54930],{"class":38,"line":39},[36,54925,52039],{"class":49},[36,54927,52043],{"class":52042},[36,54929,52046],{"class":2713},[36,54931,52049],{"class":49},[36,54933,54934,54936,54938,54940,54942,54944],{"class":38,"line":46},[36,54935,1789],{"class":49},[36,54937,51377],{"class":52042},[36,54939,52058],{"class":2713},[36,54941,54],{"class":49},[36,54943,52063],{"class":998},[36,54945,52049],{"class":49},[36,54947,54948],{"class":38,"line":78},[36,54949,194],{"emptyLinePlaceholder":193},[36,54951,54952,54954,54956],{"class":38,"line":125},[36,54953,1789],{"class":49},[36,54955,52076],{"class":52042},[36,54957,52049],{"class":49},[36,54959,54960,54962,54964,54966,54968,54970],{"class":38,"line":131},[36,54961,52886],{"class":49},[36,54963,52086],{"class":52042},[36,54965,52089],{"class":2713},[36,54967,54],{"class":49},[36,54969,52094],{"class":998},[36,54971,52049],{"class":49},[36,54973,54974,54976,54978,54980,54982,54984,54986,54988,54990],{"class":38,"line":396},[36,54975,52886],{"class":49},[36,54977,52086],{"class":52042},[36,54979,15664],{"class":2713},[36,54981,54],{"class":49},[36,54983,52133],{"class":998},[36,54985,52113],{"class":2713},[36,54987,54],{"class":49},[36,54989,52140],{"class":998},[36,54991,52049],{"class":49},[36,54993,54994,54996,54998,55000,55002],{"class":38,"line":407},[36,54995,52886],{"class":49},[36,54997,52149],{"class":52042},[36,54999,52152],{"class":49},[36,55001,52149],{"class":52042},[36,55003,52049],{"class":49},[36,55005,55006,55008,55010],{"class":38,"line":2061},[36,55007,52527],{"class":49},[36,55009,52076],{"class":52042},[36,55011,52049],{"class":49},[36,55013,55014],{"class":38,"line":2067},[36,55015,194],{"emptyLinePlaceholder":193},[36,55017,55018,55020,55022],{"class":38,"line":2079},[36,55019,1789],{"class":49},[36,55021,52542],{"class":52042},[36,55023,52049],{"class":49},[36,55025,55026,55028,55031,55033,55035,55037,55039,55041,55043,55046,55048,55051,55054,55056,55059],{"class":38,"line":2362},[36,55027,52886],{"class":49},[36,55029,55030],{"class":52042},"textarea",[36,55032,15664],{"class":2713},[36,55034,54],{"class":49},[36,55036,8399],{"class":998},[36,55038,15703],{"class":2713},[36,55040,54],{"class":49},[36,55042,8399],{"class":998},[36,55044,55045],{"class":2713}," cols",[36,55047,54],{"class":49},[36,55049,55050],{"class":998},"\"30\"",[36,55052,55053],{"class":2713}," rows",[36,55055,54],{"class":49},[36,55057,55058],{"class":998},"\"10\"",[36,55060,52049],{"class":49},[36,55062,55063],{"class":38,"line":2367},[36,55064,55065],{"class":49},"        用户注册协议\n",[36,55067,55068],{"class":38,"line":2373},[36,55069,55070],{"class":49},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[36,55072,55073],{"class":38,"line":2378},[36,55074,55075],{"class":49},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[36,55077,55078,55080,55082],{"class":38,"line":2392},[36,55079,52518],{"class":49},[36,55081,55030],{"class":52042},[36,55083,52049],{"class":49},[36,55085,55086,55088,55090],{"class":38,"line":2397},[36,55087,52886],{"class":49},[36,55089,54458],{"class":52042},[36,55091,52049],{"class":49},[36,55093,55094,55096,55098,55100,55102,55105,55107,55110,55112],{"class":38,"line":2403},[36,55095,52886],{"class":49},[36,55097,54629],{"class":52042},[36,55099,54228],{"class":2713},[36,55101,54],{"class":49},[36,55103,55104],{"class":998},"\"btn\"",[36,55106,54632],{"class":2713},[36,55108,55109],{"class":49},">我已经阅读用户协议(5)\u003C\u002F",[36,55111,54629],{"class":52042},[36,55113,52049],{"class":49},[36,55115,55116,55118,55120],{"class":38,"line":2424},[36,55117,52886],{"class":49},[36,55119,52555],{"class":52042},[36,55121,52049],{"class":49},[36,55123,55124],{"class":38,"line":2429},[36,55125,55126],{"class":42},"    \u002F\u002F 1. 获取元素\n",[36,55128,55129,55131,55134,55136,55139,55142,55144,55147],{"class":38,"line":2443},[36,55130,11966],{"class":53},[36,55132,55133],{"class":60}," btn",[36,55135,14308],{"class":53},[36,55137,55138],{"class":49}," document.",[36,55140,55141],{"class":2713},"querySelector",[36,55143,901],{"class":49},[36,55145,55146],{"class":998},"'.btn'",[36,55148,75],{"class":49},[36,55150,55151],{"class":38,"line":2448},[36,55152,55153],{"class":42},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[36,55155,55156],{"class":38,"line":2477},[36,55157,55158],{"class":42},"    \u002F\u002F 2. 倒计时\n",[36,55160,55161,55163,55165,55167],{"class":38,"line":2482},[36,55162,52961],{"class":53},[36,55164,10185],{"class":49},[36,55166,54],{"class":53},[36,55168,55169],{"class":60}," 5\n",[36,55171,55172],{"class":38,"line":2499},[36,55173,55174],{"class":42},"    \u002F\u002F 2.1 开启定时器\n",[36,55176,55177,55179,55182,55184,55187,55189,55192],{"class":38,"line":2504},[36,55178,52961],{"class":53},[36,55180,55181],{"class":49}," n ",[36,55183,54],{"class":53},[36,55185,55186],{"class":2713}," setInterval",[36,55188,901],{"class":49},[36,55190,55191],{"class":53},"function",[36,55193,55194],{"class":49}," () {\n",[36,55196,55197,55200],{"class":38,"line":2509},[36,55198,55199],{"class":49},"      i",[36,55201,55202],{"class":53},"--\n",[36,55204,55205,55208,55210,55213,55215],{"class":38,"line":2514},[36,55206,55207],{"class":49},"      btn.innerHTML ",[36,55209,54],{"class":53},[36,55211,55212],{"class":998}," `我已经阅读用户协议(${",[36,55214,1326],{"class":49},[36,55216,55217],{"class":998},"})`\n",[36,55219,55220,55223,55226,55229,55231],{"class":38,"line":2528},[36,55221,55222],{"class":53},"      if",[36,55224,55225],{"class":49}," (i ",[36,55227,55228],{"class":53},"===",[36,55230,4842],{"class":60},[36,55232,13186],{"class":49},[36,55234,55235,55238,55241],{"class":38,"line":2533},[36,55236,55237],{"class":2713},"        clearInterval",[36,55239,55240],{"class":49},"(n)  ",[36,55242,55243],{"class":42},"\u002F\u002F 关闭定时器\n",[36,55245,55246],{"class":38,"line":3326},[36,55247,55248],{"class":42},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[36,55250,55251,55254,55256],{"class":38,"line":3340},[36,55252,55253],{"class":49},"        btn.disabled ",[36,55255,54],{"class":53},[36,55257,55258],{"class":60}," false\n",[36,55260,55261,55264,55266],{"class":38,"line":3348},[36,55262,55263],{"class":49},"        btn.innerHTML ",[36,55265,54],{"class":53},[36,55267,55268],{"class":998}," '同意'\n",[36,55270,55271],{"class":38,"line":3353},[36,55272,53140],{"class":49},[36,55274,55275,55278,55280],{"class":38,"line":3359},[36,55276,55277],{"class":49},"    }, ",[36,55279,7157],{"class":60},[36,55281,75],{"class":49},[36,55283,55284],{"class":38,"line":3365},[36,55285,194],{"emptyLinePlaceholder":193},[36,55287,55288,55290,55292],{"class":38,"line":3370},[36,55289,53159],{"class":49},[36,55291,52555],{"class":52042},[36,55293,52049],{"class":49},[36,55295,55296,55298,55300],{"class":38,"line":8695},[36,55297,52527],{"class":49},[36,55299,52542],{"class":52042},[36,55301,52049],{"class":49},[36,55303,55304],{"class":38,"line":8719},[36,55305,194],{"emptyLinePlaceholder":193},[36,55307,55308,55310,55312],{"class":38,"line":8724},[36,55309,52527],{"class":49},[36,55311,51377],{"class":52042},[36,55313,52049],{"class":49},[14,55315,55316],{},"不要一直想着用死循环,避免死循环",[14,55318,55319,55322],{},[33,55320,55321],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22742,55324,55326],{"id":55325},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[851,55328,55329],{},[854,55330,55331],{},"法1",[26,55333,55335],{"className":51375,"code":55334,"language":51377,"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,55336,55337,55347,55361,55365,55373,55387,55407,55419,55427,55433,55444,55455,55459,55463,55470,55482,55486,55490,55497,55509,55523,55536,55550,55554,55558,55565,55576,55587,55598,55610,55622,55634,55638,55642,55650,55660,55673,55685,55698,55702,55706,55713,55723,55735,55747,55758,55769,55779,55791,55803,55807,55811,55820,55832,55844,55872,55885,55889,55893,55900,55911,55915,55923,55931,55935,55943,55957,55972,55996,56004,56019,56032,56040,56061,56073,56085,56097,56109,56121,56133,56145,56154,56162,56170,56178,56190,56213,56232,56251,56270,56289,56308,56327,56347,56351,56371,56390,56410,56431,56442,56459,56469,56479,56489,56494,56499,56504,56509,56534,56547,56551,56574,56578,56586,56594,56602,56606],{"__ignoreMap":31},[36,55338,55339,55341,55343,55345],{"class":38,"line":39},[36,55340,52039],{"class":49},[36,55342,52043],{"class":52042},[36,55344,52046],{"class":2713},[36,55346,52049],{"class":49},[36,55348,55349,55351,55353,55355,55357,55359],{"class":38,"line":46},[36,55350,1789],{"class":49},[36,55352,51377],{"class":52042},[36,55354,52058],{"class":2713},[36,55356,54],{"class":49},[36,55358,52063],{"class":998},[36,55360,52049],{"class":49},[36,55362,55363],{"class":38,"line":78},[36,55364,194],{"emptyLinePlaceholder":193},[36,55366,55367,55369,55371],{"class":38,"line":125},[36,55368,1789],{"class":49},[36,55370,52076],{"class":52042},[36,55372,52049],{"class":49},[36,55374,55375,55377,55379,55381,55383,55385],{"class":38,"line":131},[36,55376,52886],{"class":49},[36,55378,52086],{"class":52042},[36,55380,52089],{"class":2713},[36,55382,54],{"class":49},[36,55384,52094],{"class":998},[36,55386,52049],{"class":49},[36,55388,55389,55391,55393,55395,55397,55399,55401,55403,55405],{"class":38,"line":396},[36,55390,52886],{"class":49},[36,55392,52086],{"class":52042},[36,55394,15664],{"class":2713},[36,55396,54],{"class":49},[36,55398,52133],{"class":998},[36,55400,52113],{"class":2713},[36,55402,54],{"class":49},[36,55404,52140],{"class":998},[36,55406,52049],{"class":49},[36,55408,55409,55411,55413,55415,55417],{"class":38,"line":407},[36,55410,52886],{"class":49},[36,55412,52149],{"class":52042},[36,55414,52152],{"class":49},[36,55416,52149],{"class":52042},[36,55418,52049],{"class":49},[36,55420,55421,55423,55425],{"class":38,"line":2061},[36,55422,52886],{"class":49},[36,55424,807],{"class":52042},[36,55426,52049],{"class":49},[36,55428,55429,55431],{"class":38,"line":2067},[36,55430,7150],{"class":52042},[36,55432,16316],{"class":49},[36,55434,55435,55438,55440,55442],{"class":38,"line":2079},[36,55436,55437],{"class":60},"      padding",[36,55439,52179],{"class":49},[36,55441,643],{"class":60},[36,55443,2040],{"class":49},[36,55445,55446,55449,55451,55453],{"class":38,"line":2362},[36,55447,55448],{"class":60},"      margin",[36,55450,52179],{"class":49},[36,55452,643],{"class":60},[36,55454,2040],{"class":49},[36,55456,55457],{"class":38,"line":2367},[36,55458,2937],{"class":49},[36,55460,55461],{"class":38,"line":2373},[36,55462,194],{"emptyLinePlaceholder":193},[36,55464,55465,55468],{"class":38,"line":2378},[36,55466,55467],{"class":52042},"    li",[36,55469,16316],{"class":49},[36,55471,55472,55475,55477,55480],{"class":38,"line":2392},[36,55473,55474],{"class":60},"      list-style",[36,55476,52179],{"class":49},[36,55478,55479],{"class":60},"none",[36,55481,2040],{"class":49},[36,55483,55484],{"class":38,"line":2397},[36,55485,2937],{"class":49},[36,55487,55488],{"class":38,"line":2403},[36,55489,194],{"emptyLinePlaceholder":193},[36,55491,55492,55495],{"class":38,"line":2424},[36,55493,55494],{"class":2713},"    .box",[36,55496,16316],{"class":49},[36,55498,55499,55502,55504,55507],{"class":38,"line":2429},[36,55500,55501],{"class":60},"      position",[36,55503,52179],{"class":49},[36,55505,55506],{"class":60},"relative",[36,55508,2040],{"class":49},[36,55510,55511,55514,55516,55519,55521],{"class":38,"line":2443},[36,55512,55513],{"class":60},"      width",[36,55515,52179],{"class":49},[36,55517,55518],{"class":60},"976",[36,55520,52234],{"class":53},[36,55522,2040],{"class":49},[36,55524,55525,55528,55530,55532,55534],{"class":38,"line":2448},[36,55526,55527],{"class":60},"      height",[36,55529,52179],{"class":49},[36,55531,2289],{"class":60},[36,55533,52234],{"class":53},[36,55535,2040],{"class":49},[36,55537,55538,55540,55542,55544,55546,55548],{"class":38,"line":2477},[36,55539,55448],{"class":60},[36,55541,52179],{"class":49},[36,55543,67],{"class":60},[36,55545,52234],{"class":53},[36,55547,52298],{"class":60},[36,55549,2040],{"class":49},[36,55551,55552],{"class":38,"line":2482},[36,55553,2937],{"class":49},[36,55555,55556],{"class":38,"line":2499},[36,55557,194],{"emptyLinePlaceholder":193},[36,55559,55560,55563],{"class":38,"line":2504},[36,55561,55562],{"class":2713},"    .slider-footer",[36,55564,16316],{"class":49},[36,55566,55567,55569,55571,55574],{"class":38,"line":2509},[36,55568,55501],{"class":60},[36,55570,52179],{"class":49},[36,55572,55573],{"class":60},"absolute",[36,55575,2040],{"class":49},[36,55577,55578,55581,55583,55585],{"class":38,"line":2514},[36,55579,55580],{"class":60},"      left",[36,55582,52179],{"class":49},[36,55584,643],{"class":60},[36,55586,2040],{"class":49},[36,55588,55589,55592,55594,55596],{"class":38,"line":2528},[36,55590,55591],{"class":60},"      bottom",[36,55593,52179],{"class":49},[36,55595,643],{"class":60},[36,55597,2040],{"class":49},[36,55599,55600,55602,55604,55606,55608],{"class":38,"line":2533},[36,55601,55513],{"class":60},[36,55603,52179],{"class":49},[36,55605,67],{"class":60},[36,55607,1214],{"class":53},[36,55609,2040],{"class":49},[36,55611,55612,55614,55616,55618,55620],{"class":38,"line":3326},[36,55613,55527],{"class":60},[36,55615,52179],{"class":49},[36,55617,1457],{"class":60},[36,55619,1214],{"class":53},[36,55621,2040],{"class":49},[36,55623,55624,55627,55629,55632],{"class":38,"line":3340},[36,55625,55626],{"class":60},"      background-color",[36,55628,52179],{"class":49},[36,55630,55631],{"class":60},"skyblue",[36,55633,2040],{"class":49},[36,55635,55636],{"class":38,"line":3348},[36,55637,2937],{"class":49},[36,55639,55640],{"class":38,"line":3353},[36,55641,194],{"emptyLinePlaceholder":193},[36,55643,55644,55646,55648],{"class":38,"line":3359},[36,55645,55562],{"class":2713},[36,55647,7572],{"class":52042},[36,55649,16316],{"class":49},[36,55651,55652,55654,55656,55658],{"class":38,"line":3365},[36,55653,55501],{"class":60},[36,55655,52179],{"class":49},[36,55657,55573],{"class":60},[36,55659,2040],{"class":49},[36,55661,55662,55665,55667,55669,55671],{"class":38,"line":3370},[36,55663,55664],{"class":60},"      font-size",[36,55666,52179],{"class":49},[36,55668,1780],{"class":60},[36,55670,52234],{"class":53},[36,55672,2040],{"class":49},[36,55674,55675,55677,55679,55681,55683],{"class":38,"line":8695},[36,55676,55580],{"class":60},[36,55678,52179],{"class":49},[36,55680,72],{"class":60},[36,55682,52234],{"class":53},[36,55684,2040],{"class":49},[36,55686,55687,55690,55692,55694,55696],{"class":38,"line":8719},[36,55688,55689],{"class":60},"      top",[36,55691,52179],{"class":49},[36,55693,157],{"class":60},[36,55695,52234],{"class":53},[36,55697,2040],{"class":49},[36,55699,55700],{"class":38,"line":8724},[36,55701,2937],{"class":49},[36,55703,55704],{"class":38,"line":8730},[36,55705,194],{"emptyLinePlaceholder":193},[36,55707,55708,55711],{"class":38,"line":8757},[36,55709,55710],{"class":52042},"    ul",[36,55712,16316],{"class":49},[36,55714,55715,55717,55719,55721],{"class":38,"line":8762},[36,55716,55501],{"class":60},[36,55718,52179],{"class":49},[36,55720,55573],{"class":60},[36,55722,2040],{"class":49},[36,55724,55725,55727,55729,55731,55733],{"class":38,"line":8768},[36,55726,55689],{"class":60},[36,55728,52179],{"class":49},[36,55730,1661],{"class":60},[36,55732,52234],{"class":53},[36,55734,2040],{"class":49},[36,55736,55737,55739,55741,55743,55745],{"class":38,"line":8780},[36,55738,55580],{"class":60},[36,55740,52179],{"class":49},[36,55742,72],{"class":60},[36,55744,52234],{"class":53},[36,55746,2040],{"class":49},[36,55748,55749,55752,55754,55756],{"class":38,"line":8792},[36,55750,55751],{"class":60},"      display",[36,55753,52179],{"class":49},[36,55755,52219],{"class":60},[36,55757,2040],{"class":49},[36,55759,55760,55763,55765,55767],{"class":38,"line":8804},[36,55761,55762],{"class":60},"      justify-content",[36,55764,52179],{"class":49},[36,55766,52410],{"class":60},[36,55768,2040],{"class":49},[36,55770,55771,55773,55775,55777],{"class":38,"line":10463},[36,55772,55501],{"class":60},[36,55774,52179],{"class":49},[36,55776,55573],{"class":60},[36,55778,2040],{"class":49},[36,55780,55781,55783,55785,55787,55789],{"class":38,"line":10488},[36,55782,55513],{"class":60},[36,55784,52179],{"class":49},[36,55786,4741],{"class":60},[36,55788,52234],{"class":53},[36,55790,2040],{"class":49},[36,55792,55793,55795,55797,55799,55801],{"class":38,"line":10511},[36,55794,55527],{"class":60},[36,55796,52179],{"class":49},[36,55798,72],{"class":60},[36,55800,52234],{"class":53},[36,55802,2040],{"class":49},[36,55804,55805],{"class":38,"line":10535},[36,55806,2937],{"class":49},[36,55808,55809],{"class":38,"line":10540},[36,55810,194],{"emptyLinePlaceholder":193},[36,55812,55813,55815,55818],{"class":38,"line":10545},[36,55814,55710],{"class":52042},[36,55816,55817],{"class":52042}," li",[36,55819,16316],{"class":49},[36,55821,55822,55824,55826,55828,55830],{"class":38,"line":10550},[36,55823,55513],{"class":60},[36,55825,52179],{"class":49},[36,55827,72],{"class":60},[36,55829,52234],{"class":53},[36,55831,2040],{"class":49},[36,55833,55834,55836,55838,55840,55842],{"class":38,"line":10559},[36,55835,55527],{"class":60},[36,55837,52179],{"class":49},[36,55839,72],{"class":60},[36,55841,52234],{"class":53},[36,55843,2040],{"class":49},[36,55845,55846,55848,55850,55853,55855,55857,55859,55861,55863,55865,55867,55870],{"class":38,"line":10564},[36,55847,55626],{"class":60},[36,55849,52179],{"class":49},[36,55851,55852],{"class":60},"rgba",[36,55854,901],{"class":49},[36,55856,643],{"class":60},[36,55858,154],{"class":49},[36,55860,643],{"class":60},[36,55862,154],{"class":49},[36,55864,643],{"class":60},[36,55866,154],{"class":49},[36,55868,55869],{"class":60},".4",[36,55871,3468],{"class":49},[36,55873,55874,55877,55879,55881,55883],{"class":38,"line":10570},[36,55875,55876],{"class":60},"      border-radius",[36,55878,52179],{"class":49},[36,55880,332],{"class":60},[36,55882,52234],{"class":53},[36,55884,2040],{"class":49},[36,55886,55887],{"class":38,"line":10591},[36,55888,2937],{"class":49},[36,55890,55891],{"class":38,"line":10597},[36,55892,194],{"emptyLinePlaceholder":193},[36,55894,55895,55898],{"class":38,"line":10611},[36,55896,55897],{"class":2713},"    .activate",[36,55899,16316],{"class":49},[36,55901,55902,55904,55906,55909],{"class":38,"line":10617},[36,55903,55626],{"class":60},[36,55905,52179],{"class":49},[36,55907,55908],{"class":60},"#f7f7f7",[36,55910,2040],{"class":49},[36,55912,55913],{"class":38,"line":10644},[36,55914,2937],{"class":49},[36,55916,55917,55919,55921],{"class":38,"line":10653},[36,55918,53159],{"class":49},[36,55920,807],{"class":52042},[36,55922,52049],{"class":49},[36,55924,55925,55927,55929],{"class":38,"line":10659},[36,55926,52527],{"class":49},[36,55928,52076],{"class":52042},[36,55930,52049],{"class":49},[36,55932,55933],{"class":38,"line":10667},[36,55934,194],{"emptyLinePlaceholder":193},[36,55936,55937,55939,55941],{"class":38,"line":10672},[36,55938,1789],{"class":49},[36,55940,52542],{"class":52042},[36,55942,52049],{"class":49},[36,55944,55945,55947,55949,55951,55953,55955],{"class":38,"line":17348},[36,55946,52886],{"class":49},[36,55948,52353],{"class":52042},[36,55950,54228],{"class":2713},[36,55952,54],{"class":49},[36,55954,54233],{"class":998},[36,55956,52049],{"class":49},[36,55958,55959,55961,55963,55965,55967,55970],{"class":38,"line":17354},[36,55960,52083],{"class":49},[36,55962,52353],{"class":52042},[36,55964,54228],{"class":2713},[36,55966,54],{"class":49},[36,55968,55969],{"class":998},"\"slider-wrapper\"",[36,55971,52049],{"class":49},[36,55973,55974,55977,55979,55982,55984,55987,55990,55992,55994],{"class":38,"line":17377},[36,55975,55976],{"class":49},"      \u003C",[36,55978,2212],{"class":52042},[36,55980,55981],{"class":2713}," src",[36,55983,54],{"class":49},[36,55985,55986],{"class":998},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[36,55988,55989],{"class":2713}," alt",[36,55991,54],{"class":49},[36,55993,8399],{"class":998},[36,55995,52049],{"class":49},[36,55997,55998,56000,56002],{"class":38,"line":17383},[36,55999,52518],{"class":49},[36,56001,52353],{"class":52042},[36,56003,52049],{"class":49},[36,56005,56006,56008,56010,56012,56014,56017],{"class":38,"line":17406},[36,56007,52083],{"class":49},[36,56009,52353],{"class":52042},[36,56011,54228],{"class":2713},[36,56013,54],{"class":49},[36,56015,56016],{"class":998},"\"slider-footer\"",[36,56018,52049],{"class":49},[36,56020,56021,56023,56025,56028,56030],{"class":38,"line":17420},[36,56022,55976],{"class":49},[36,56024,14],{"class":52042},[36,56026,56027],{"class":49},">对人类来说会不会太超前了?\u003C\u002F",[36,56029,14],{"class":52042},[36,56031,52049],{"class":49},[36,56033,56034,56036,56038],{"class":38,"line":17440},[36,56035,55976],{"class":49},[36,56037,1886],{"class":52042},[36,56039,52049],{"class":49},[36,56041,56042,56045,56047,56049,56051,56054,56057,56059],{"class":38,"line":17446},[36,56043,56044],{"class":49},"        \u003C",[36,56046,854],{"class":52042},[36,56048,54228],{"class":2713},[36,56050,54],{"class":49},[36,56052,56053],{"class":998},"\"activate\"",[36,56055,56056],{"class":49},">\u003C\u002F",[36,56058,854],{"class":52042},[36,56060,52049],{"class":49},[36,56062,56063,56065,56067,56069,56071],{"class":38,"line":17457},[36,56064,56044],{"class":49},[36,56066,854],{"class":52042},[36,56068,56056],{"class":49},[36,56070,854],{"class":52042},[36,56072,52049],{"class":49},[36,56074,56075,56077,56079,56081,56083],{"class":38,"line":17480},[36,56076,56044],{"class":49},[36,56078,854],{"class":52042},[36,56080,56056],{"class":49},[36,56082,854],{"class":52042},[36,56084,52049],{"class":49},[36,56086,56087,56089,56091,56093,56095],{"class":38,"line":17502},[36,56088,56044],{"class":49},[36,56090,854],{"class":52042},[36,56092,56056],{"class":49},[36,56094,854],{"class":52042},[36,56096,52049],{"class":49},[36,56098,56099,56101,56103,56105,56107],{"class":38,"line":17507},[36,56100,56044],{"class":49},[36,56102,854],{"class":52042},[36,56104,56056],{"class":49},[36,56106,854],{"class":52042},[36,56108,52049],{"class":49},[36,56110,56111,56113,56115,56117,56119],{"class":38,"line":17513},[36,56112,56044],{"class":49},[36,56114,854],{"class":52042},[36,56116,56056],{"class":49},[36,56118,854],{"class":52042},[36,56120,52049],{"class":49},[36,56122,56123,56125,56127,56129,56131],{"class":38,"line":17527},[36,56124,56044],{"class":49},[36,56126,854],{"class":52042},[36,56128,56056],{"class":49},[36,56130,854],{"class":52042},[36,56132,52049],{"class":49},[36,56134,56135,56137,56139,56141,56143],{"class":38,"line":17540},[36,56136,56044],{"class":49},[36,56138,854],{"class":52042},[36,56140,56056],{"class":49},[36,56142,854],{"class":52042},[36,56144,52049],{"class":49},[36,56146,56147,56150,56152],{"class":38,"line":17545},[36,56148,56149],{"class":49},"      \u003C\u002F",[36,56151,1886],{"class":52042},[36,56153,52049],{"class":49},[36,56155,56156,56158,56160],{"class":38,"line":17559},[36,56157,52518],{"class":49},[36,56159,52353],{"class":52042},[36,56161,52049],{"class":49},[36,56163,56164,56166,56168],{"class":38,"line":17564},[36,56165,53159],{"class":49},[36,56167,52353],{"class":52042},[36,56169,52049],{"class":49},[36,56171,56172,56174,56176],{"class":38,"line":17570},[36,56173,52886],{"class":49},[36,56175,52555],{"class":52042},[36,56177,52049],{"class":49},[36,56179,56180,56182,56185,56187],{"class":38,"line":17575},[36,56181,11966],{"class":53},[36,56183,56184],{"class":60}," arrImage",[36,56186,14308],{"class":53},[36,56188,56189],{"class":49}," [\n",[36,56191,56192,56195,56198,56201,56204,56207,56210],{"class":38,"line":17589},[36,56193,56194],{"class":49},"      { url: ",[36,56196,56197],{"class":998},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[36,56199,56200],{"class":49},", title: ",[36,56202,56203],{"class":998},"'对人类来说会不会太超前了?'",[36,56205,56206],{"class":49},", color: ",[36,56208,56209],{"class":998},"'rgba(100,67,68)'",[36,56211,56212],{"class":49}," },\n",[36,56214,56215,56217,56220,56222,56225,56227,56230],{"class":38,"line":17594},[36,56216,56194],{"class":49},[36,56218,56219],{"class":998},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[36,56221,56200],{"class":49},[36,56223,56224],{"class":998},"'开启剑与雪的黑暗传说!'",[36,56226,56206],{"class":49},[36,56228,56229],{"class":998},"'rgba(43,35,26)'",[36,56231,56212],{"class":49},[36,56233,56234,56236,56239,56241,56244,56246,56249],{"class":38,"line":17599},[36,56235,56194],{"class":49},[36,56237,56238],{"class":998},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[36,56240,56200],{"class":49},[36,56242,56243],{"class":998},"'真正的jo厨出现了!'",[36,56245,56206],{"class":49},[36,56247,56248],{"class":998},"'rgba(36,31,33)'",[36,56250,56212],{"class":49},[36,56252,56253,56255,56258,56260,56263,56265,56268],{"class":38,"line":17613},[36,56254,56194],{"class":49},[36,56256,56257],{"class":998},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[36,56259,56200],{"class":49},[36,56261,56262],{"class":998},"'李玉刚:让世界通过b站看到东方大国文化'",[36,56264,56206],{"class":49},[36,56266,56267],{"class":998},"'rgba(139,98,66)'",[36,56269,56212],{"class":49},[36,56271,56272,56274,56277,56279,56282,56284,56287],{"class":38,"line":17625},[36,56273,56194],{"class":49},[36,56275,56276],{"class":998},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[36,56278,56200],{"class":49},[36,56280,56281],{"class":998},"'快来分享你的寒假日常吧'",[36,56283,56206],{"class":49},[36,56285,56286],{"class":998},"'rgba(67,90,92)'",[36,56288,56212],{"class":49},[36,56290,56291,56293,56296,56298,56301,56303,56306],{"class":38,"line":17630},[36,56292,56194],{"class":49},[36,56294,56295],{"class":998},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[36,56297,56200],{"class":49},[36,56299,56300],{"class":998},"'哔哩哔哩小年YEAR'",[36,56302,56206],{"class":49},[36,56304,56305],{"class":998},"'rgba(166,131,143)'",[36,56307,56212],{"class":49},[36,56309,56310,56312,56315,56317,56320,56322,56325],{"class":38,"line":17643},[36,56311,56194],{"class":49},[36,56313,56314],{"class":998},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[36,56316,56200],{"class":49},[36,56318,56319],{"class":998},"'一站式解决你的电脑配置问题'",[36,56321,56206],{"class":49},[36,56323,56324],{"class":998},"'rgba(53,29,25)'",[36,56326,56212],{"class":49},[36,56328,56329,56331,56334,56336,56339,56341,56344],{"class":38,"line":17648},[36,56330,56194],{"class":49},[36,56332,56333],{"class":998},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[36,56335,56200],{"class":49},[36,56337,56338],{"class":998},"'谁不想和小猫咪贴贴呢?'",[36,56340,56206],{"class":49},[36,56342,56343],{"class":998},"'rgba(99,72,114)'",[36,56345,56346],{"class":49}," }\n",[36,56348,56349],{"class":38,"line":17653},[36,56350,53851],{"class":49},[36,56352,56353,56355,56358,56360,56362,56364,56366,56369],{"class":38,"line":17658},[36,56354,11966],{"class":53},[36,56356,56357],{"class":60}," img",[36,56359,14308],{"class":53},[36,56361,55138],{"class":49},[36,56363,55141],{"class":2713},[36,56365,901],{"class":49},[36,56367,56368],{"class":998},"'.slider-wrapper img'",[36,56370,75],{"class":49},[36,56372,56373,56375,56377,56379,56381,56383,56385,56388],{"class":38,"line":17671},[36,56374,11966],{"class":53},[36,56376,7572],{"class":60},[36,56378,14308],{"class":53},[36,56380,55138],{"class":49},[36,56382,55141],{"class":2713},[36,56384,901],{"class":49},[36,56386,56387],{"class":998},"'.slider-footer p'",[36,56389,75],{"class":49},[36,56391,56392,56394,56397,56399,56401,56403,56405,56408],{"class":38,"line":17676},[36,56393,11966],{"class":53},[36,56395,56396],{"class":60}," color",[36,56398,14308],{"class":53},[36,56400,55138],{"class":49},[36,56402,55141],{"class":2713},[36,56404,901],{"class":49},[36,56406,56407],{"class":998},"'.slider-footer'",[36,56409,75],{"class":49},[36,56411,56412,56414,56417,56419,56421,56424,56426,56429],{"class":38,"line":33375},[36,56413,11966],{"class":53},[36,56415,56416],{"class":60}," lis",[36,56418,14308],{"class":53},[36,56420,55138],{"class":49},[36,56422,56423],{"class":2713},"querySelectorAll",[36,56425,901],{"class":49},[36,56427,56428],{"class":998},"'.slider-footer ul li'",[36,56430,75],{"class":49},[36,56432,56433,56435,56437,56439],{"class":38,"line":33381},[36,56434,52961],{"class":53},[36,56436,10185],{"class":49},[36,56438,54],{"class":53},[36,56440,56441],{"class":60}," 1\n",[36,56443,56444,56446,56449,56451,56453,56455,56457],{"class":38,"line":33387},[36,56445,52961],{"class":53},[36,56447,56448],{"class":49}," timer ",[36,56450,54],{"class":53},[36,56452,55186],{"class":2713},[36,56454,901],{"class":49},[36,56456,55191],{"class":53},[36,56458,55194],{"class":49},[36,56460,56461,56464,56466],{"class":38,"line":33393},[36,56462,56463],{"class":49},"      img.src ",[36,56465,54],{"class":53},[36,56467,56468],{"class":49}," arrImage[i].url\n",[36,56470,56471,56474,56476],{"class":38,"line":33399},[36,56472,56473],{"class":49},"      p.innerHTML ",[36,56475,54],{"class":53},[36,56477,56478],{"class":49}," arrImage[i].title\n",[36,56480,56481,56484,56486],{"class":38,"line":33410},[36,56482,56483],{"class":49},"      color.style.backgroundColor ",[36,56485,54],{"class":53},[36,56487,56488],{"class":49}," arrImage[i].color\n",[36,56490,56491],{"class":38,"line":33416},[36,56492,56493],{"class":42},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[36,56495,56496],{"class":38,"line":33436},[36,56497,56498],{"class":42},"      \u002F\u002F li.classList.add('activate')\n",[36,56500,56501],{"class":38,"line":33442},[36,56502,56503],{"class":42},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[36,56505,56506],{"class":38,"line":33453},[36,56507,56508],{"class":42},"      \u002F\u002F lis[i].classList.remove('activate')\n",[36,56510,56511,56514,56516,56518,56521,56524,56527,56529,56532],{"class":38,"line":33459},[36,56512,56513],{"class":49},"      document.",[36,56515,55141],{"class":2713},[36,56517,901],{"class":49},[36,56519,56520],{"class":998},"'.activate'",[36,56522,56523],{"class":49},")?.classList.",[36,56525,56526],{"class":2713},"toggle",[36,56528,901],{"class":49},[36,56530,56531],{"class":998},"'activate'",[36,56533,75],{"class":49},[36,56535,56536,56539,56541,56543,56545],{"class":38,"line":33465},[36,56537,56538],{"class":49},"      lis[i].classList.",[36,56540,6081],{"class":2713},[36,56542,901],{"class":49},[36,56544,56531],{"class":998},[36,56546,75],{"class":49},[36,56548,56549],{"class":38,"line":33471},[36,56550,194],{"emptyLinePlaceholder":193},[36,56552,56553,56556,56558,56560,56562,56564,56566,56568,56571],{"class":38,"line":33477},[36,56554,56555],{"class":49},"      i ",[36,56557,54],{"class":53},[36,56559,55225],{"class":49},[36,56561,1365],{"class":53},[36,56563,25863],{"class":60},[36,56565,14458],{"class":49},[36,56567,1214],{"class":53},[36,56569,56570],{"class":49}," arrImage.",[36,56572,56573],{"class":60},"length\n",[36,56575,56576],{"class":38,"line":33483},[36,56577,194],{"emptyLinePlaceholder":193},[36,56579,56580,56582,56584],{"class":38,"line":33489},[36,56581,55277],{"class":49},[36,56583,7157],{"class":60},[36,56585,75],{"class":49},[36,56587,56588,56590,56592],{"class":38,"line":33495},[36,56589,53159],{"class":49},[36,56591,52555],{"class":52042},[36,56593,52049],{"class":49},[36,56595,56596,56598,56600],{"class":38,"line":33515},[36,56597,52527],{"class":49},[36,56599,52542],{"class":52042},[36,56601,52049],{"class":49},[36,56603,56604],{"class":38,"line":33521},[36,56605,194],{"emptyLinePlaceholder":193},[36,56607,56608,56610,56612],{"class":38,"line":33537},[36,56609,52527],{"class":49},[36,56611,51377],{"class":52042},[36,56613,52049],{"class":49},[14,56615,56616],{},[2212,56617],{"alt":31,"src":56618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,56620,56621],{},"?.就是短路保护,确保输出正常进行",[14,56623,56624],{},"不要忘记取余%,有时候可以用",[14,56626,56627],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[851,56629,56630],{"start":46},[854,56631,56632],{},"法2",[26,56634,56636],{"className":51375,"code":56635,"language":51377,"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,56637,56638,56648,56662,56666,56674,56688,56708,56720,56728,56734,56744,56754,56758,56762,56768,56778,56782,56786,56792,56802,56814,56826,56840,56844,56848,56854,56864,56874,56884,56896,56908,56918,56922,56926,56934,56944,56956,56968,56980,56984,56988,56994,57004,57016,57028,57038,57048,57058,57070,57082,57086,57090,57098,57110,57122,57148,57160,57164,57168,57174,57184,57188,57196,57204,57208,57216,57230,57244,57264,57272,57286,57298,57306,57324,57336,57348,57360,57372,57384,57396,57408,57416,57424,57432,57440,57451,57467,57483,57499,57515,57531,57547,57563,57579,57583,57588,57606,57624,57634,57639,57644,57655,57661,57676,57685,57689,57694,57703,57708,57717,57722,57727,57732,57755,57785,57789,57797,57801,57809,57817,57821],{"__ignoreMap":31},[36,56639,56640,56642,56644,56646],{"class":38,"line":39},[36,56641,52039],{"class":49},[36,56643,52043],{"class":52042},[36,56645,52046],{"class":2713},[36,56647,52049],{"class":49},[36,56649,56650,56652,56654,56656,56658,56660],{"class":38,"line":46},[36,56651,1789],{"class":49},[36,56653,51377],{"class":52042},[36,56655,52058],{"class":2713},[36,56657,54],{"class":49},[36,56659,52063],{"class":998},[36,56661,52049],{"class":49},[36,56663,56664],{"class":38,"line":78},[36,56665,194],{"emptyLinePlaceholder":193},[36,56667,56668,56670,56672],{"class":38,"line":125},[36,56669,1789],{"class":49},[36,56671,52076],{"class":52042},[36,56673,52049],{"class":49},[36,56675,56676,56678,56680,56682,56684,56686],{"class":38,"line":131},[36,56677,52886],{"class":49},[36,56679,52086],{"class":52042},[36,56681,52089],{"class":2713},[36,56683,54],{"class":49},[36,56685,52094],{"class":998},[36,56687,52049],{"class":49},[36,56689,56690,56692,56694,56696,56698,56700,56702,56704,56706],{"class":38,"line":396},[36,56691,52886],{"class":49},[36,56693,52086],{"class":52042},[36,56695,15664],{"class":2713},[36,56697,54],{"class":49},[36,56699,52133],{"class":998},[36,56701,52113],{"class":2713},[36,56703,54],{"class":49},[36,56705,52140],{"class":998},[36,56707,52049],{"class":49},[36,56709,56710,56712,56714,56716,56718],{"class":38,"line":407},[36,56711,52886],{"class":49},[36,56713,52149],{"class":52042},[36,56715,52152],{"class":49},[36,56717,52149],{"class":52042},[36,56719,52049],{"class":49},[36,56721,56722,56724,56726],{"class":38,"line":2061},[36,56723,52886],{"class":49},[36,56725,807],{"class":52042},[36,56727,52049],{"class":49},[36,56729,56730,56732],{"class":38,"line":2067},[36,56731,7150],{"class":52042},[36,56733,16316],{"class":49},[36,56735,56736,56738,56740,56742],{"class":38,"line":2079},[36,56737,55437],{"class":60},[36,56739,52179],{"class":49},[36,56741,643],{"class":60},[36,56743,2040],{"class":49},[36,56745,56746,56748,56750,56752],{"class":38,"line":2362},[36,56747,55448],{"class":60},[36,56749,52179],{"class":49},[36,56751,643],{"class":60},[36,56753,2040],{"class":49},[36,56755,56756],{"class":38,"line":2367},[36,56757,2937],{"class":49},[36,56759,56760],{"class":38,"line":2373},[36,56761,194],{"emptyLinePlaceholder":193},[36,56763,56764,56766],{"class":38,"line":2378},[36,56765,55467],{"class":52042},[36,56767,16316],{"class":49},[36,56769,56770,56772,56774,56776],{"class":38,"line":2392},[36,56771,55474],{"class":60},[36,56773,52179],{"class":49},[36,56775,55479],{"class":60},[36,56777,2040],{"class":49},[36,56779,56780],{"class":38,"line":2397},[36,56781,2937],{"class":49},[36,56783,56784],{"class":38,"line":2403},[36,56785,194],{"emptyLinePlaceholder":193},[36,56787,56788,56790],{"class":38,"line":2424},[36,56789,55494],{"class":2713},[36,56791,16316],{"class":49},[36,56793,56794,56796,56798,56800],{"class":38,"line":2429},[36,56795,55501],{"class":60},[36,56797,52179],{"class":49},[36,56799,55506],{"class":60},[36,56801,2040],{"class":49},[36,56803,56804,56806,56808,56810,56812],{"class":38,"line":2443},[36,56805,55513],{"class":60},[36,56807,52179],{"class":49},[36,56809,55518],{"class":60},[36,56811,52234],{"class":53},[36,56813,2040],{"class":49},[36,56815,56816,56818,56820,56822,56824],{"class":38,"line":2448},[36,56817,55527],{"class":60},[36,56819,52179],{"class":49},[36,56821,2289],{"class":60},[36,56823,52234],{"class":53},[36,56825,2040],{"class":49},[36,56827,56828,56830,56832,56834,56836,56838],{"class":38,"line":2477},[36,56829,55448],{"class":60},[36,56831,52179],{"class":49},[36,56833,67],{"class":60},[36,56835,52234],{"class":53},[36,56837,52298],{"class":60},[36,56839,2040],{"class":49},[36,56841,56842],{"class":38,"line":2482},[36,56843,2937],{"class":49},[36,56845,56846],{"class":38,"line":2499},[36,56847,194],{"emptyLinePlaceholder":193},[36,56849,56850,56852],{"class":38,"line":2504},[36,56851,55562],{"class":2713},[36,56853,16316],{"class":49},[36,56855,56856,56858,56860,56862],{"class":38,"line":2509},[36,56857,55501],{"class":60},[36,56859,52179],{"class":49},[36,56861,55573],{"class":60},[36,56863,2040],{"class":49},[36,56865,56866,56868,56870,56872],{"class":38,"line":2514},[36,56867,55580],{"class":60},[36,56869,52179],{"class":49},[36,56871,643],{"class":60},[36,56873,2040],{"class":49},[36,56875,56876,56878,56880,56882],{"class":38,"line":2528},[36,56877,55591],{"class":60},[36,56879,52179],{"class":49},[36,56881,643],{"class":60},[36,56883,2040],{"class":49},[36,56885,56886,56888,56890,56892,56894],{"class":38,"line":2533},[36,56887,55513],{"class":60},[36,56889,52179],{"class":49},[36,56891,67],{"class":60},[36,56893,1214],{"class":53},[36,56895,2040],{"class":49},[36,56897,56898,56900,56902,56904,56906],{"class":38,"line":3326},[36,56899,55527],{"class":60},[36,56901,52179],{"class":49},[36,56903,1457],{"class":60},[36,56905,1214],{"class":53},[36,56907,2040],{"class":49},[36,56909,56910,56912,56914,56916],{"class":38,"line":3340},[36,56911,55626],{"class":60},[36,56913,52179],{"class":49},[36,56915,55631],{"class":60},[36,56917,2040],{"class":49},[36,56919,56920],{"class":38,"line":3348},[36,56921,2937],{"class":49},[36,56923,56924],{"class":38,"line":3353},[36,56925,194],{"emptyLinePlaceholder":193},[36,56927,56928,56930,56932],{"class":38,"line":3359},[36,56929,55562],{"class":2713},[36,56931,7572],{"class":52042},[36,56933,16316],{"class":49},[36,56935,56936,56938,56940,56942],{"class":38,"line":3365},[36,56937,55501],{"class":60},[36,56939,52179],{"class":49},[36,56941,55573],{"class":60},[36,56943,2040],{"class":49},[36,56945,56946,56948,56950,56952,56954],{"class":38,"line":3370},[36,56947,55664],{"class":60},[36,56949,52179],{"class":49},[36,56951,1780],{"class":60},[36,56953,52234],{"class":53},[36,56955,2040],{"class":49},[36,56957,56958,56960,56962,56964,56966],{"class":38,"line":8695},[36,56959,55580],{"class":60},[36,56961,52179],{"class":49},[36,56963,72],{"class":60},[36,56965,52234],{"class":53},[36,56967,2040],{"class":49},[36,56969,56970,56972,56974,56976,56978],{"class":38,"line":8719},[36,56971,55689],{"class":60},[36,56973,52179],{"class":49},[36,56975,157],{"class":60},[36,56977,52234],{"class":53},[36,56979,2040],{"class":49},[36,56981,56982],{"class":38,"line":8724},[36,56983,2937],{"class":49},[36,56985,56986],{"class":38,"line":8730},[36,56987,194],{"emptyLinePlaceholder":193},[36,56989,56990,56992],{"class":38,"line":8757},[36,56991,55710],{"class":52042},[36,56993,16316],{"class":49},[36,56995,56996,56998,57000,57002],{"class":38,"line":8762},[36,56997,55501],{"class":60},[36,56999,52179],{"class":49},[36,57001,55573],{"class":60},[36,57003,2040],{"class":49},[36,57005,57006,57008,57010,57012,57014],{"class":38,"line":8768},[36,57007,55689],{"class":60},[36,57009,52179],{"class":49},[36,57011,1661],{"class":60},[36,57013,52234],{"class":53},[36,57015,2040],{"class":49},[36,57017,57018,57020,57022,57024,57026],{"class":38,"line":8780},[36,57019,55580],{"class":60},[36,57021,52179],{"class":49},[36,57023,72],{"class":60},[36,57025,52234],{"class":53},[36,57027,2040],{"class":49},[36,57029,57030,57032,57034,57036],{"class":38,"line":8792},[36,57031,55751],{"class":60},[36,57033,52179],{"class":49},[36,57035,52219],{"class":60},[36,57037,2040],{"class":49},[36,57039,57040,57042,57044,57046],{"class":38,"line":8804},[36,57041,55762],{"class":60},[36,57043,52179],{"class":49},[36,57045,52410],{"class":60},[36,57047,2040],{"class":49},[36,57049,57050,57052,57054,57056],{"class":38,"line":10463},[36,57051,55501],{"class":60},[36,57053,52179],{"class":49},[36,57055,55573],{"class":60},[36,57057,2040],{"class":49},[36,57059,57060,57062,57064,57066,57068],{"class":38,"line":10488},[36,57061,55513],{"class":60},[36,57063,52179],{"class":49},[36,57065,4741],{"class":60},[36,57067,52234],{"class":53},[36,57069,2040],{"class":49},[36,57071,57072,57074,57076,57078,57080],{"class":38,"line":10511},[36,57073,55527],{"class":60},[36,57075,52179],{"class":49},[36,57077,72],{"class":60},[36,57079,52234],{"class":53},[36,57081,2040],{"class":49},[36,57083,57084],{"class":38,"line":10535},[36,57085,2937],{"class":49},[36,57087,57088],{"class":38,"line":10540},[36,57089,194],{"emptyLinePlaceholder":193},[36,57091,57092,57094,57096],{"class":38,"line":10545},[36,57093,55710],{"class":52042},[36,57095,55817],{"class":52042},[36,57097,16316],{"class":49},[36,57099,57100,57102,57104,57106,57108],{"class":38,"line":10550},[36,57101,55513],{"class":60},[36,57103,52179],{"class":49},[36,57105,72],{"class":60},[36,57107,52234],{"class":53},[36,57109,2040],{"class":49},[36,57111,57112,57114,57116,57118,57120],{"class":38,"line":10559},[36,57113,55527],{"class":60},[36,57115,52179],{"class":49},[36,57117,72],{"class":60},[36,57119,52234],{"class":53},[36,57121,2040],{"class":49},[36,57123,57124,57126,57128,57130,57132,57134,57136,57138,57140,57142,57144,57146],{"class":38,"line":10564},[36,57125,55626],{"class":60},[36,57127,52179],{"class":49},[36,57129,55852],{"class":60},[36,57131,901],{"class":49},[36,57133,643],{"class":60},[36,57135,154],{"class":49},[36,57137,643],{"class":60},[36,57139,154],{"class":49},[36,57141,643],{"class":60},[36,57143,154],{"class":49},[36,57145,55869],{"class":60},[36,57147,3468],{"class":49},[36,57149,57150,57152,57154,57156,57158],{"class":38,"line":10570},[36,57151,55876],{"class":60},[36,57153,52179],{"class":49},[36,57155,332],{"class":60},[36,57157,52234],{"class":53},[36,57159,2040],{"class":49},[36,57161,57162],{"class":38,"line":10591},[36,57163,2937],{"class":49},[36,57165,57166],{"class":38,"line":10597},[36,57167,194],{"emptyLinePlaceholder":193},[36,57169,57170,57172],{"class":38,"line":10611},[36,57171,55897],{"class":2713},[36,57173,16316],{"class":49},[36,57175,57176,57178,57180,57182],{"class":38,"line":10617},[36,57177,55626],{"class":60},[36,57179,52179],{"class":49},[36,57181,55908],{"class":60},[36,57183,2040],{"class":49},[36,57185,57186],{"class":38,"line":10644},[36,57187,2937],{"class":49},[36,57189,57190,57192,57194],{"class":38,"line":10653},[36,57191,53159],{"class":49},[36,57193,807],{"class":52042},[36,57195,52049],{"class":49},[36,57197,57198,57200,57202],{"class":38,"line":10659},[36,57199,52527],{"class":49},[36,57201,52076],{"class":52042},[36,57203,52049],{"class":49},[36,57205,57206],{"class":38,"line":10667},[36,57207,194],{"emptyLinePlaceholder":193},[36,57209,57210,57212,57214],{"class":38,"line":10672},[36,57211,1789],{"class":49},[36,57213,52542],{"class":52042},[36,57215,52049],{"class":49},[36,57217,57218,57220,57222,57224,57226,57228],{"class":38,"line":17348},[36,57219,52886],{"class":49},[36,57221,52353],{"class":52042},[36,57223,54228],{"class":2713},[36,57225,54],{"class":49},[36,57227,54233],{"class":998},[36,57229,52049],{"class":49},[36,57231,57232,57234,57236,57238,57240,57242],{"class":38,"line":17354},[36,57233,52083],{"class":49},[36,57235,52353],{"class":52042},[36,57237,54228],{"class":2713},[36,57239,54],{"class":49},[36,57241,55969],{"class":998},[36,57243,52049],{"class":49},[36,57245,57246,57248,57250,57252,57254,57256,57258,57260,57262],{"class":38,"line":17377},[36,57247,55976],{"class":49},[36,57249,2212],{"class":52042},[36,57251,55981],{"class":2713},[36,57253,54],{"class":49},[36,57255,55986],{"class":998},[36,57257,55989],{"class":2713},[36,57259,54],{"class":49},[36,57261,8399],{"class":998},[36,57263,52049],{"class":49},[36,57265,57266,57268,57270],{"class":38,"line":17383},[36,57267,52518],{"class":49},[36,57269,52353],{"class":52042},[36,57271,52049],{"class":49},[36,57273,57274,57276,57278,57280,57282,57284],{"class":38,"line":17406},[36,57275,52083],{"class":49},[36,57277,52353],{"class":52042},[36,57279,54228],{"class":2713},[36,57281,54],{"class":49},[36,57283,56016],{"class":998},[36,57285,52049],{"class":49},[36,57287,57288,57290,57292,57294,57296],{"class":38,"line":17420},[36,57289,55976],{"class":49},[36,57291,14],{"class":52042},[36,57293,56027],{"class":49},[36,57295,14],{"class":52042},[36,57297,52049],{"class":49},[36,57299,57300,57302,57304],{"class":38,"line":17440},[36,57301,55976],{"class":49},[36,57303,1886],{"class":52042},[36,57305,52049],{"class":49},[36,57307,57308,57310,57312,57314,57316,57318,57320,57322],{"class":38,"line":17446},[36,57309,56044],{"class":49},[36,57311,854],{"class":52042},[36,57313,54228],{"class":2713},[36,57315,54],{"class":49},[36,57317,56053],{"class":998},[36,57319,56056],{"class":49},[36,57321,854],{"class":52042},[36,57323,52049],{"class":49},[36,57325,57326,57328,57330,57332,57334],{"class":38,"line":17457},[36,57327,56044],{"class":49},[36,57329,854],{"class":52042},[36,57331,56056],{"class":49},[36,57333,854],{"class":52042},[36,57335,52049],{"class":49},[36,57337,57338,57340,57342,57344,57346],{"class":38,"line":17480},[36,57339,56044],{"class":49},[36,57341,854],{"class":52042},[36,57343,56056],{"class":49},[36,57345,854],{"class":52042},[36,57347,52049],{"class":49},[36,57349,57350,57352,57354,57356,57358],{"class":38,"line":17502},[36,57351,56044],{"class":49},[36,57353,854],{"class":52042},[36,57355,56056],{"class":49},[36,57357,854],{"class":52042},[36,57359,52049],{"class":49},[36,57361,57362,57364,57366,57368,57370],{"class":38,"line":17507},[36,57363,56044],{"class":49},[36,57365,854],{"class":52042},[36,57367,56056],{"class":49},[36,57369,854],{"class":52042},[36,57371,52049],{"class":49},[36,57373,57374,57376,57378,57380,57382],{"class":38,"line":17513},[36,57375,56044],{"class":49},[36,57377,854],{"class":52042},[36,57379,56056],{"class":49},[36,57381,854],{"class":52042},[36,57383,52049],{"class":49},[36,57385,57386,57388,57390,57392,57394],{"class":38,"line":17527},[36,57387,56044],{"class":49},[36,57389,854],{"class":52042},[36,57391,56056],{"class":49},[36,57393,854],{"class":52042},[36,57395,52049],{"class":49},[36,57397,57398,57400,57402,57404,57406],{"class":38,"line":17540},[36,57399,56044],{"class":49},[36,57401,854],{"class":52042},[36,57403,56056],{"class":49},[36,57405,854],{"class":52042},[36,57407,52049],{"class":49},[36,57409,57410,57412,57414],{"class":38,"line":17545},[36,57411,56149],{"class":49},[36,57413,1886],{"class":52042},[36,57415,52049],{"class":49},[36,57417,57418,57420,57422],{"class":38,"line":17559},[36,57419,52518],{"class":49},[36,57421,52353],{"class":52042},[36,57423,52049],{"class":49},[36,57425,57426,57428,57430],{"class":38,"line":17564},[36,57427,53159],{"class":49},[36,57429,52353],{"class":52042},[36,57431,52049],{"class":49},[36,57433,57434,57436,57438],{"class":38,"line":17570},[36,57435,52886],{"class":49},[36,57437,52555],{"class":52042},[36,57439,52049],{"class":49},[36,57441,57442,57444,57447,57449],{"class":38,"line":17575},[36,57443,11966],{"class":53},[36,57445,57446],{"class":60}," sliderData",[36,57448,14308],{"class":53},[36,57450,56189],{"class":49},[36,57452,57453,57455,57457,57459,57461,57463,57465],{"class":38,"line":17589},[36,57454,56194],{"class":49},[36,57456,56197],{"class":998},[36,57458,56200],{"class":49},[36,57460,56203],{"class":998},[36,57462,56206],{"class":49},[36,57464,56209],{"class":998},[36,57466,56212],{"class":49},[36,57468,57469,57471,57473,57475,57477,57479,57481],{"class":38,"line":17594},[36,57470,56194],{"class":49},[36,57472,56219],{"class":998},[36,57474,56200],{"class":49},[36,57476,56224],{"class":998},[36,57478,56206],{"class":49},[36,57480,56229],{"class":998},[36,57482,56212],{"class":49},[36,57484,57485,57487,57489,57491,57493,57495,57497],{"class":38,"line":17599},[36,57486,56194],{"class":49},[36,57488,56238],{"class":998},[36,57490,56200],{"class":49},[36,57492,56243],{"class":998},[36,57494,56206],{"class":49},[36,57496,56248],{"class":998},[36,57498,56212],{"class":49},[36,57500,57501,57503,57505,57507,57509,57511,57513],{"class":38,"line":17613},[36,57502,56194],{"class":49},[36,57504,56257],{"class":998},[36,57506,56200],{"class":49},[36,57508,56262],{"class":998},[36,57510,56206],{"class":49},[36,57512,56267],{"class":998},[36,57514,56212],{"class":49},[36,57516,57517,57519,57521,57523,57525,57527,57529],{"class":38,"line":17625},[36,57518,56194],{"class":49},[36,57520,56276],{"class":998},[36,57522,56200],{"class":49},[36,57524,56281],{"class":998},[36,57526,56206],{"class":49},[36,57528,56286],{"class":998},[36,57530,56212],{"class":49},[36,57532,57533,57535,57537,57539,57541,57543,57545],{"class":38,"line":17630},[36,57534,56194],{"class":49},[36,57536,56295],{"class":998},[36,57538,56200],{"class":49},[36,57540,56300],{"class":998},[36,57542,56206],{"class":49},[36,57544,56305],{"class":998},[36,57546,56212],{"class":49},[36,57548,57549,57551,57553,57555,57557,57559,57561],{"class":38,"line":17643},[36,57550,56194],{"class":49},[36,57552,56314],{"class":998},[36,57554,56200],{"class":49},[36,57556,56319],{"class":998},[36,57558,56206],{"class":49},[36,57560,56324],{"class":998},[36,57562,56212],{"class":49},[36,57564,57565,57567,57569,57571,57573,57575,57577],{"class":38,"line":17648},[36,57566,56194],{"class":49},[36,57568,56333],{"class":998},[36,57570,56200],{"class":49},[36,57572,56338],{"class":998},[36,57574,56206],{"class":49},[36,57576,56343],{"class":998},[36,57578,56346],{"class":49},[36,57580,57581],{"class":38,"line":17653},[36,57582,53851],{"class":49},[36,57584,57585],{"class":38,"line":17658},[36,57586,57587],{"class":42},"    \u002F\u002F 1.获取元素\n",[36,57589,57590,57592,57594,57596,57598,57600,57602,57604],{"class":38,"line":17671},[36,57591,11966],{"class":53},[36,57593,56357],{"class":60},[36,57595,14308],{"class":53},[36,57597,55138],{"class":49},[36,57599,55141],{"class":2713},[36,57601,901],{"class":49},[36,57603,56368],{"class":998},[36,57605,75],{"class":49},[36,57607,57608,57610,57612,57614,57616,57618,57620,57622],{"class":38,"line":17676},[36,57609,11966],{"class":53},[36,57611,7572],{"class":60},[36,57613,14308],{"class":53},[36,57615,55138],{"class":49},[36,57617,55141],{"class":2713},[36,57619,901],{"class":49},[36,57621,56387],{"class":998},[36,57623,75],{"class":49},[36,57625,57626,57628,57630,57632],{"class":38,"line":33375},[36,57627,52961],{"class":53},[36,57629,10185],{"class":49},[36,57631,54],{"class":53},[36,57633,48075],{"class":60},[36,57635,57636],{"class":38,"line":33381},[36,57637,57638],{"class":42},"    \u002F\u002F 2.开启定时器\n",[36,57640,57641],{"class":38,"line":33387},[36,57642,57643],{"class":42},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[36,57645,57646,57649,57651,57653],{"class":38,"line":33393},[36,57647,57648],{"class":2713},"    setInterval",[36,57650,901],{"class":49},[36,57652,55191],{"class":53},[36,57654,55194],{"class":49},[36,57656,57657,57659],{"class":38,"line":33399},[36,57658,55199],{"class":49},[36,57660,3451],{"class":53},[36,57662,57663,57665,57667,57669,57672,57674],{"class":38,"line":33410},[36,57664,55222],{"class":53},[36,57666,55225],{"class":49},[36,57668,2460],{"class":53},[36,57670,57671],{"class":49}," sliderData.",[36,57673,52710],{"class":60},[36,57675,13186],{"class":49},[36,57677,57678,57681,57683],{"class":38,"line":33416},[36,57679,57680],{"class":49},"        i ",[36,57682,54],{"class":53},[36,57684,48075],{"class":60},[36,57686,57687],{"class":38,"line":33436},[36,57688,53140],{"class":49},[36,57690,57691],{"class":38,"line":33442},[36,57692,57693],{"class":42},"      \u002F\u002F 更换图片路径\n",[36,57695,57696,57698,57700],{"class":38,"line":33453},[36,57697,56463],{"class":49},[36,57699,54],{"class":53},[36,57701,57702],{"class":49}," sliderData[i].url\n",[36,57704,57705],{"class":38,"line":33459},[36,57706,57707],{"class":42},"      \u002F\u002F 把文字写到p里面\n",[36,57709,57710,57712,57714],{"class":38,"line":33465},[36,57711,56473],{"class":49},[36,57713,54],{"class":53},[36,57715,57716],{"class":49}," sliderData[i].title\n",[36,57718,57719],{"class":38,"line":33471},[36,57720,57721],{"class":42},"      \u002F\u002F 小圆点\n",[36,57723,57724],{"class":38,"line":33477},[36,57725,57726],{"class":42},"      \u002F\u002F 先删除以前的active\n",[36,57728,57729],{"class":38,"line":33483},[36,57730,57731],{"class":42},"      \u002F\u002F 只让当前li添加active\n",[36,57733,57734,57736,57738,57740,57743,57746,57749,57751,57753],{"class":38,"line":33489},[36,57735,56513],{"class":49},[36,57737,55141],{"class":2713},[36,57739,901],{"class":49},[36,57741,57742],{"class":998},"'.slider-footer .activate'",[36,57744,57745],{"class":49},").classList.",[36,57747,57748],{"class":2713},"remove",[36,57750,901],{"class":49},[36,57752,56531],{"class":998},[36,57754,75],{"class":49},[36,57756,57757,57759,57761,57763,57766,57768,57770,57772,57775,57777,57779,57781,57783],{"class":38,"line":33495},[36,57758,56513],{"class":49},[36,57760,55141],{"class":2713},[36,57762,901],{"class":49},[36,57764,57765],{"class":998},"`.slider-footer ul li:nth-child(${",[36,57767,1326],{"class":49},[36,57769,46308],{"class":53},[36,57771,25863],{"class":60},[36,57773,57774],{"class":998},"})`",[36,57776,57745],{"class":49},[36,57778,6081],{"class":2713},[36,57780,901],{"class":49},[36,57782,56531],{"class":998},[36,57784,75],{"class":49},[36,57786,57787],{"class":38,"line":33515},[36,57788,194],{"emptyLinePlaceholder":193},[36,57790,57791,57793,57795],{"class":38,"line":33521},[36,57792,55277],{"class":49},[36,57794,7157],{"class":60},[36,57796,75],{"class":49},[36,57798,57799],{"class":38,"line":33537},[36,57800,194],{"emptyLinePlaceholder":193},[36,57802,57803,57805,57807],{"class":38,"line":33543},[36,57804,53159],{"class":49},[36,57806,52555],{"class":52042},[36,57808,52049],{"class":49},[36,57810,57811,57813,57815],{"class":38,"line":33557},[36,57812,52527],{"class":49},[36,57814,52542],{"class":52042},[36,57816,52049],{"class":49},[36,57818,57819],{"class":38,"line":33563},[36,57820,194],{"emptyLinePlaceholder":193},[36,57822,57823,57825,57827],{"class":38,"line":33578},[36,57824,52527],{"class":49},[36,57826,51377],{"class":52042},[36,57828,52049],{"class":49},[868,57830,57832],{"id":57831},"_317-重要知识点","3.1.7 重要知识点",[14,57834,57835,57836],{},"浏览器在渲染文本时， ",[1043,57837,57838],{},"没有空格或换行符就没有“断行点”",[14,57840,57841],{},[2212,57842],{"alt":31,"src":57843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57845,57846],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57848,57849],{},[2212,57850],{"alt":31,"src":57851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57853,57854],{},[2212,57855],{"alt":31,"src":57856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[21,57858,57860],{"id":57859},"_32-dom事件基础","3.2 DOM事件基础",[868,57862,57864],{"id":57863},"_321-事件监听","3.2.1 事件监听",[14,57866,57867],{},[2212,57868],{"alt":31,"src":57869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57871,57872],{},"事件监听有响应的发生",[14,57874,57875],{},[2212,57876],{"alt":31,"src":57877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57879,57880],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57882,57883],{},"对于有名函数,要执行的函数名后边不要加()",[868,57885,57887],{"id":57886},"_322-随机点名案例","3.2.2 随机点名案例",[26,57889,57891],{"className":51375,"code":57890,"language":51377,"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,57892,57893,57903,57917,57921,57929,57943,57963,57975,57983,57989,57999,58009,58013,58017,58024,58035,58039,58043,58049,58061,58075,58085,58097,58110,58114,58118,58125,58129,58142,58154,58166,58170,58174,58178,58185,58195,58199,58203,58212,58224,58236,58251,58255,58263,58271,58275,58283,58296,58310,58323,58343,58351,58366,58386,58406,58414,58418,58426,58431,58467,58487,58492,58511,58516,58527,58532,58543,58548,58567,58582,58587,58613,58623,58632,58637,58653,58658,58663,58668,58683,58687,58691,58696,58715,58732,58740,58745,58760,58764,58768,58776,58784,58788],{"__ignoreMap":31},[36,57894,57895,57897,57899,57901],{"class":38,"line":39},[36,57896,52039],{"class":49},[36,57898,52043],{"class":52042},[36,57900,52046],{"class":2713},[36,57902,52049],{"class":49},[36,57904,57905,57907,57909,57911,57913,57915],{"class":38,"line":46},[36,57906,1789],{"class":49},[36,57908,51377],{"class":52042},[36,57910,52058],{"class":2713},[36,57912,54],{"class":49},[36,57914,52063],{"class":998},[36,57916,52049],{"class":49},[36,57918,57919],{"class":38,"line":78},[36,57920,194],{"emptyLinePlaceholder":193},[36,57922,57923,57925,57927],{"class":38,"line":125},[36,57924,1789],{"class":49},[36,57926,52076],{"class":52042},[36,57928,52049],{"class":49},[36,57930,57931,57933,57935,57937,57939,57941],{"class":38,"line":131},[36,57932,52886],{"class":49},[36,57934,52086],{"class":52042},[36,57936,52089],{"class":2713},[36,57938,54],{"class":49},[36,57940,52094],{"class":998},[36,57942,52049],{"class":49},[36,57944,57945,57947,57949,57951,57953,57955,57957,57959,57961],{"class":38,"line":396},[36,57946,52886],{"class":49},[36,57948,52086],{"class":52042},[36,57950,15664],{"class":2713},[36,57952,54],{"class":49},[36,57954,52133],{"class":998},[36,57956,52113],{"class":2713},[36,57958,54],{"class":49},[36,57960,52140],{"class":998},[36,57962,52049],{"class":49},[36,57964,57965,57967,57969,57971,57973],{"class":38,"line":407},[36,57966,52886],{"class":49},[36,57968,52149],{"class":52042},[36,57970,52152],{"class":49},[36,57972,52149],{"class":52042},[36,57974,52049],{"class":49},[36,57976,57977,57979,57981],{"class":38,"line":2061},[36,57978,52886],{"class":49},[36,57980,807],{"class":52042},[36,57982,52049],{"class":49},[36,57984,57985,57987],{"class":38,"line":2067},[36,57986,7150],{"class":52042},[36,57988,16316],{"class":49},[36,57990,57991,57993,57995,57997],{"class":38,"line":2079},[36,57992,55448],{"class":60},[36,57994,52179],{"class":49},[36,57996,643],{"class":60},[36,57998,2040],{"class":49},[36,58000,58001,58003,58005,58007],{"class":38,"line":2362},[36,58002,55437],{"class":60},[36,58004,52179],{"class":49},[36,58006,643],{"class":60},[36,58008,2040],{"class":49},[36,58010,58011],{"class":38,"line":2367},[36,58012,2937],{"class":49},[36,58014,58015],{"class":38,"line":2373},[36,58016,194],{"emptyLinePlaceholder":193},[36,58018,58019,58022],{"class":38,"line":2378},[36,58020,58021],{"class":52042},"    h2",[36,58023,16316],{"class":49},[36,58025,58026,58029,58031,58033],{"class":38,"line":2392},[36,58027,58028],{"class":60},"      text-align",[36,58030,52179],{"class":49},[36,58032,52334],{"class":60},[36,58034,2040],{"class":49},[36,58036,58037],{"class":38,"line":2397},[36,58038,2937],{"class":49},[36,58040,58041],{"class":38,"line":2403},[36,58042,194],{"emptyLinePlaceholder":193},[36,58044,58045,58047],{"class":38,"line":2424},[36,58046,55494],{"class":2713},[36,58048,16316],{"class":49},[36,58050,58051,58053,58055,58057,58059],{"class":38,"line":2429},[36,58052,55513],{"class":60},[36,58054,52179],{"class":49},[36,58056,2289],{"class":60},[36,58058,52234],{"class":53},[36,58060,2040],{"class":49},[36,58062,58063,58065,58067,58069,58071,58073],{"class":38,"line":2443},[36,58064,55448],{"class":60},[36,58066,52179],{"class":49},[36,58068,1538],{"class":60},[36,58070,52234],{"class":53},[36,58072,52298],{"class":60},[36,58074,2040],{"class":49},[36,58076,58077,58079,58081,58083],{"class":38,"line":2448},[36,58078,55751],{"class":60},[36,58080,52179],{"class":49},[36,58082,52219],{"class":60},[36,58084,2040],{"class":49},[36,58086,58087,58089,58091,58093,58095],{"class":38,"line":2477},[36,58088,55664],{"class":60},[36,58090,52179],{"class":49},[36,58092,1705],{"class":60},[36,58094,52234],{"class":53},[36,58096,2040],{"class":49},[36,58098,58099,58102,58104,58106,58108],{"class":38,"line":2482},[36,58100,58101],{"class":60},"      line-height",[36,58103,52179],{"class":49},[36,58105,1286],{"class":60},[36,58107,52234],{"class":53},[36,58109,2040],{"class":49},[36,58111,58112],{"class":38,"line":2499},[36,58113,2937],{"class":49},[36,58115,58116],{"class":38,"line":2504},[36,58117,194],{"emptyLinePlaceholder":193},[36,58119,58120,58123],{"class":38,"line":2509},[36,58121,58122],{"class":2713},"    .qs",[36,58124,16316],{"class":49},[36,58126,58127],{"class":38,"line":2514},[36,58128,194],{"emptyLinePlaceholder":193},[36,58130,58131,58133,58135,58138,58140],{"class":38,"line":2528},[36,58132,55513],{"class":60},[36,58134,52179],{"class":49},[36,58136,58137],{"class":60},"450",[36,58139,52234],{"class":53},[36,58141,2040],{"class":49},[36,58143,58144,58146,58148,58150,58152],{"class":38,"line":2533},[36,58145,55527],{"class":60},[36,58147,52179],{"class":49},[36,58149,1286],{"class":60},[36,58151,52234],{"class":53},[36,58153,2040],{"class":49},[36,58155,58156,58159,58161,58164],{"class":38,"line":3326},[36,58157,58158],{"class":60},"      color",[36,58160,52179],{"class":49},[36,58162,58163],{"class":60},"red",[36,58165,2040],{"class":49},[36,58167,58168],{"class":38,"line":3340},[36,58169,194],{"emptyLinePlaceholder":193},[36,58171,58172],{"class":38,"line":3348},[36,58173,2937],{"class":49},[36,58175,58176],{"class":38,"line":3353},[36,58177,194],{"emptyLinePlaceholder":193},[36,58179,58180,58183],{"class":38,"line":3359},[36,58181,58182],{"class":2713},"    .btns",[36,58184,16316],{"class":49},[36,58186,58187,58189,58191,58193],{"class":38,"line":3365},[36,58188,58028],{"class":60},[36,58190,52179],{"class":49},[36,58192,52334],{"class":60},[36,58194,2040],{"class":49},[36,58196,58197],{"class":38,"line":3370},[36,58198,2937],{"class":49},[36,58200,58201],{"class":38,"line":8695},[36,58202,194],{"emptyLinePlaceholder":193},[36,58204,58205,58207,58210],{"class":38,"line":8719},[36,58206,58182],{"class":2713},[36,58208,58209],{"class":52042}," button",[36,58211,16316],{"class":49},[36,58213,58214,58216,58218,58220,58222],{"class":38,"line":8724},[36,58215,55513],{"class":60},[36,58217,52179],{"class":49},[36,58219,1697],{"class":60},[36,58221,52234],{"class":53},[36,58223,2040],{"class":49},[36,58225,58226,58228,58230,58232,58234],{"class":38,"line":8730},[36,58227,55527],{"class":60},[36,58229,52179],{"class":49},[36,58231,1162],{"class":60},[36,58233,52234],{"class":53},[36,58235,2040],{"class":49},[36,58237,58238,58240,58242,58244,58247,58249],{"class":38,"line":8757},[36,58239,55448],{"class":60},[36,58241,52179],{"class":49},[36,58243,643],{"class":60},[36,58245,58246],{"class":60}," 50",[36,58248,52234],{"class":53},[36,58250,2040],{"class":49},[36,58252,58253],{"class":38,"line":8762},[36,58254,2937],{"class":49},[36,58256,58257,58259,58261],{"class":38,"line":8768},[36,58258,53159],{"class":49},[36,58260,807],{"class":52042},[36,58262,52049],{"class":49},[36,58264,58265,58267,58269],{"class":38,"line":8780},[36,58266,52527],{"class":49},[36,58268,52076],{"class":52042},[36,58270,52049],{"class":49},[36,58272,58273],{"class":38,"line":8792},[36,58274,194],{"emptyLinePlaceholder":193},[36,58276,58277,58279,58281],{"class":38,"line":8804},[36,58278,1789],{"class":49},[36,58280,52542],{"class":52042},[36,58282,52049],{"class":49},[36,58284,58285,58287,58289,58292,58294],{"class":38,"line":10463},[36,58286,52886],{"class":49},[36,58288,21],{"class":52042},[36,58290,58291],{"class":49},">随机点名\u003C\u002F",[36,58293,21],{"class":52042},[36,58295,52049],{"class":49},[36,58297,58298,58300,58302,58304,58306,58308],{"class":38,"line":10488},[36,58299,52886],{"class":49},[36,58301,52353],{"class":52042},[36,58303,54228],{"class":2713},[36,58305,54],{"class":49},[36,58307,54233],{"class":998},[36,58309,52049],{"class":49},[36,58311,58312,58314,58316,58319,58321],{"class":38,"line":10511},[36,58313,52083],{"class":49},[36,58315,36],{"class":52042},[36,58317,58318],{"class":49},">名字是：\u003C\u002F",[36,58320,36],{"class":52042},[36,58322,52049],{"class":49},[36,58324,58325,58327,58329,58331,58333,58336,58339,58341],{"class":38,"line":10535},[36,58326,52083],{"class":49},[36,58328,52353],{"class":52042},[36,58330,54228],{"class":2713},[36,58332,54],{"class":49},[36,58334,58335],{"class":998},"\"qs\"",[36,58337,58338],{"class":49},">这里显示姓名\u003C\u002F",[36,58340,52353],{"class":52042},[36,58342,52049],{"class":49},[36,58344,58345,58347,58349],{"class":38,"line":10540},[36,58346,53159],{"class":49},[36,58348,52353],{"class":52042},[36,58350,52049],{"class":49},[36,58352,58353,58355,58357,58359,58361,58364],{"class":38,"line":10545},[36,58354,52886],{"class":49},[36,58356,52353],{"class":52042},[36,58358,54228],{"class":2713},[36,58360,54],{"class":49},[36,58362,58363],{"class":998},"\"btns\"",[36,58365,52049],{"class":49},[36,58367,58368,58370,58372,58374,58376,58379,58382,58384],{"class":38,"line":10550},[36,58369,52083],{"class":49},[36,58371,54629],{"class":52042},[36,58373,54228],{"class":2713},[36,58375,54],{"class":49},[36,58377,58378],{"class":998},"\"start\"",[36,58380,58381],{"class":49},">开始\u003C\u002F",[36,58383,54629],{"class":52042},[36,58385,52049],{"class":49},[36,58387,58388,58390,58392,58394,58396,58399,58402,58404],{"class":38,"line":10559},[36,58389,52083],{"class":49},[36,58391,54629],{"class":52042},[36,58393,54228],{"class":2713},[36,58395,54],{"class":49},[36,58397,58398],{"class":998},"\"end\"",[36,58400,58401],{"class":49},">结束\u003C\u002F",[36,58403,54629],{"class":52042},[36,58405,52049],{"class":49},[36,58407,58408,58410,58412],{"class":38,"line":10564},[36,58409,53159],{"class":49},[36,58411,52353],{"class":52042},[36,58413,52049],{"class":49},[36,58415,58416],{"class":38,"line":10570},[36,58417,194],{"emptyLinePlaceholder":193},[36,58419,58420,58422,58424],{"class":38,"line":10591},[36,58421,52886],{"class":49},[36,58423,52555],{"class":52042},[36,58425,52049],{"class":49},[36,58427,58428],{"class":38,"line":10597},[36,58429,58430],{"class":42},"    \u002F\u002F 数据数组\n",[36,58432,58433,58435,58438,58440,58442,58445,58447,58450,58452,58455,58457,58460,58462,58465],{"class":38,"line":10611},[36,58434,11966],{"class":53},[36,58436,58437],{"class":60}," arr",[36,58439,14308],{"class":53},[36,58441,52968],{"class":49},[36,58443,58444],{"class":998},"'马超'",[36,58446,154],{"class":49},[36,58448,58449],{"class":998},"'黄忠'",[36,58451,154],{"class":49},[36,58453,58454],{"class":998},"'赵云'",[36,58456,154],{"class":49},[36,58458,58459],{"class":998},"'关羽'",[36,58461,154],{"class":49},[36,58463,58464],{"class":998},"'张飞'",[36,58466,33988],{"class":49},[36,58468,58469,58471,58474,58476,58478,58480,58482,58485],{"class":38,"line":10617},[36,58470,11966],{"class":53},[36,58472,58473],{"class":60}," qs",[36,58475,14308],{"class":53},[36,58477,55138],{"class":49},[36,58479,55141],{"class":2713},[36,58481,901],{"class":49},[36,58483,58484],{"class":998},"'.qs'",[36,58486,75],{"class":49},[36,58488,58489],{"class":38,"line":10644},[36,58490,58491],{"class":42},"    \u002F\u002F 1.业务1.开始按钮模块\n",[36,58493,58494,58496,58498,58500,58502,58504,58506,58509],{"class":38,"line":10653},[36,58495,11966],{"class":53},[36,58497,4933],{"class":60},[36,58499,14308],{"class":53},[36,58501,55138],{"class":49},[36,58503,55141],{"class":2713},[36,58505,901],{"class":49},[36,58507,58508],{"class":998},"'.start'",[36,58510,75],{"class":49},[36,58512,58513],{"class":38,"line":10659},[36,58514,58515],{"class":42},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[36,58517,58518,58520,58523,58525],{"class":38,"line":10667},[36,58519,52961],{"class":53},[36,58521,58522],{"class":49}," timerId ",[36,58524,54],{"class":53},[36,58526,48075],{"class":60},[36,58528,58529],{"class":38,"line":10672},[36,58530,58531],{"class":42},"    \u002F\u002F 随机号要全局变量\n",[36,58533,58534,58536,58539,58541],{"class":38,"line":17348},[36,58535,52961],{"class":53},[36,58537,58538],{"class":49}," random ",[36,58540,54],{"class":53},[36,58542,48075],{"class":60},[36,58544,58545],{"class":38,"line":17354},[36,58546,58547],{"class":42},"    \u002F\u002F 1.1 添加点击事件\n",[36,58549,58550,58553,58556,58558,58561,58563,58565],{"class":38,"line":17377},[36,58551,58552],{"class":49},"    start.",[36,58554,58555],{"class":2713},"addEventListener",[36,58557,901],{"class":49},[36,58559,58560],{"class":998},"'click'",[36,58562,154],{"class":49},[36,58564,55191],{"class":53},[36,58566,55194],{"class":49},[36,58568,58569,58572,58574,58576,58578,58580],{"class":38,"line":17383},[36,58570,58571],{"class":49},"      timerId ",[36,58573,54],{"class":53},[36,58575,55186],{"class":2713},[36,58577,901],{"class":49},[36,58579,55191],{"class":53},[36,58581,55194],{"class":49},[36,58583,58584],{"class":38,"line":17406},[36,58585,58586],{"class":42},"        \u002F\u002F 随机数\n",[36,58588,58589,58592,58594,58597,58600,58603,58605,58607,58609,58611],{"class":38,"line":17420},[36,58590,58591],{"class":49},"        random ",[36,58593,54],{"class":53},[36,58595,58596],{"class":2713}," parseInt",[36,58598,58599],{"class":49},"(Math.",[36,58601,58602],{"class":2713},"random",[36,58604,13794],{"class":49},[36,58606,1339],{"class":53},[36,58608,52707],{"class":49},[36,58610,52710],{"class":60},[36,58612,75],{"class":49},[36,58614,58615,58618,58620],{"class":38,"line":17440},[36,58616,58617],{"class":49},"        qs.innerHTML ",[36,58619,54],{"class":53},[36,58621,58622],{"class":49}," arr[random]\n",[36,58624,58625,58628,58630],{"class":38,"line":17446},[36,58626,58627],{"class":49},"      }, ",[36,58629,1162],{"class":60},[36,58631,75],{"class":49},[36,58633,58634],{"class":38,"line":17457},[36,58635,58636],{"class":42},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[36,58638,58639,58641,58644,58646,58649,58651],{"class":38,"line":17480},[36,58640,55222],{"class":53},[36,58642,58643],{"class":49}," (arr.",[36,58645,52710],{"class":60},[36,58647,58648],{"class":53}," ===",[36,58650,25863],{"class":60},[36,58652,13186],{"class":49},[36,58654,58655],{"class":38,"line":17502},[36,58656,58657],{"class":42},"        \u002F\u002F start.disabled = true\n",[36,58659,58660],{"class":38,"line":17507},[36,58661,58662],{"class":42},"        \u002F\u002F end.disabled = true\n",[36,58664,58665],{"class":38,"line":17513},[36,58666,58667],{"class":42},"        \u002F\u002F 可以合起来写\n",[36,58669,58670,58673,58675,58678,58680],{"class":38,"line":17527},[36,58671,58672],{"class":49},"        start.disabled ",[36,58674,54],{"class":53},[36,58676,58677],{"class":49}," end.disabled ",[36,58679,54],{"class":53},[36,58681,58682],{"class":60}," true\n",[36,58684,58685],{"class":38,"line":17540},[36,58686,53140],{"class":49},[36,58688,58689],{"class":38,"line":17545},[36,58690,34203],{"class":49},[36,58692,58693],{"class":38,"line":17559},[36,58694,58695],{"class":42},"    \u002F\u002F 1.2 关闭按钮模块\n",[36,58697,58698,58700,58702,58704,58706,58708,58710,58713],{"class":38,"line":17564},[36,58699,11966],{"class":53},[36,58701,4949],{"class":60},[36,58703,14308],{"class":53},[36,58705,55138],{"class":49},[36,58707,55141],{"class":2713},[36,58709,901],{"class":49},[36,58711,58712],{"class":998},"'.end'",[36,58714,75],{"class":49},[36,58716,58717,58720,58722,58724,58726,58728,58730],{"class":38,"line":17570},[36,58718,58719],{"class":49},"    end.",[36,58721,58555],{"class":2713},[36,58723,901],{"class":49},[36,58725,58560],{"class":998},[36,58727,154],{"class":49},[36,58729,55191],{"class":53},[36,58731,55194],{"class":49},[36,58733,58734,58737],{"class":38,"line":17575},[36,58735,58736],{"class":2713},"      clearInterval",[36,58738,58739],{"class":49},"(timerId)\n",[36,58741,58742],{"class":38,"line":17589},[36,58743,58744],{"class":42},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[36,58746,58747,58750,58753,58756,58758],{"class":38,"line":17594},[36,58748,58749],{"class":49},"      arr.",[36,58751,58752],{"class":2713},"splice",[36,58754,58755],{"class":49},"(random, ",[36,58757,61],{"class":60},[36,58759,75],{"class":49},[36,58761,58762],{"class":38,"line":17599},[36,58763,34203],{"class":49},[36,58765,58766],{"class":38,"line":17613},[36,58767,194],{"emptyLinePlaceholder":193},[36,58769,58770,58772,58774],{"class":38,"line":17625},[36,58771,53159],{"class":49},[36,58773,52555],{"class":52042},[36,58775,52049],{"class":49},[36,58777,58778,58780,58782],{"class":38,"line":17630},[36,58779,52527],{"class":49},[36,58781,52542],{"class":52042},[36,58783,52049],{"class":49},[36,58785,58786],{"class":38,"line":17643},[36,58787,194],{"emptyLinePlaceholder":193},[36,58789,58790,58792,58794],{"class":38,"line":17648},[36,58791,52527],{"class":49},[36,58793,51377],{"class":52042},[36,58795,52049],{"class":49},[14,58797,58798],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[868,58800,58802],{"id":58801},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[26,58804,58806],{"className":51375,"code":58805,"language":51377,"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,58807,58808,58818,58832,58836,58844,58858,58878,58890,58898,58902,58910,58922,58930,58949,58966,58982,58992,58996,59004,59012,59016],{"__ignoreMap":31},[36,58809,58810,58812,58814,58816],{"class":38,"line":39},[36,58811,52039],{"class":49},[36,58813,52043],{"class":52042},[36,58815,52046],{"class":2713},[36,58817,52049],{"class":49},[36,58819,58820,58822,58824,58826,58828,58830],{"class":38,"line":46},[36,58821,1789],{"class":49},[36,58823,51377],{"class":52042},[36,58825,52058],{"class":2713},[36,58827,54],{"class":49},[36,58829,52063],{"class":998},[36,58831,52049],{"class":49},[36,58833,58834],{"class":38,"line":78},[36,58835,194],{"emptyLinePlaceholder":193},[36,58837,58838,58840,58842],{"class":38,"line":125},[36,58839,1789],{"class":49},[36,58841,52076],{"class":52042},[36,58843,52049],{"class":49},[36,58845,58846,58848,58850,58852,58854,58856],{"class":38,"line":131},[36,58847,52886],{"class":49},[36,58849,52086],{"class":52042},[36,58851,52089],{"class":2713},[36,58853,54],{"class":49},[36,58855,52094],{"class":998},[36,58857,52049],{"class":49},[36,58859,58860,58862,58864,58866,58868,58870,58872,58874,58876],{"class":38,"line":396},[36,58861,52886],{"class":49},[36,58863,52086],{"class":52042},[36,58865,15664],{"class":2713},[36,58867,54],{"class":49},[36,58869,52133],{"class":998},[36,58871,52113],{"class":2713},[36,58873,54],{"class":49},[36,58875,52140],{"class":998},[36,58877,52049],{"class":49},[36,58879,58880,58882,58884,58886,58888],{"class":38,"line":407},[36,58881,52886],{"class":49},[36,58883,52149],{"class":52042},[36,58885,52152],{"class":49},[36,58887,52149],{"class":52042},[36,58889,52049],{"class":49},[36,58891,58892,58894,58896],{"class":38,"line":2061},[36,58893,52527],{"class":49},[36,58895,52076],{"class":52042},[36,58897,52049],{"class":49},[36,58899,58900],{"class":38,"line":2067},[36,58901,194],{"emptyLinePlaceholder":193},[36,58903,58904,58906,58908],{"class":38,"line":2079},[36,58905,1789],{"class":49},[36,58907,52542],{"class":52042},[36,58909,52049],{"class":49},[36,58911,58912,58914,58916,58918,58920],{"class":38,"line":2362},[36,58913,52886],{"class":49},[36,58915,54629],{"class":52042},[36,58917,54635],{"class":49},[36,58919,54629],{"class":52042},[36,58921,52049],{"class":49},[36,58923,58924,58926,58928],{"class":38,"line":2367},[36,58925,52886],{"class":49},[36,58927,52555],{"class":52042},[36,58929,52049],{"class":49},[36,58931,58932,58934,58936,58938,58940,58942,58944,58947],{"class":38,"line":2373},[36,58933,11966],{"class":53},[36,58935,55133],{"class":60},[36,58937,14308],{"class":53},[36,58939,55138],{"class":49},[36,58941,55141],{"class":2713},[36,58943,901],{"class":49},[36,58945,58946],{"class":998},"'button'",[36,58948,75],{"class":49},[36,58950,58951,58954,58956,58958,58960,58962,58964],{"class":38,"line":2378},[36,58952,58953],{"class":49},"    btn.",[36,58955,58555],{"class":2713},[36,58957,901],{"class":49},[36,58959,58560],{"class":998},[36,58961,154],{"class":49},[36,58963,55191],{"class":53},[36,58965,55194],{"class":49},[36,58967,58968,58971,58973,58975,58978,58980],{"class":38,"line":2392},[36,58969,58970],{"class":53},"      const",[36,58972,2990],{"class":60},[36,58974,14308],{"class":53},[36,58976,58977],{"class":49}," Math.",[36,58979,58602],{"class":2713},[36,58981,2726],{"class":49},[36,58983,58984,58987,58990],{"class":38,"line":2397},[36,58985,58986],{"class":49},"      console.",[36,58988,58989],{"class":2713},"log",[36,58991,913],{"class":49},[36,58993,58994],{"class":38,"line":2403},[36,58995,34203],{"class":49},[36,58997,58998,59000,59002],{"class":38,"line":2424},[36,58999,53159],{"class":49},[36,59001,52555],{"class":52042},[36,59003,52049],{"class":49},[36,59005,59006,59008,59010],{"class":38,"line":2429},[36,59007,52527],{"class":49},[36,59009,52542],{"class":52042},[36,59011,52049],{"class":49},[36,59013,59014],{"class":38,"line":2443},[36,59015,194],{"emptyLinePlaceholder":193},[36,59017,59018,59020,59022],{"class":38,"line":2448},[36,59019,52527],{"class":49},[36,59021,51377],{"class":52042},[36,59023,52049],{"class":49},[14,59025,59026],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,59028,59029],{},"常量不可以重新赋值",[14,59031,59032],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[26,59034,59036],{"className":51375,"code":59035,"language":51377,"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,59037,59038,59048,59062,59066,59074,59088,59108,59120,59128,59132,59140,59152,59160,59171,59189,59205,59219,59227,59231,59239,59247,59251],{"__ignoreMap":31},[36,59039,59040,59042,59044,59046],{"class":38,"line":39},[36,59041,52039],{"class":49},[36,59043,52043],{"class":52042},[36,59045,52046],{"class":2713},[36,59047,52049],{"class":49},[36,59049,59050,59052,59054,59056,59058,59060],{"class":38,"line":46},[36,59051,1789],{"class":49},[36,59053,51377],{"class":52042},[36,59055,52058],{"class":2713},[36,59057,54],{"class":49},[36,59059,52063],{"class":998},[36,59061,52049],{"class":49},[36,59063,59064],{"class":38,"line":78},[36,59065,194],{"emptyLinePlaceholder":193},[36,59067,59068,59070,59072],{"class":38,"line":125},[36,59069,1789],{"class":49},[36,59071,52076],{"class":52042},[36,59073,52049],{"class":49},[36,59075,59076,59078,59080,59082,59084,59086],{"class":38,"line":131},[36,59077,52886],{"class":49},[36,59079,52086],{"class":52042},[36,59081,52089],{"class":2713},[36,59083,54],{"class":49},[36,59085,52094],{"class":998},[36,59087,52049],{"class":49},[36,59089,59090,59092,59094,59096,59098,59100,59102,59104,59106],{"class":38,"line":396},[36,59091,52886],{"class":49},[36,59093,52086],{"class":52042},[36,59095,15664],{"class":2713},[36,59097,54],{"class":49},[36,59099,52133],{"class":998},[36,59101,52113],{"class":2713},[36,59103,54],{"class":49},[36,59105,52140],{"class":998},[36,59107,52049],{"class":49},[36,59109,59110,59112,59114,59116,59118],{"class":38,"line":407},[36,59111,52886],{"class":49},[36,59113,52149],{"class":52042},[36,59115,52152],{"class":49},[36,59117,52149],{"class":52042},[36,59119,52049],{"class":49},[36,59121,59122,59124,59126],{"class":38,"line":2061},[36,59123,52527],{"class":49},[36,59125,52076],{"class":52042},[36,59127,52049],{"class":49},[36,59129,59130],{"class":38,"line":2067},[36,59131,194],{"emptyLinePlaceholder":193},[36,59133,59134,59136,59138],{"class":38,"line":2079},[36,59135,1789],{"class":49},[36,59137,52542],{"class":52042},[36,59139,52049],{"class":49},[36,59141,59142,59144,59146,59148,59150],{"class":38,"line":2362},[36,59143,52886],{"class":49},[36,59145,54629],{"class":52042},[36,59147,54635],{"class":49},[36,59149,54629],{"class":52042},[36,59151,52049],{"class":49},[36,59153,59154,59156,59158],{"class":38,"line":2367},[36,59155,52886],{"class":49},[36,59157,52555],{"class":52042},[36,59159,52049],{"class":49},[36,59161,59162,59164,59166,59168],{"class":38,"line":2373},[36,59163,11966],{"class":53},[36,59165,2990],{"class":60},[36,59167,14308],{"class":53},[36,59169,59170],{"class":60}," 10\n",[36,59172,59173,59175,59177,59179,59181,59183,59185,59187],{"class":38,"line":2378},[36,59174,11966],{"class":53},[36,59176,55133],{"class":60},[36,59178,14308],{"class":53},[36,59180,55138],{"class":49},[36,59182,55141],{"class":2713},[36,59184,901],{"class":49},[36,59186,58946],{"class":998},[36,59188,75],{"class":49},[36,59190,59191,59193,59195,59197,59199,59201,59203],{"class":38,"line":2392},[36,59192,58953],{"class":49},[36,59194,58555],{"class":2713},[36,59196,901],{"class":49},[36,59198,58560],{"class":998},[36,59200,154],{"class":49},[36,59202,55191],{"class":53},[36,59204,55194],{"class":49},[36,59206,59207,59209,59211,59213,59215,59217],{"class":38,"line":2397},[36,59208,58970],{"class":53},[36,59210,2990],{"class":60},[36,59212,14308],{"class":53},[36,59214,58977],{"class":49},[36,59216,58602],{"class":2713},[36,59218,2726],{"class":49},[36,59220,59221,59223,59225],{"class":38,"line":2403},[36,59222,58986],{"class":49},[36,59224,58989],{"class":2713},[36,59226,913],{"class":49},[36,59228,59229],{"class":38,"line":2424},[36,59230,34203],{"class":49},[36,59232,59233,59235,59237],{"class":38,"line":2429},[36,59234,53159],{"class":49},[36,59236,52555],{"class":52042},[36,59238,52049],{"class":49},[36,59240,59241,59243,59245],{"class":38,"line":2443},[36,59242,52527],{"class":49},[36,59244,52542],{"class":52042},[36,59246,52049],{"class":49},[36,59248,59249],{"class":38,"line":2448},[36,59250,194],{"emptyLinePlaceholder":193},[36,59252,59253,59255,59257],{"class":38,"line":2477},[36,59254,52527],{"class":49},[36,59256,51377],{"class":52042},[36,59258,52049],{"class":49},[14,59260,59261],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[26,59263,59265],{"className":51375,"code":59264,"language":51377,"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,59266,59267,59277,59291,59295,59303,59317,59337,59349,59357,59361,59369,59381,59389,59399,59417,59433,59446,59454,59458,59466,59474,59478],{"__ignoreMap":31},[36,59268,59269,59271,59273,59275],{"class":38,"line":39},[36,59270,52039],{"class":49},[36,59272,52043],{"class":52042},[36,59274,52046],{"class":2713},[36,59276,52049],{"class":49},[36,59278,59279,59281,59283,59285,59287,59289],{"class":38,"line":46},[36,59280,1789],{"class":49},[36,59282,51377],{"class":52042},[36,59284,52058],{"class":2713},[36,59286,54],{"class":49},[36,59288,52063],{"class":998},[36,59290,52049],{"class":49},[36,59292,59293],{"class":38,"line":78},[36,59294,194],{"emptyLinePlaceholder":193},[36,59296,59297,59299,59301],{"class":38,"line":125},[36,59298,1789],{"class":49},[36,59300,52076],{"class":52042},[36,59302,52049],{"class":49},[36,59304,59305,59307,59309,59311,59313,59315],{"class":38,"line":131},[36,59306,52886],{"class":49},[36,59308,52086],{"class":52042},[36,59310,52089],{"class":2713},[36,59312,54],{"class":49},[36,59314,52094],{"class":998},[36,59316,52049],{"class":49},[36,59318,59319,59321,59323,59325,59327,59329,59331,59333,59335],{"class":38,"line":396},[36,59320,52886],{"class":49},[36,59322,52086],{"class":52042},[36,59324,15664],{"class":2713},[36,59326,54],{"class":49},[36,59328,52133],{"class":998},[36,59330,52113],{"class":2713},[36,59332,54],{"class":49},[36,59334,52140],{"class":998},[36,59336,52049],{"class":49},[36,59338,59339,59341,59343,59345,59347],{"class":38,"line":407},[36,59340,52886],{"class":49},[36,59342,52149],{"class":52042},[36,59344,52152],{"class":49},[36,59346,52149],{"class":52042},[36,59348,52049],{"class":49},[36,59350,59351,59353,59355],{"class":38,"line":2061},[36,59352,52527],{"class":49},[36,59354,52076],{"class":52042},[36,59356,52049],{"class":49},[36,59358,59359],{"class":38,"line":2067},[36,59360,194],{"emptyLinePlaceholder":193},[36,59362,59363,59365,59367],{"class":38,"line":2079},[36,59364,1789],{"class":49},[36,59366,52542],{"class":52042},[36,59368,52049],{"class":49},[36,59370,59371,59373,59375,59377,59379],{"class":38,"line":2362},[36,59372,52886],{"class":49},[36,59374,54629],{"class":52042},[36,59376,54635],{"class":49},[36,59378,54629],{"class":52042},[36,59380,52049],{"class":49},[36,59382,59383,59385,59387],{"class":38,"line":2367},[36,59384,52886],{"class":49},[36,59386,52555],{"class":52042},[36,59388,52049],{"class":49},[36,59390,59391,59393,59395,59397],{"class":38,"line":2373},[36,59392,11966],{"class":53},[36,59394,2990],{"class":60},[36,59396,14308],{"class":53},[36,59398,59170],{"class":60},[36,59400,59401,59403,59405,59407,59409,59411,59413,59415],{"class":38,"line":2378},[36,59402,11966],{"class":53},[36,59404,55133],{"class":60},[36,59406,14308],{"class":53},[36,59408,55138],{"class":49},[36,59410,55141],{"class":2713},[36,59412,901],{"class":49},[36,59414,58946],{"class":998},[36,59416,75],{"class":49},[36,59418,59419,59421,59423,59425,59427,59429,59431],{"class":38,"line":2392},[36,59420,58953],{"class":49},[36,59422,58555],{"class":2713},[36,59424,901],{"class":49},[36,59426,58560],{"class":998},[36,59428,154],{"class":49},[36,59430,55191],{"class":53},[36,59432,55194],{"class":49},[36,59434,59435,59438,59440,59442,59444],{"class":38,"line":2397},[36,59436,59437],{"class":49},"      num ",[36,59439,54],{"class":53},[36,59441,58977],{"class":49},[36,59443,58602],{"class":2713},[36,59445,2726],{"class":49},[36,59447,59448,59450,59452],{"class":38,"line":2403},[36,59449,58986],{"class":49},[36,59451,58989],{"class":2713},[36,59453,913],{"class":49},[36,59455,59456],{"class":38,"line":2424},[36,59457,34203],{"class":49},[36,59459,59460,59462,59464],{"class":38,"line":2429},[36,59461,53159],{"class":49},[36,59463,52555],{"class":52042},[36,59465,52049],{"class":49},[36,59467,59468,59470,59472],{"class":38,"line":2443},[36,59469,52527],{"class":49},[36,59471,52542],{"class":52042},[36,59473,52049],{"class":49},[36,59475,59476],{"class":38,"line":2448},[36,59477,194],{"emptyLinePlaceholder":193},[36,59479,59480,59482,59484],{"class":38,"line":2477},[36,59481,52527],{"class":49},[36,59483,51377],{"class":52042},[36,59485,52049],{"class":49},[14,59487,59488],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[868,59490,59492],{"id":59491},"_324-事件监听版本","3.2.4 事件监听版本",[14,59494,59495],{},[2212,59496],{"alt":31,"src":59497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,59499,59500],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,59502,59503],{},"这种方式会覆盖前边的事件监听:",[26,59505,59507],{"className":51375,"code":59506,"language":51377,"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,59508,59509,59519,59533,59537,59545,59559,59579,59591,59599,59603,59611,59623,59631,59649,59663,59674,59678,59690,59700,59704,59712,59720,59724],{"__ignoreMap":31},[36,59510,59511,59513,59515,59517],{"class":38,"line":39},[36,59512,52039],{"class":49},[36,59514,52043],{"class":52042},[36,59516,52046],{"class":2713},[36,59518,52049],{"class":49},[36,59520,59521,59523,59525,59527,59529,59531],{"class":38,"line":46},[36,59522,1789],{"class":49},[36,59524,51377],{"class":52042},[36,59526,52058],{"class":2713},[36,59528,54],{"class":49},[36,59530,52063],{"class":998},[36,59532,52049],{"class":49},[36,59534,59535],{"class":38,"line":78},[36,59536,194],{"emptyLinePlaceholder":193},[36,59538,59539,59541,59543],{"class":38,"line":125},[36,59540,1789],{"class":49},[36,59542,52076],{"class":52042},[36,59544,52049],{"class":49},[36,59546,59547,59549,59551,59553,59555,59557],{"class":38,"line":131},[36,59548,52886],{"class":49},[36,59550,52086],{"class":52042},[36,59552,52089],{"class":2713},[36,59554,54],{"class":49},[36,59556,52094],{"class":998},[36,59558,52049],{"class":49},[36,59560,59561,59563,59565,59567,59569,59571,59573,59575,59577],{"class":38,"line":396},[36,59562,52886],{"class":49},[36,59564,52086],{"class":52042},[36,59566,15664],{"class":2713},[36,59568,54],{"class":49},[36,59570,52133],{"class":998},[36,59572,52113],{"class":2713},[36,59574,54],{"class":49},[36,59576,52140],{"class":998},[36,59578,52049],{"class":49},[36,59580,59581,59583,59585,59587,59589],{"class":38,"line":407},[36,59582,52886],{"class":49},[36,59584,52149],{"class":52042},[36,59586,52152],{"class":49},[36,59588,52149],{"class":52042},[36,59590,52049],{"class":49},[36,59592,59593,59595,59597],{"class":38,"line":2061},[36,59594,52527],{"class":49},[36,59596,52076],{"class":52042},[36,59598,52049],{"class":49},[36,59600,59601],{"class":38,"line":2067},[36,59602,194],{"emptyLinePlaceholder":193},[36,59604,59605,59607,59609],{"class":38,"line":2079},[36,59606,1789],{"class":49},[36,59608,52542],{"class":52042},[36,59610,52049],{"class":49},[36,59612,59613,59615,59617,59619,59621],{"class":38,"line":2362},[36,59614,52886],{"class":49},[36,59616,54629],{"class":52042},[36,59618,54635],{"class":49},[36,59620,54629],{"class":52042},[36,59622,52049],{"class":49},[36,59624,59625,59627,59629],{"class":38,"line":2367},[36,59626,52886],{"class":49},[36,59628,52555],{"class":52042},[36,59630,52049],{"class":49},[36,59632,59633,59635,59637,59639,59641,59643,59645,59647],{"class":38,"line":2373},[36,59634,11966],{"class":53},[36,59636,55133],{"class":60},[36,59638,14308],{"class":53},[36,59640,55138],{"class":49},[36,59642,55141],{"class":2713},[36,59644,901],{"class":49},[36,59646,58946],{"class":998},[36,59648,75],{"class":49},[36,59650,59651,59653,59656,59658,59661],{"class":38,"line":2378},[36,59652,58953],{"class":49},[36,59654,59655],{"class":2713},"onclick",[36,59657,14308],{"class":53},[36,59659,59660],{"class":53}," function",[36,59662,55194],{"class":49},[36,59664,59665,59668,59670,59672],{"class":38,"line":2392},[36,59666,59667],{"class":2713},"      alert",[36,59669,901],{"class":49},[36,59671,1356],{"class":60},[36,59673,75],{"class":49},[36,59675,59676],{"class":38,"line":2397},[36,59677,2937],{"class":49},[36,59679,59680,59682,59684,59686,59688],{"class":38,"line":2403},[36,59681,58953],{"class":49},[36,59683,59655],{"class":2713},[36,59685,14308],{"class":53},[36,59687,59660],{"class":53},[36,59689,55194],{"class":49},[36,59691,59692,59694,59696,59698],{"class":38,"line":2424},[36,59693,59667],{"class":2713},[36,59695,901],{"class":49},[36,59697,1631],{"class":60},[36,59699,75],{"class":49},[36,59701,59702],{"class":38,"line":2429},[36,59703,2937],{"class":49},[36,59705,59706,59708,59710],{"class":38,"line":2443},[36,59707,53159],{"class":49},[36,59709,52555],{"class":52042},[36,59711,52049],{"class":49},[36,59713,59714,59716,59718],{"class":38,"line":2448},[36,59715,52527],{"class":49},[36,59717,52542],{"class":52042},[36,59719,52049],{"class":49},[36,59721,59722],{"class":38,"line":2477},[36,59723,194],{"emptyLinePlaceholder":193},[36,59725,59726,59728,59730],{"class":38,"line":2482},[36,59727,52527],{"class":49},[36,59729,51377],{"class":52042},[36,59731,52049],{"class":49},[14,59733,59734],{},"只要点击就输出结果为22,前边11被覆盖了",[26,59736,59738],{"className":51375,"code":59737,"language":51377,"meta":31,"style":31},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[33,59739,59740,59745,59750,59754,59759,59764],{"__ignoreMap":31},[36,59741,59742],{"class":38,"line":39},[36,59743,59744],{"class":49},"  btn.addEventListener('click', function () {\n",[36,59746,59747],{"class":38,"line":46},[36,59748,59749],{"class":49},"      alert(11)\n",[36,59751,59752],{"class":38,"line":78},[36,59753,34203],{"class":49},[36,59755,59756],{"class":38,"line":125},[36,59757,59758],{"class":49},"    btn.addEventListener('click', function () {\n",[36,59760,59761],{"class":38,"line":131},[36,59762,59763],{"class":49},"      alert(22)\n",[36,59765,59766],{"class":38,"line":396},[36,59767,34203],{"class":49},[14,59769,59770],{},"点击第一次输出11,第二次点击为22",[868,59772,59774],{"id":59773},"_325-事件类型","3.2.5 事件类型",[14,59776,59777],{},[2212,59778],{"alt":31,"src":59779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22742,59781,59783],{"id":59782},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59785,59786],{},"补充知识:",[14,59788,59789],{},"轮播图自动播放模块,可以使用",[14,59791,59792],{},"let timerId = setInterval(function () {",[14,59794,59795],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59797,59798],{},"用js方法模拟进行点击事件,click必须加()",[14,59800,59801],{},"next.click()",[14,59803,59804],{},"}, 1000)",[14,59806,59807],{},[2212,59808],{"alt":31,"src":59809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[26,59811,59813],{"className":53809,"code":59812,"language":53811,"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,59814,59815,59819,59829,59843,59847,59855,59870,59890,59910,59923,59931,59936,59941,59945,59949,59954,59959,59964,59969,59973,59977,59982,59987,59992,59996,60000,60005,60009,60014,60019,60023,60027,60032,60037,60042,60047,60052,60056,60060,60065,60070,60075,60080,60085,60089,60093,60098,60103,60108,60113,60118,60123,60128,60133,60138,60143,60147,60151,60156,60161,60165,60169,60174,60179,60183,60188,60193,60197,60201,60206,60210,60215,60220,60224,60229,60233,60237,60242,60247,60252,60257,60262,60267,60272,60276,60280,60284,60289,60294,60299,60304,60308,60316,60324,60328,60336,60351,60365,60386,60394,60408,60421,60436,60455,60467,60479,60491,60503,60515,60527,60539,60547,60562,60586,60610,60618,60626,60634,60642,60647,60652,60657,60662,60667,60672,60677,60682,60687,60692,60696,60701,60706,60711,60716,60721,60726,60731,60736,60741,60745,60750,60755,60760,60765,60770,60775,60780,60785,60790,60795,60800,60805,60809,60813,60818,60823,60828,60832,60837,60842,60847,60852,60857,60861,60866,60870,60874,60878,60882,60886,60890,60895,60900,60905,60910,60915,60920,60925,60930,60935,60939,60943,60948,60953,60958,60963,60968,60972,60977,60982,60987,60992,60997,61002,61006,61010,61015,61019,61024,61028,61033,61038,61043,61048,61053,61058,61062,61070,61078,61082],{"__ignoreMap":31},[36,59816,59817],{"class":38,"line":39},[36,59818,194],{"emptyLinePlaceholder":193},[36,59820,59821,59823,59825,59827],{"class":38,"line":46},[36,59822,52039],{"class":49},[36,59824,52043],{"class":53},[36,59826,52046],{"class":60},[36,59828,52049],{"class":49},[36,59830,59831,59833,59835,59837,59839,59841],{"class":38,"line":78},[36,59832,1789],{"class":49},[36,59834,51377],{"class":52042},[36,59836,52058],{"class":2713},[36,59838,54],{"class":49},[36,59840,52063],{"class":998},[36,59842,52049],{"class":49},[36,59844,59845],{"class":38,"line":125},[36,59846,194],{"emptyLinePlaceholder":193},[36,59848,59849,59851,59853],{"class":38,"line":131},[36,59850,1789],{"class":49},[36,59852,52076],{"class":52042},[36,59854,52049],{"class":49},[36,59856,59857,59859,59861,59863,59865,59867],{"class":38,"line":396},[36,59858,52886],{"class":49},[36,59860,52086],{"class":52042},[36,59862,52089],{"class":2713},[36,59864,54],{"class":49},[36,59866,52094],{"class":998},[36,59868,59869],{"class":49}," \u002F>\n",[36,59871,59872,59874,59876,59878,59880,59882,59884,59886,59888],{"class":38,"line":407},[36,59873,52886],{"class":49},[36,59875,52086],{"class":52042},[36,59877,52105],{"class":2713},[36,59879,54],{"class":49},[36,59881,52110],{"class":998},[36,59883,52113],{"class":2713},[36,59885,54],{"class":49},[36,59887,52118],{"class":998},[36,59889,59869],{"class":49},[36,59891,59892,59894,59896,59898,59900,59902,59904,59906,59908],{"class":38,"line":2061},[36,59893,52886],{"class":49},[36,59895,52086],{"class":52042},[36,59897,15664],{"class":2713},[36,59899,54],{"class":49},[36,59901,52133],{"class":998},[36,59903,52113],{"class":2713},[36,59905,54],{"class":49},[36,59907,52140],{"class":998},[36,59909,59869],{"class":49},[36,59911,59912,59914,59916,59919,59921],{"class":38,"line":2067},[36,59913,52886],{"class":49},[36,59915,52149],{"class":52042},[36,59917,59918],{"class":49},">轮播图点击切换\u003C\u002F",[36,59920,52149],{"class":52042},[36,59922,52049],{"class":49},[36,59924,59925,59927,59929],{"class":38,"line":2079},[36,59926,52886],{"class":49},[36,59928,807],{"class":52042},[36,59930,52049],{"class":49},[36,59932,59933],{"class":38,"line":2362},[36,59934,59935],{"class":49},"    * {\n",[36,59937,59938],{"class":38,"line":2367},[36,59939,59940],{"class":49},"      box-sizing: border-box;\n",[36,59942,59943],{"class":38,"line":2373},[36,59944,2937],{"class":49},[36,59946,59947],{"class":38,"line":2378},[36,59948,194],{"emptyLinePlaceholder":193},[36,59950,59951],{"class":38,"line":2392},[36,59952,59953],{"class":49},"    .slider {\n",[36,59955,59956],{"class":38,"line":2397},[36,59957,59958],{"class":49},"      width: 560px;\n",[36,59960,59961],{"class":38,"line":2403},[36,59962,59963],{"class":49},"      height: 400px;\n",[36,59965,59966],{"class":38,"line":2424},[36,59967,59968],{"class":49},"      overflow: hidden;\n",[36,59970,59971],{"class":38,"line":2429},[36,59972,2937],{"class":49},[36,59974,59975],{"class":38,"line":2443},[36,59976,194],{"emptyLinePlaceholder":193},[36,59978,59979],{"class":38,"line":2448},[36,59980,59981],{"class":49},"    .slider-wrapper {\n",[36,59983,59984],{"class":38,"line":2477},[36,59985,59986],{"class":49},"      width: 100%;\n",[36,59988,59989],{"class":38,"line":2482},[36,59990,59991],{"class":49},"      height: 320px;\n",[36,59993,59994],{"class":38,"line":2499},[36,59995,2937],{"class":49},[36,59997,59998],{"class":38,"line":2504},[36,59999,194],{"emptyLinePlaceholder":193},[36,60001,60002],{"class":38,"line":2509},[36,60003,60004],{"class":49},"    .slider-wrapper img {\n",[36,60006,60007],{"class":38,"line":2514},[36,60008,59986],{"class":49},[36,60010,60011],{"class":38,"line":2528},[36,60012,60013],{"class":49},"      height: 100%;\n",[36,60015,60016],{"class":38,"line":2533},[36,60017,60018],{"class":49},"      display: block;\n",[36,60020,60021],{"class":38,"line":3326},[36,60022,2937],{"class":49},[36,60024,60025],{"class":38,"line":3340},[36,60026,194],{"emptyLinePlaceholder":193},[36,60028,60029],{"class":38,"line":3348},[36,60030,60031],{"class":49},"    .slider-footer {\n",[36,60033,60034],{"class":38,"line":3353},[36,60035,60036],{"class":49},"      height: 80px;\n",[36,60038,60039],{"class":38,"line":3359},[36,60040,60041],{"class":49},"      background-color: rgb(100, 67, 68);\n",[36,60043,60044],{"class":38,"line":3365},[36,60045,60046],{"class":49},"      padding: 12px 12px 0 12px;\n",[36,60048,60049],{"class":38,"line":3370},[36,60050,60051],{"class":49},"      position: relative;\n",[36,60053,60054],{"class":38,"line":8695},[36,60055,2937],{"class":49},[36,60057,60058],{"class":38,"line":8719},[36,60059,194],{"emptyLinePlaceholder":193},[36,60061,60062],{"class":38,"line":8724},[36,60063,60064],{"class":49},"    .slider-footer .toggle {\n",[36,60066,60067],{"class":38,"line":8730},[36,60068,60069],{"class":49},"      position: absolute;\n",[36,60071,60072],{"class":38,"line":8757},[36,60073,60074],{"class":49},"      right: 0;\n",[36,60076,60077],{"class":38,"line":8762},[36,60078,60079],{"class":49},"      top: 12px;\n",[36,60081,60082],{"class":38,"line":8768},[36,60083,60084],{"class":49},"      display: flex;\n",[36,60086,60087],{"class":38,"line":8780},[36,60088,2937],{"class":49},[36,60090,60091],{"class":38,"line":8792},[36,60092,194],{"emptyLinePlaceholder":193},[36,60094,60095],{"class":38,"line":8804},[36,60096,60097],{"class":49},"    .slider-footer .toggle button {\n",[36,60099,60100],{"class":38,"line":10463},[36,60101,60102],{"class":49},"      margin-right: 12px;\n",[36,60104,60105],{"class":38,"line":10488},[36,60106,60107],{"class":49},"      width: 28px;\n",[36,60109,60110],{"class":38,"line":10511},[36,60111,60112],{"class":49},"      height: 28px;\n",[36,60114,60115],{"class":38,"line":10535},[36,60116,60117],{"class":49},"      appearance: none;\n",[36,60119,60120],{"class":38,"line":10540},[36,60121,60122],{"class":49},"      border: none;\n",[36,60124,60125],{"class":38,"line":10545},[36,60126,60127],{"class":49},"      background: rgba(255, 255, 255, 0.1);\n",[36,60129,60130],{"class":38,"line":10550},[36,60131,60132],{"class":49},"      color: #fff;\n",[36,60134,60135],{"class":38,"line":10559},[36,60136,60137],{"class":49},"      border-radius: 4px;\n",[36,60139,60140],{"class":38,"line":10564},[36,60141,60142],{"class":49},"      cursor: pointer;\n",[36,60144,60145],{"class":38,"line":10570},[36,60146,2937],{"class":49},[36,60148,60149],{"class":38,"line":10591},[36,60150,194],{"emptyLinePlaceholder":193},[36,60152,60153],{"class":38,"line":10597},[36,60154,60155],{"class":49},"    .slider-footer .toggle button:hover {\n",[36,60157,60158],{"class":38,"line":10611},[36,60159,60160],{"class":49},"      background: rgba(255, 255, 255, 0.2);\n",[36,60162,60163],{"class":38,"line":10617},[36,60164,2937],{"class":49},[36,60166,60167],{"class":38,"line":10644},[36,60168,194],{"emptyLinePlaceholder":193},[36,60170,60171],{"class":38,"line":10653},[36,60172,60173],{"class":49},"    .slider-footer p {\n",[36,60175,60176],{"class":38,"line":10659},[36,60177,60178],{"class":49},"      margin: 0;\n",[36,60180,60181],{"class":38,"line":10667},[36,60182,60132],{"class":49},[36,60184,60185],{"class":38,"line":10672},[36,60186,60187],{"class":49},"      font-size: 18px;\n",[36,60189,60190],{"class":38,"line":17348},[36,60191,60192],{"class":49},"      margin-bottom: 10px;\n",[36,60194,60195],{"class":38,"line":17354},[36,60196,2937],{"class":49},[36,60198,60199],{"class":38,"line":17377},[36,60200,194],{"emptyLinePlaceholder":193},[36,60202,60203],{"class":38,"line":17383},[36,60204,60205],{"class":49},"    .slider-indicator {\n",[36,60207,60208],{"class":38,"line":17406},[36,60209,60178],{"class":49},[36,60211,60212],{"class":38,"line":17420},[36,60213,60214],{"class":49},"      padding: 0;\n",[36,60216,60217],{"class":38,"line":17440},[36,60218,60219],{"class":49},"      list-style: none;\n",[36,60221,60222],{"class":38,"line":17446},[36,60223,60084],{"class":49},[36,60225,60226],{"class":38,"line":17457},[36,60227,60228],{"class":49},"      align-items: center;\n",[36,60230,60231],{"class":38,"line":17480},[36,60232,2937],{"class":49},[36,60234,60235],{"class":38,"line":17502},[36,60236,194],{"emptyLinePlaceholder":193},[36,60238,60239],{"class":38,"line":17507},[36,60240,60241],{"class":49},"    .slider-indicator li {\n",[36,60243,60244],{"class":38,"line":17513},[36,60245,60246],{"class":49},"      width: 8px;\n",[36,60248,60249],{"class":38,"line":17527},[36,60250,60251],{"class":49},"      height: 8px;\n",[36,60253,60254],{"class":38,"line":17540},[36,60255,60256],{"class":49},"      margin: 4px;\n",[36,60258,60259],{"class":38,"line":17545},[36,60260,60261],{"class":49},"      border-radius: 50%;\n",[36,60263,60264],{"class":38,"line":17559},[36,60265,60266],{"class":49},"      background: #fff;\n",[36,60268,60269],{"class":38,"line":17564},[36,60270,60271],{"class":49},"      opacity: 0.4;\n",[36,60273,60274],{"class":38,"line":17570},[36,60275,60142],{"class":49},[36,60277,60278],{"class":38,"line":17575},[36,60279,2937],{"class":49},[36,60281,60282],{"class":38,"line":17589},[36,60283,194],{"emptyLinePlaceholder":193},[36,60285,60286],{"class":38,"line":17594},[36,60287,60288],{"class":49},"    .slider-indicator li.active {\n",[36,60290,60291],{"class":38,"line":17599},[36,60292,60293],{"class":49},"      width: 12px;\n",[36,60295,60296],{"class":38,"line":17613},[36,60297,60298],{"class":49},"      height: 12px;\n",[36,60300,60301],{"class":38,"line":17625},[36,60302,60303],{"class":49},"      opacity: 1;\n",[36,60305,60306],{"class":38,"line":17630},[36,60307,2937],{"class":49},[36,60309,60310,60312,60314],{"class":38,"line":17643},[36,60311,53159],{"class":49},[36,60313,807],{"class":52042},[36,60315,52049],{"class":49},[36,60317,60318,60320,60322],{"class":38,"line":17648},[36,60319,52527],{"class":49},[36,60321,52076],{"class":52042},[36,60323,52049],{"class":49},[36,60325,60326],{"class":38,"line":17653},[36,60327,194],{"emptyLinePlaceholder":193},[36,60329,60330,60332,60334],{"class":38,"line":17658},[36,60331,1789],{"class":49},[36,60333,52542],{"class":52042},[36,60335,52049],{"class":49},[36,60337,60338,60340,60342,60344,60346,60349],{"class":38,"line":17671},[36,60339,52886],{"class":49},[36,60341,52353],{"class":52042},[36,60343,54228],{"class":2713},[36,60345,54],{"class":49},[36,60347,60348],{"class":998},"\"slider\"",[36,60350,52049],{"class":49},[36,60352,60353,60355,60357,60359,60361,60363],{"class":38,"line":17676},[36,60354,52083],{"class":49},[36,60356,52353],{"class":52042},[36,60358,54228],{"class":2713},[36,60360,54],{"class":49},[36,60362,55969],{"class":998},[36,60364,52049],{"class":49},[36,60366,60367,60369,60371,60373,60375,60378,60380,60382,60384],{"class":38,"line":33375},[36,60368,55976],{"class":49},[36,60370,2212],{"class":52042},[36,60372,55981],{"class":2713},[36,60374,54],{"class":49},[36,60376,60377],{"class":998},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[36,60379,55989],{"class":2713},[36,60381,54],{"class":49},[36,60383,8399],{"class":998},[36,60385,59869],{"class":49},[36,60387,60388,60390,60392],{"class":38,"line":33381},[36,60389,52518],{"class":49},[36,60391,52353],{"class":52042},[36,60393,52049],{"class":49},[36,60395,60396,60398,60400,60402,60404,60406],{"class":38,"line":33387},[36,60397,52083],{"class":49},[36,60399,52353],{"class":52042},[36,60401,54228],{"class":2713},[36,60403,54],{"class":49},[36,60405,56016],{"class":998},[36,60407,52049],{"class":49},[36,60409,60410,60412,60414,60417,60419],{"class":38,"line":33393},[36,60411,55976],{"class":49},[36,60413,14],{"class":52042},[36,60415,60416],{"class":49},">对人类来说会不会太超前了？\u003C\u002F",[36,60418,14],{"class":52042},[36,60420,52049],{"class":49},[36,60422,60423,60425,60427,60429,60431,60434],{"class":38,"line":33399},[36,60424,55976],{"class":49},[36,60426,1886],{"class":52042},[36,60428,54228],{"class":2713},[36,60430,54],{"class":49},[36,60432,60433],{"class":998},"\"slider-indicator\"",[36,60435,52049],{"class":49},[36,60437,60438,60440,60442,60444,60446,60449,60451,60453],{"class":38,"line":33410},[36,60439,56044],{"class":49},[36,60441,854],{"class":52042},[36,60443,54228],{"class":2713},[36,60445,54],{"class":49},[36,60447,60448],{"class":998},"\"active\"",[36,60450,56056],{"class":49},[36,60452,854],{"class":52042},[36,60454,52049],{"class":49},[36,60456,60457,60459,60461,60463,60465],{"class":38,"line":33416},[36,60458,56044],{"class":49},[36,60460,854],{"class":52042},[36,60462,56056],{"class":49},[36,60464,854],{"class":52042},[36,60466,52049],{"class":49},[36,60468,60469,60471,60473,60475,60477],{"class":38,"line":33436},[36,60470,56044],{"class":49},[36,60472,854],{"class":52042},[36,60474,56056],{"class":49},[36,60476,854],{"class":52042},[36,60478,52049],{"class":49},[36,60480,60481,60483,60485,60487,60489],{"class":38,"line":33442},[36,60482,56044],{"class":49},[36,60484,854],{"class":52042},[36,60486,56056],{"class":49},[36,60488,854],{"class":52042},[36,60490,52049],{"class":49},[36,60492,60493,60495,60497,60499,60501],{"class":38,"line":33453},[36,60494,56044],{"class":49},[36,60496,854],{"class":52042},[36,60498,56056],{"class":49},[36,60500,854],{"class":52042},[36,60502,52049],{"class":49},[36,60504,60505,60507,60509,60511,60513],{"class":38,"line":33459},[36,60506,56044],{"class":49},[36,60508,854],{"class":52042},[36,60510,56056],{"class":49},[36,60512,854],{"class":52042},[36,60514,52049],{"class":49},[36,60516,60517,60519,60521,60523,60525],{"class":38,"line":33465},[36,60518,56044],{"class":49},[36,60520,854],{"class":52042},[36,60522,56056],{"class":49},[36,60524,854],{"class":52042},[36,60526,52049],{"class":49},[36,60528,60529,60531,60533,60535,60537],{"class":38,"line":33471},[36,60530,56044],{"class":49},[36,60532,854],{"class":52042},[36,60534,56056],{"class":49},[36,60536,854],{"class":52042},[36,60538,52049],{"class":49},[36,60540,60541,60543,60545],{"class":38,"line":33477},[36,60542,56149],{"class":49},[36,60544,1886],{"class":52042},[36,60546,52049],{"class":49},[36,60548,60549,60551,60553,60555,60557,60560],{"class":38,"line":33483},[36,60550,55976],{"class":49},[36,60552,52353],{"class":52042},[36,60554,54228],{"class":2713},[36,60556,54],{"class":49},[36,60558,60559],{"class":998},"\"toggle\"",[36,60561,52049],{"class":49},[36,60563,60564,60566,60568,60570,60572,60575,60577,60580,60582,60584],{"class":38,"line":33489},[36,60565,56044],{"class":49},[36,60567,54629],{"class":52042},[36,60569,54228],{"class":2713},[36,60571,54],{"class":49},[36,60573,60574],{"class":998},"\"prev\"",[36,60576,1839],{"class":49},[36,60578,60579],{"class":60},"&lt;",[36,60581,52527],{"class":49},[36,60583,54629],{"class":52042},[36,60585,52049],{"class":49},[36,60587,60588,60590,60592,60594,60596,60599,60601,60604,60606,60608],{"class":38,"line":33495},[36,60589,56044],{"class":49},[36,60591,54629],{"class":52042},[36,60593,54228],{"class":2713},[36,60595,54],{"class":49},[36,60597,60598],{"class":998},"\"next\"",[36,60600,1839],{"class":49},[36,60602,60603],{"class":60},"&gt;",[36,60605,52527],{"class":49},[36,60607,54629],{"class":52042},[36,60609,52049],{"class":49},[36,60611,60612,60614,60616],{"class":38,"line":33515},[36,60613,56149],{"class":49},[36,60615,52353],{"class":52042},[36,60617,52049],{"class":49},[36,60619,60620,60622,60624],{"class":38,"line":33521},[36,60621,52518],{"class":49},[36,60623,52353],{"class":52042},[36,60625,52049],{"class":49},[36,60627,60628,60630,60632],{"class":38,"line":33537},[36,60629,53159],{"class":49},[36,60631,52353],{"class":52042},[36,60633,52049],{"class":49},[36,60635,60636,60638,60640],{"class":38,"line":33543},[36,60637,52886],{"class":49},[36,60639,52555],{"class":52042},[36,60641,52049],{"class":49},[36,60643,60644],{"class":38,"line":33557},[36,60645,60646],{"class":49},"    \u002F\u002F 1. 初始数据\n",[36,60648,60649],{"class":38,"line":33563},[36,60650,60651],{"class":49},"    const data = [\n",[36,60653,60654],{"class":38,"line":33578},[36,60655,60656],{"class":49},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[36,60658,60659],{"class":38,"line":33584},[36,60660,60661],{"class":49},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[36,60663,60664],{"class":38,"line":33593},[36,60665,60666],{"class":49},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[36,60668,60669],{"class":38,"line":33599},[36,60670,60671],{"class":49},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[36,60673,60674],{"class":38,"line":33608},[36,60675,60676],{"class":49},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[36,60678,60679],{"class":38,"line":33614},[36,60680,60681],{"class":49},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[36,60683,60684],{"class":38,"line":33620},[36,60685,60686],{"class":49},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[36,60688,60689],{"class":38,"line":33629},[36,60690,60691],{"class":49},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[36,60693,60694],{"class":38,"line":33635},[36,60695,53851],{"class":49},[36,60697,60698],{"class":38,"line":33646},[36,60699,60700],{"class":49},"    \u002F\u002F 获取元素\n",[36,60702,60703],{"class":38,"line":33652},[36,60704,60705],{"class":49},"    const img = document.querySelector('.slider-wrapper img')\n",[36,60707,60708],{"class":38,"line":33671},[36,60709,60710],{"class":49},"    const p = document.querySelector('.slider-footer p')\n",[36,60712,60713],{"class":38,"line":33677},[36,60714,60715],{"class":49},"    const footer = document.querySelector('.slider-footer')\n",[36,60717,60718],{"class":38,"line":33688},[36,60719,60720],{"class":49},"    \u002F\u002F 1. 右按钮业务\n",[36,60722,60723],{"class":38,"line":33694},[36,60724,60725],{"class":49},"    \u002F\u002F 1.1 获取右侧按钮 \n",[36,60727,60728],{"class":38,"line":33714},[36,60729,60730],{"class":49},"    const next = document.querySelector('.next')\n",[36,60732,60733],{"class":38,"line":33730},[36,60734,60735],{"class":49},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[36,60737,60738],{"class":38,"line":33736},[36,60739,60740],{"class":49},"    \u002F\u002F 1.2 注册点击事件\n",[36,60742,60743],{"class":38,"line":33750},[36,60744,194],{"emptyLinePlaceholder":193},[36,60746,60747],{"class":38,"line":33756},[36,60748,60749],{"class":49},"    next.addEventListener('click', function () {\n",[36,60751,60752],{"class":38,"line":33762},[36,60753,60754],{"class":49},"      \u002F\u002F console.log(11)\n",[36,60756,60757],{"class":38,"line":33773},[36,60758,60759],{"class":49},"      i++\n",[36,60761,60762],{"class":38,"line":33779},[36,60763,60764],{"class":49},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[36,60766,60767],{"class":38,"line":33785},[36,60768,60769],{"class":49},"      \u002F\u002F if (i >= 8) {\n",[36,60771,60772],{"class":38,"line":33795},[36,60773,60774],{"class":49},"      \u002F\u002F   i = 0\n",[36,60776,60777],{"class":38,"line":33801},[36,60778,60779],{"class":49},"      \u002F\u002F }\n",[36,60781,60782],{"class":38,"line":33812},[36,60783,60784],{"class":49},"      i = i >= data.length ? 0 : i\n",[36,60786,60787],{"class":38,"line":33818},[36,60788,60789],{"class":49},"      \u002F\u002F 1.3 得到对应的对象\n",[36,60791,60792],{"class":38,"line":33828},[36,60793,60794],{"class":49},"      \u002F\u002F console.log(data[i])\n",[36,60796,60797],{"class":38,"line":33833},[36,60798,60799],{"class":49},"      \u002F\u002F 调用函数\n",[36,60801,60802],{"class":38,"line":33839},[36,60803,60804],{"class":49},"      toggle()\n",[36,60806,60807],{"class":38,"line":33888},[36,60808,34203],{"class":49},[36,60810,60811],{"class":38,"line":33935},[36,60812,194],{"emptyLinePlaceholder":193},[36,60814,60815],{"class":38,"line":33940},[36,60816,60817],{"class":49},"    \u002F\u002F 2. 左侧按钮业务\n",[36,60819,60820],{"class":38,"line":33946},[36,60821,60822],{"class":49},"    \u002F\u002F 2.1 获取左侧按钮 \n",[36,60824,60825],{"class":38,"line":33965},[36,60826,60827],{"class":49},"    const prev = document.querySelector('.prev')\n",[36,60829,60830],{"class":38,"line":33971},[36,60831,60740],{"class":49},[36,60833,60834],{"class":38,"line":33991},[36,60835,60836],{"class":49},"    prev.addEventListener('click', function () {\n",[36,60838,60839],{"class":38,"line":33997},[36,60840,60841],{"class":49},"      i--\n",[36,60843,60844],{"class":38,"line":34003},[36,60845,60846],{"class":49},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[36,60848,60849],{"class":38,"line":34013},[36,60850,60851],{"class":49},"      \u002F\u002F if (i \u003C 0) {\n",[36,60853,60854],{"class":38,"line":34018},[36,60855,60856],{"class":49},"      \u002F\u002F   i = 7\n",[36,60858,60859],{"class":38,"line":34024},[36,60860,60779],{"class":49},[36,60862,60863],{"class":38,"line":34040},[36,60864,60865],{"class":49},"      i = i \u003C 0 ? data.length - 1 : i\n",[36,60867,60868],{"class":38,"line":34085},[36,60869,60789],{"class":49},[36,60871,60872],{"class":38,"line":34091},[36,60873,60794],{"class":49},[36,60875,60876],{"class":38,"line":34097},[36,60877,60799],{"class":49},[36,60879,60880],{"class":38,"line":34103},[36,60881,60804],{"class":49},[36,60883,60884],{"class":38,"line":34114},[36,60885,34203],{"class":49},[36,60887,60888],{"class":38,"line":34120},[36,60889,194],{"emptyLinePlaceholder":193},[36,60891,60892],{"class":38,"line":34126},[36,60893,60894],{"class":49},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[36,60896,60897],{"class":38,"line":34132},[36,60898,60899],{"class":49},"    function toggle() {\n",[36,60901,60902],{"class":38,"line":34150},[36,60903,60904],{"class":49},"      \u002F\u002F 1.4 渲染对应的数据\n",[36,60906,60907],{"class":38,"line":34164},[36,60908,60909],{"class":49},"      img.src = data[i].url\n",[36,60911,60912],{"class":38,"line":34173},[36,60913,60914],{"class":49},"      p.innerHTML = data[i].title\n",[36,60916,60917],{"class":38,"line":34182},[36,60918,60919],{"class":49},"      footer.style.backgroundColor = data[i].color\n",[36,60921,60922],{"class":38,"line":34191},[36,60923,60924],{"class":49},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[36,60926,60927],{"class":38,"line":34200},[36,60928,60929],{"class":49},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[36,60931,60932],{"class":38,"line":34206},[36,60933,60934],{"class":49},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[36,60936,60937],{"class":38,"line":34212},[36,60938,2937],{"class":49},[36,60940,60941],{"class":38,"line":34220},[36,60942,194],{"emptyLinePlaceholder":193},[36,60944,60945],{"class":38,"line":34225},[36,60946,60947],{"class":49},"    \u002F\u002F 3. 自动播放模块\n",[36,60949,60950],{"class":38,"line":34231},[36,60951,60952],{"class":49},"    let timerId = setInterval(function () {\n",[36,60954,60955],{"class":38,"line":34242},[36,60956,60957],{"class":49},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[36,60959,60960],{"class":38,"line":34248},[36,60961,60962],{"class":49},"      next.click()\n",[36,60964,60965],{"class":38,"line":34268},[36,60966,60967],{"class":49},"    }, 1000)\n",[36,60969,60970],{"class":38,"line":34274},[36,60971,194],{"emptyLinePlaceholder":193},[36,60973,60974],{"class":38,"line":34280},[36,60975,60976],{"class":49},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[36,60978,60979],{"class":38,"line":34286},[36,60980,60981],{"class":49},"    const slider = document.querySelector('.slider')\n",[36,60983,60984],{"class":38,"line":34303},[36,60985,60986],{"class":49},"    \u002F\u002F 注册事件\n",[36,60988,60989],{"class":38,"line":34309},[36,60990,60991],{"class":49},"    slider.addEventListener('mouseenter', function () {\n",[36,60993,60994],{"class":38,"line":34315},[36,60995,60996],{"class":49},"      \u002F\u002F 停止定时器\n",[36,60998,60999],{"class":38,"line":34321},[36,61000,61001],{"class":49},"      clearInterval(timerId)\n",[36,61003,61004],{"class":38,"line":34327},[36,61005,34203],{"class":49},[36,61007,61008],{"class":38,"line":34333},[36,61009,194],{"emptyLinePlaceholder":193},[36,61011,61012],{"class":38,"line":34360},[36,61013,61014],{"class":49},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[36,61016,61017],{"class":38,"line":34384},[36,61018,60986],{"class":49},[36,61020,61021],{"class":38,"line":34390},[36,61022,61023],{"class":49},"    slider.addEventListener('mouseleave', function () {\n",[36,61025,61026],{"class":38,"line":34396},[36,61027,60996],{"class":49},[36,61029,61030],{"class":38,"line":34402},[36,61031,61032],{"class":49},"      if (timerId) clearInterval(timerId)\n",[36,61034,61035],{"class":38,"line":34413},[36,61036,61037],{"class":49},"      \u002F\u002F 开启定时器\n",[36,61039,61040],{"class":38,"line":34424},[36,61041,61042],{"class":49},"      timerId = setInterval(function () {\n",[36,61044,61045],{"class":38,"line":34430},[36,61046,61047],{"class":49},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[36,61049,61050],{"class":38,"line":34447},[36,61051,61052],{"class":49},"        next.click()\n",[36,61054,61055],{"class":38,"line":34470},[36,61056,61057],{"class":49},"      }, 1000)\n",[36,61059,61060],{"class":38,"line":34493},[36,61061,34203],{"class":49},[36,61063,61064,61066,61068],{"class":38,"line":34499},[36,61065,53159],{"class":49},[36,61067,52555],{"class":52042},[36,61069,52049],{"class":49},[36,61071,61072,61074,61076],{"class":38,"line":34504},[36,61073,52527],{"class":49},[36,61075,52542],{"class":52042},[36,61077,52049],{"class":49},[36,61079,61080],{"class":38,"line":34513},[36,61081,194],{"emptyLinePlaceholder":193},[36,61083,61084,61086,61088],{"class":38,"line":34523},[36,61085,52527],{"class":49},[36,61087,51377],{"class":52042},[36,61089,52049],{"class":49},[22742,61091,61093],{"id":61092},"_3252-焦点事件","3.2.5.2 焦点事件",[14,61095,61096],{},"小米搜索框案例：",[26,61098,61100],{"className":51375,"code":61099,"language":51377,"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,61101,61102,61112,61126,61130,61138,61152,61172,61192,61204,61212,61218,61228,61238,61250,61254,61258,61265,61269,61280,61284,61288,61295,61306,61319,61333,61337,61341,61350,61362,61374,61388,61401,61414,61432,61443,61447,61451,61460,61477,61481,61485,61492,61502,61512,61523,61536,61548,61564,61575,61587,61591,61595,61603,61614,61631,61643,61655,61666,61670,61674,61685,61696,61700,61708,61712,61720,61724,61732,61747,61770,61785,61816,61843,61870,61897,61924,61951,61978,61987,61995,62003,62008,62028,62048,62053,62058,62076,62081,62091,62096,62110,62115,62120,62137,62146,62158,62162,62170,62178,62182],{"__ignoreMap":31},[36,61103,61104,61106,61108,61110],{"class":38,"line":39},[36,61105,52039],{"class":49},[36,61107,52043],{"class":52042},[36,61109,52046],{"class":2713},[36,61111,52049],{"class":49},[36,61113,61114,61116,61118,61120,61122,61124],{"class":38,"line":46},[36,61115,1789],{"class":49},[36,61117,51377],{"class":52042},[36,61119,52058],{"class":2713},[36,61121,54],{"class":49},[36,61123,52063],{"class":998},[36,61125,52049],{"class":49},[36,61127,61128],{"class":38,"line":78},[36,61129,194],{"emptyLinePlaceholder":193},[36,61131,61132,61134,61136],{"class":38,"line":125},[36,61133,1789],{"class":49},[36,61135,52076],{"class":52042},[36,61137,52049],{"class":49},[36,61139,61140,61142,61144,61146,61148,61150],{"class":38,"line":131},[36,61141,52083],{"class":49},[36,61143,52086],{"class":52042},[36,61145,52089],{"class":2713},[36,61147,54],{"class":49},[36,61149,52094],{"class":998},[36,61151,52049],{"class":49},[36,61153,61154,61156,61158,61160,61162,61164,61166,61168,61170],{"class":38,"line":396},[36,61155,52083],{"class":49},[36,61157,52086],{"class":52042},[36,61159,52105],{"class":2713},[36,61161,54],{"class":49},[36,61163,52110],{"class":998},[36,61165,52113],{"class":2713},[36,61167,54],{"class":49},[36,61169,52118],{"class":998},[36,61171,52049],{"class":49},[36,61173,61174,61176,61178,61180,61182,61184,61186,61188,61190],{"class":38,"line":407},[36,61175,52083],{"class":49},[36,61177,52086],{"class":52042},[36,61179,15664],{"class":2713},[36,61181,54],{"class":49},[36,61183,52133],{"class":998},[36,61185,52113],{"class":2713},[36,61187,54],{"class":49},[36,61189,52140],{"class":998},[36,61191,52049],{"class":49},[36,61193,61194,61196,61198,61200,61202],{"class":38,"line":2061},[36,61195,52083],{"class":49},[36,61197,52149],{"class":52042},[36,61199,52152],{"class":49},[36,61201,52149],{"class":52042},[36,61203,52049],{"class":49},[36,61205,61206,61208,61210],{"class":38,"line":2067},[36,61207,52083],{"class":49},[36,61209,807],{"class":52042},[36,61211,52049],{"class":49},[36,61213,61214,61216],{"class":38,"line":2079},[36,61215,52169],{"class":52042},[36,61217,16316],{"class":49},[36,61219,61220,61222,61224,61226],{"class":38,"line":2362},[36,61221,52176],{"class":60},[36,61223,52179],{"class":49},[36,61225,643],{"class":60},[36,61227,2040],{"class":49},[36,61229,61230,61232,61234,61236],{"class":38,"line":2367},[36,61231,52188],{"class":60},[36,61233,52179],{"class":49},[36,61235,643],{"class":60},[36,61237,2040],{"class":49},[36,61239,61240,61243,61245,61248],{"class":38,"line":2373},[36,61241,61242],{"class":60},"            box-sizing",[36,61244,52179],{"class":49},[36,61246,61247],{"class":60},"border-box",[36,61249,2040],{"class":49},[36,61251,61252],{"class":38,"line":2378},[36,61253,3278],{"class":49},[36,61255,61256],{"class":38,"line":2392},[36,61257,194],{"emptyLinePlaceholder":193},[36,61259,61260,61263],{"class":38,"line":2397},[36,61261,61262],{"class":52042},"        ul",[36,61264,16316],{"class":49},[36,61266,61267],{"class":38,"line":2403},[36,61268,194],{"emptyLinePlaceholder":193},[36,61270,61271,61274,61276,61278],{"class":38,"line":2424},[36,61272,61273],{"class":60},"            list-style",[36,61275,52179],{"class":49},[36,61277,55479],{"class":60},[36,61279,2040],{"class":49},[36,61281,61282],{"class":38,"line":2429},[36,61283,3278],{"class":49},[36,61285,61286],{"class":38,"line":2443},[36,61287,194],{"emptyLinePlaceholder":193},[36,61289,61290,61293],{"class":38,"line":2448},[36,61291,61292],{"class":2713},"        .mi",[36,61294,16316],{"class":49},[36,61296,61297,61300,61302,61304],{"class":38,"line":2477},[36,61298,61299],{"class":60},"            position",[36,61301,52179],{"class":49},[36,61303,55506],{"class":60},[36,61305,2040],{"class":49},[36,61307,61308,61310,61312,61315,61317],{"class":38,"line":2482},[36,61309,52226],{"class":60},[36,61311,52179],{"class":49},[36,61313,61314],{"class":60},"223",[36,61316,52234],{"class":53},[36,61318,2040],{"class":49},[36,61320,61321,61323,61325,61327,61329,61331],{"class":38,"line":2499},[36,61322,52176],{"class":60},[36,61324,52179],{"class":49},[36,61326,67],{"class":60},[36,61328,52234],{"class":53},[36,61330,52298],{"class":60},[36,61332,2040],{"class":49},[36,61334,61335],{"class":38,"line":2504},[36,61336,3278],{"class":49},[36,61338,61339],{"class":38,"line":2509},[36,61340,194],{"emptyLinePlaceholder":193},[36,61342,61343,61345,61348],{"class":38,"line":2514},[36,61344,61292],{"class":2713},[36,61346,61347],{"class":52042}," input",[36,61349,16316],{"class":49},[36,61351,61352,61354,61356,61358,61360],{"class":38,"line":2528},[36,61353,52226],{"class":60},[36,61355,52179],{"class":49},[36,61357,61314],{"class":60},[36,61359,52234],{"class":53},[36,61361,2040],{"class":49},[36,61363,61364,61366,61368,61370,61372],{"class":38,"line":2533},[36,61365,52241],{"class":60},[36,61367,52179],{"class":49},[36,61369,1489],{"class":60},[36,61371,52234],{"class":53},[36,61373,2040],{"class":49},[36,61375,61376,61378,61380,61382,61384,61386],{"class":38,"line":3326},[36,61377,52188],{"class":60},[36,61379,52179],{"class":49},[36,61381,643],{"class":60},[36,61383,2788],{"class":60},[36,61385,52234],{"class":53},[36,61387,2040],{"class":49},[36,61389,61390,61393,61395,61397,61399],{"class":38,"line":3340},[36,61391,61392],{"class":60},"            font-size",[36,61394,52179],{"class":49},[36,61396,1431],{"class":60},[36,61398,52234],{"class":53},[36,61400,2040],{"class":49},[36,61402,61403,61406,61408,61410,61412],{"class":38,"line":3348},[36,61404,61405],{"class":60},"            line-height",[36,61407,52179],{"class":49},[36,61409,1489],{"class":60},[36,61411,52234],{"class":53},[36,61413,2040],{"class":49},[36,61415,61416,61419,61421,61423,61425,61427,61430],{"class":38,"line":3353},[36,61417,61418],{"class":60},"            border",[36,61420,52179],{"class":49},[36,61422,61],{"class":60},[36,61424,52234],{"class":53},[36,61426,52263],{"class":60},[36,61428,61429],{"class":60}," #e0e0e0",[36,61431,2040],{"class":49},[36,61433,61434,61437,61439,61441],{"class":38,"line":3359},[36,61435,61436],{"class":60},"            outline",[36,61438,52179],{"class":49},[36,61440,55479],{"class":60},[36,61442,2040],{"class":49},[36,61444,61445],{"class":38,"line":3365},[36,61446,3278],{"class":49},[36,61448,61449],{"class":38,"line":3370},[36,61450,194],{"emptyLinePlaceholder":193},[36,61452,61453,61455,61458],{"class":38,"line":8695},[36,61454,61292],{"class":2713},[36,61456,61457],{"class":2713}," .search",[36,61459,16316],{"class":49},[36,61461,61462,61464,61466,61468,61470,61472,61475],{"class":38,"line":8719},[36,61463,61418],{"class":60},[36,61465,52179],{"class":49},[36,61467,61],{"class":60},[36,61469,52234],{"class":53},[36,61471,52263],{"class":60},[36,61473,61474],{"class":60}," #ff6700",[36,61476,2040],{"class":49},[36,61478,61479],{"class":38,"line":8724},[36,61480,3278],{"class":49},[36,61482,61483],{"class":38,"line":8730},[36,61484,194],{"emptyLinePlaceholder":193},[36,61486,61487,61490],{"class":38,"line":8757},[36,61488,61489],{"class":2713},"        .result-list",[36,61491,16316],{"class":49},[36,61493,61494,61496,61498,61500],{"class":38,"line":8762},[36,61495,52214],{"class":60},[36,61497,52179],{"class":49},[36,61499,55479],{"class":60},[36,61501,2040],{"class":49},[36,61503,61504,61506,61508,61510],{"class":38,"line":8768},[36,61505,61299],{"class":60},[36,61507,52179],{"class":49},[36,61509,55573],{"class":60},[36,61511,2040],{"class":49},[36,61513,61514,61517,61519,61521],{"class":38,"line":8780},[36,61515,61516],{"class":60},"            left",[36,61518,52179],{"class":49},[36,61520,643],{"class":60},[36,61522,2040],{"class":49},[36,61524,61525,61528,61530,61532,61534],{"class":38,"line":8792},[36,61526,61527],{"class":60},"            top",[36,61529,52179],{"class":49},[36,61531,1489],{"class":60},[36,61533,52234],{"class":53},[36,61535,2040],{"class":49},[36,61537,61538,61540,61542,61544,61546],{"class":38,"line":8804},[36,61539,52226],{"class":60},[36,61541,52179],{"class":49},[36,61543,61314],{"class":60},[36,61545,52234],{"class":53},[36,61547,2040],{"class":49},[36,61549,61550,61552,61554,61556,61558,61560,61562],{"class":38,"line":10463},[36,61551,61418],{"class":60},[36,61553,52179],{"class":49},[36,61555,61],{"class":60},[36,61557,52234],{"class":53},[36,61559,52263],{"class":60},[36,61561,61474],{"class":60},[36,61563,2040],{"class":49},[36,61565,61566,61569,61571,61573],{"class":38,"line":10488},[36,61567,61568],{"class":60},"            border-top",[36,61570,52179],{"class":49},[36,61572,643],{"class":60},[36,61574,2040],{"class":49},[36,61576,61577,61580,61582,61585],{"class":38,"line":10511},[36,61578,61579],{"class":60},"            background",[36,61581,52179],{"class":49},[36,61583,61584],{"class":60},"#fff",[36,61586,2040],{"class":49},[36,61588,61589],{"class":38,"line":10535},[36,61590,3278],{"class":49},[36,61592,61593],{"class":38,"line":10540},[36,61594,194],{"emptyLinePlaceholder":193},[36,61596,61597,61599,61601],{"class":38,"line":10545},[36,61598,61489],{"class":2713},[36,61600,2148],{"class":52042},[36,61602,16316],{"class":49},[36,61604,61605,61607,61609,61612],{"class":38,"line":10550},[36,61606,52214],{"class":60},[36,61608,52179],{"class":49},[36,61610,61611],{"class":60},"block",[36,61613,2040],{"class":49},[36,61615,61616,61618,61620,61622,61624,61627,61629],{"class":38,"line":10559},[36,61617,52188],{"class":60},[36,61619,52179],{"class":49},[36,61621,1230],{"class":60},[36,61623,52234],{"class":53},[36,61625,61626],{"class":60}," 15",[36,61628,52234],{"class":53},[36,61630,2040],{"class":49},[36,61632,61633,61635,61637,61639,61641],{"class":38,"line":10564},[36,61634,61392],{"class":60},[36,61636,52179],{"class":49},[36,61638,625],{"class":60},[36,61640,52234],{"class":53},[36,61642,2040],{"class":49},[36,61644,61645,61648,61650,61653],{"class":38,"line":10570},[36,61646,61647],{"class":60},"            color",[36,61649,52179],{"class":49},[36,61651,61652],{"class":60},"#424242",[36,61654,2040],{"class":49},[36,61656,61657,61660,61662,61664],{"class":38,"line":10591},[36,61658,61659],{"class":60},"            text-decoration",[36,61661,52179],{"class":49},[36,61663,55479],{"class":60},[36,61665,2040],{"class":49},[36,61667,61668],{"class":38,"line":10597},[36,61669,3278],{"class":49},[36,61671,61672],{"class":38,"line":10611},[36,61673,194],{"emptyLinePlaceholder":193},[36,61675,61676,61678,61680,61683],{"class":38,"line":10617},[36,61677,61489],{"class":2713},[36,61679,2148],{"class":52042},[36,61681,61682],{"class":2713},":hover",[36,61684,16316],{"class":49},[36,61686,61687,61689,61691,61694],{"class":38,"line":10644},[36,61688,52382],{"class":60},[36,61690,52179],{"class":49},[36,61692,61693],{"class":60},"#eee",[36,61695,2040],{"class":49},[36,61697,61698],{"class":38,"line":10653},[36,61699,3278],{"class":49},[36,61701,61702,61704,61706],{"class":38,"line":10659},[36,61703,52518],{"class":49},[36,61705,807],{"class":52042},[36,61707,52049],{"class":49},[36,61709,61710],{"class":38,"line":10667},[36,61711,194],{"emptyLinePlaceholder":193},[36,61713,61714,61716,61718],{"class":38,"line":10672},[36,61715,52527],{"class":49},[36,61717,52076],{"class":52042},[36,61719,52049],{"class":49},[36,61721,61722],{"class":38,"line":17348},[36,61723,194],{"emptyLinePlaceholder":193},[36,61725,61726,61728,61730],{"class":38,"line":17354},[36,61727,1789],{"class":49},[36,61729,52542],{"class":52042},[36,61731,52049],{"class":49},[36,61733,61734,61736,61738,61740,61742,61745],{"class":38,"line":17377},[36,61735,52083],{"class":49},[36,61737,52353],{"class":52042},[36,61739,54228],{"class":2713},[36,61741,54],{"class":49},[36,61743,61744],{"class":998},"\"mi\"",[36,61746,52049],{"class":49},[36,61748,61749,61751,61753,61755,61757,61760,61763,61765,61768],{"class":38,"line":17383},[36,61750,56044],{"class":49},[36,61752,54563],{"class":52042},[36,61754,54566],{"class":2713},[36,61756,54],{"class":49},[36,61758,61759],{"class":998},"\"search\"",[36,61761,61762],{"class":2713}," placeholder",[36,61764,54],{"class":49},[36,61766,61767],{"class":998},"\"小米笔记本\"",[36,61769,52049],{"class":49},[36,61771,61772,61774,61776,61778,61780,61783],{"class":38,"line":17406},[36,61773,56044],{"class":49},[36,61775,1886],{"class":52042},[36,61777,54228],{"class":2713},[36,61779,54],{"class":49},[36,61781,61782],{"class":998},"\"result-list\"",[36,61784,52049],{"class":49},[36,61786,61787,61790,61792,61795,61797,61800,61802,61805,61808,61810,61812,61814],{"class":38,"line":17420},[36,61788,61789],{"class":49},"            \u003C",[36,61791,854],{"class":52042},[36,61793,61794],{"class":49},">\u003C",[36,61796,50],{"class":52042},[36,61798,61799],{"class":2713}," href",[36,61801,54],{"class":49},[36,61803,61804],{"class":998},"\"#\"",[36,61806,61807],{"class":49},">全部商品\u003C\u002F",[36,61809,50],{"class":52042},[36,61811,56056],{"class":49},[36,61813,854],{"class":52042},[36,61815,52049],{"class":49},[36,61817,61818,61820,61822,61824,61826,61828,61830,61832,61835,61837,61839,61841],{"class":38,"line":17440},[36,61819,61789],{"class":49},[36,61821,854],{"class":52042},[36,61823,61794],{"class":49},[36,61825,50],{"class":52042},[36,61827,61799],{"class":2713},[36,61829,54],{"class":49},[36,61831,61804],{"class":998},[36,61833,61834],{"class":49},">小米11\u003C\u002F",[36,61836,50],{"class":52042},[36,61838,56056],{"class":49},[36,61840,854],{"class":52042},[36,61842,52049],{"class":49},[36,61844,61845,61847,61849,61851,61853,61855,61857,61859,61862,61864,61866,61868],{"class":38,"line":17446},[36,61846,61789],{"class":49},[36,61848,854],{"class":52042},[36,61850,61794],{"class":49},[36,61852,50],{"class":52042},[36,61854,61799],{"class":2713},[36,61856,54],{"class":49},[36,61858,61804],{"class":998},[36,61860,61861],{"class":49},">小米10S\u003C\u002F",[36,61863,50],{"class":52042},[36,61865,56056],{"class":49},[36,61867,854],{"class":52042},[36,61869,52049],{"class":49},[36,61871,61872,61874,61876,61878,61880,61882,61884,61886,61889,61891,61893,61895],{"class":38,"line":17457},[36,61873,61789],{"class":49},[36,61875,854],{"class":52042},[36,61877,61794],{"class":49},[36,61879,50],{"class":52042},[36,61881,61799],{"class":2713},[36,61883,54],{"class":49},[36,61885,61804],{"class":998},[36,61887,61888],{"class":49},">小米笔记本\u003C\u002F",[36,61890,50],{"class":52042},[36,61892,56056],{"class":49},[36,61894,854],{"class":52042},[36,61896,52049],{"class":49},[36,61898,61899,61901,61903,61905,61907,61909,61911,61913,61916,61918,61920,61922],{"class":38,"line":17480},[36,61900,61789],{"class":49},[36,61902,854],{"class":52042},[36,61904,61794],{"class":49},[36,61906,50],{"class":52042},[36,61908,61799],{"class":2713},[36,61910,54],{"class":49},[36,61912,61804],{"class":998},[36,61914,61915],{"class":49},">小米手机\u003C\u002F",[36,61917,50],{"class":52042},[36,61919,56056],{"class":49},[36,61921,854],{"class":52042},[36,61923,52049],{"class":49},[36,61925,61926,61928,61930,61932,61934,61936,61938,61940,61943,61945,61947,61949],{"class":38,"line":17502},[36,61927,61789],{"class":49},[36,61929,854],{"class":52042},[36,61931,61794],{"class":49},[36,61933,50],{"class":52042},[36,61935,61799],{"class":2713},[36,61937,54],{"class":49},[36,61939,61804],{"class":998},[36,61941,61942],{"class":49},">黑鲨4\u003C\u002F",[36,61944,50],{"class":52042},[36,61946,56056],{"class":49},[36,61948,854],{"class":52042},[36,61950,52049],{"class":49},[36,61952,61953,61955,61957,61959,61961,61963,61965,61967,61970,61972,61974,61976],{"class":38,"line":17507},[36,61954,61789],{"class":49},[36,61956,854],{"class":52042},[36,61958,61794],{"class":49},[36,61960,50],{"class":52042},[36,61962,61799],{"class":2713},[36,61964,54],{"class":49},[36,61966,61804],{"class":998},[36,61968,61969],{"class":49},">空调\u003C\u002F",[36,61971,50],{"class":52042},[36,61973,56056],{"class":49},[36,61975,854],{"class":52042},[36,61977,52049],{"class":49},[36,61979,61980,61983,61985],{"class":38,"line":17513},[36,61981,61982],{"class":49},"        \u003C\u002F",[36,61984,1886],{"class":52042},[36,61986,52049],{"class":49},[36,61988,61989,61991,61993],{"class":38,"line":17527},[36,61990,52518],{"class":49},[36,61992,52353],{"class":52042},[36,61994,52049],{"class":49},[36,61996,61997,61999,62001],{"class":38,"line":17540},[36,61998,52083],{"class":49},[36,62000,52555],{"class":52042},[36,62002,52049],{"class":49},[36,62004,62005],{"class":38,"line":17545},[36,62006,62007],{"class":42},"        \u002F\u002F 1. 获取元素\n",[36,62009,62010,62013,62015,62017,62019,62021,62023,62026],{"class":38,"line":17559},[36,62011,62012],{"class":53},"        const",[36,62014,61347],{"class":60},[36,62016,14308],{"class":53},[36,62018,55138],{"class":49},[36,62020,55141],{"class":2713},[36,62022,901],{"class":49},[36,62024,62025],{"class":998},"'[type=search]'",[36,62027,75],{"class":49},[36,62029,62030,62032,62035,62037,62039,62041,62043,62046],{"class":38,"line":17564},[36,62031,62012],{"class":53},[36,62033,62034],{"class":60}," ul",[36,62036,14308],{"class":53},[36,62038,55138],{"class":49},[36,62040,55141],{"class":2713},[36,62042,901],{"class":49},[36,62044,62045],{"class":998},"'.result-list'",[36,62047,75],{"class":49},[36,62049,62050],{"class":38,"line":17570},[36,62051,62052],{"class":42},"        \u002F\u002F console.log(input)\n",[36,62054,62055],{"class":38,"line":17575},[36,62056,62057],{"class":42},"        \u002F\u002F 2. 监听事件 获得焦点\n",[36,62059,62060,62063,62065,62067,62070,62072,62074],{"class":38,"line":17589},[36,62061,62062],{"class":49},"        input.",[36,62064,58555],{"class":2713},[36,62066,901],{"class":49},[36,62068,62069],{"class":998},"'focus'",[36,62071,154],{"class":49},[36,62073,55191],{"class":53},[36,62075,55194],{"class":49},[36,62077,62078],{"class":38,"line":17594},[36,62079,62080],{"class":42},"            \u002F\u002F ul显示\n",[36,62082,62083,62086,62088],{"class":38,"line":17599},[36,62084,62085],{"class":49},"            ul.style.display ",[36,62087,54],{"class":53},[36,62089,62090],{"class":998}," 'block'\n",[36,62092,62093],{"class":38,"line":17613},[36,62094,62095],{"class":42},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[36,62097,62098,62101,62103,62105,62108],{"class":38,"line":17625},[36,62099,62100],{"class":49},"            input.classList.",[36,62102,6081],{"class":2713},[36,62104,901],{"class":49},[36,62106,62107],{"class":998},"'search'",[36,62109,75],{"class":49},[36,62111,62112],{"class":38,"line":17630},[36,62113,62114],{"class":49},"        })\n",[36,62116,62117],{"class":38,"line":17643},[36,62118,62119],{"class":42},"        \u002F\u002F 3. 监听事件 失去焦点\n",[36,62121,62122,62124,62126,62128,62131,62133,62135],{"class":38,"line":17648},[36,62123,62062],{"class":49},[36,62125,58555],{"class":2713},[36,62127,901],{"class":49},[36,62129,62130],{"class":998},"'blur'",[36,62132,154],{"class":49},[36,62134,55191],{"class":53},[36,62136,55194],{"class":49},[36,62138,62139,62141,62143],{"class":38,"line":17653},[36,62140,62085],{"class":49},[36,62142,54],{"class":53},[36,62144,62145],{"class":998}," 'none'\n",[36,62147,62148,62150,62152,62154,62156],{"class":38,"line":17658},[36,62149,62100],{"class":49},[36,62151,57748],{"class":2713},[36,62153,901],{"class":49},[36,62155,62107],{"class":998},[36,62157,75],{"class":49},[36,62159,62160],{"class":38,"line":17671},[36,62161,62114],{"class":49},[36,62163,62164,62166,62168],{"class":38,"line":17676},[36,62165,52518],{"class":49},[36,62167,52555],{"class":52042},[36,62169,52049],{"class":49},[36,62171,62172,62174,62176],{"class":38,"line":33375},[36,62173,52527],{"class":49},[36,62175,52542],{"class":52042},[36,62177,52049],{"class":49},[36,62179,62180],{"class":38,"line":33381},[36,62181,194],{"emptyLinePlaceholder":193},[36,62183,62184,62186,62188],{"class":38,"line":33387},[36,62185,52527],{"class":49},[36,62187,51377],{"class":52042},[36,62189,52049],{"class":49},[22742,62191,62193],{"id":62192},"_3253-键盘事件","3.2.5.3 键盘事件",[14,62195,62196],{},"评论字数统计案例",[14,62198,62199],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,62201,62202],{},"牢记focus伪类选择器",[52086,62204],{"charSet":62205},"UTF-8",[52086,62207],{"name":62208,"content":62209},"viewport","width=device-width, initial-scale=1.0",[52149,62211,62212],{},"Document",[807,62214,62215],{},"\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",[54563,62217],{"type":5935},[1886,62219,62220,62223],{},[854,62221,62222],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[854,62224,62225],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[26,62227,62229],{"className":51375,"code":62228,"language":51377,"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,62230,62231,62241,62255,62259,62267,62281,62301,62321,62334,62342,62349,62362,62376,62386,62396,62400,62404,62411,62423,62435,62447,62459,62488,62501,62505,62509,62518,62529,62541,62552,62563,62575,62586,62598,62614,62626,62630,62634,62645,62656,62666,62678,62682,62686,62694,62705,62715,62726,62738,62751,62763,62775,62779,62783,62792,62804,62815,62828,62839,62853,62857,62861,62868,62880,62892,62902,62906,62910,62919,62931,62941,62945,62949,62960,62970,62989,63002,63006,63010,63020,63030,63034,63038,63049,63060,63072,63084,63088,63092,63103,63114,63128,63132,63136,63147,63157,63169,63173,63181,63189,63193,63201,63216,63235,63275,63288,63296,63310,63330,63338,63353,63376,63394,63409,63429,63449,63469,63477,63485,63493,63501,63521,63541,63546,63563,63572,63576,63581,63597,63605,63609,63614,63631,63636,63661,63665,63669,63674,63679,63687,63695,63699],{"__ignoreMap":31},[36,62232,62233,62235,62237,62239],{"class":38,"line":39},[36,62234,52039],{"class":49},[36,62236,52043],{"class":52042},[36,62238,52046],{"class":2713},[36,62240,52049],{"class":49},[36,62242,62243,62245,62247,62249,62251,62253],{"class":38,"line":46},[36,62244,1789],{"class":49},[36,62246,51377],{"class":52042},[36,62248,52058],{"class":2713},[36,62250,54],{"class":49},[36,62252,52063],{"class":998},[36,62254,52049],{"class":49},[36,62256,62257],{"class":38,"line":78},[36,62258,194],{"emptyLinePlaceholder":193},[36,62260,62261,62263,62265],{"class":38,"line":125},[36,62262,1789],{"class":49},[36,62264,52076],{"class":52042},[36,62266,52049],{"class":49},[36,62268,62269,62271,62273,62275,62277,62279],{"class":38,"line":131},[36,62270,52886],{"class":49},[36,62272,52086],{"class":52042},[36,62274,52089],{"class":2713},[36,62276,54],{"class":49},[36,62278,52094],{"class":998},[36,62280,52049],{"class":49},[36,62282,62283,62285,62287,62289,62291,62293,62295,62297,62299],{"class":38,"line":396},[36,62284,52886],{"class":49},[36,62286,52086],{"class":52042},[36,62288,52105],{"class":2713},[36,62290,54],{"class":49},[36,62292,52110],{"class":998},[36,62294,52113],{"class":2713},[36,62296,54],{"class":49},[36,62298,52118],{"class":998},[36,62300,52049],{"class":49},[36,62302,62303,62305,62307,62309,62311,62313,62315,62317,62319],{"class":38,"line":407},[36,62304,52886],{"class":49},[36,62306,52086],{"class":52042},[36,62308,15664],{"class":2713},[36,62310,54],{"class":49},[36,62312,52133],{"class":998},[36,62314,52113],{"class":2713},[36,62316,54],{"class":49},[36,62318,52140],{"class":998},[36,62320,52049],{"class":49},[36,62322,62323,62325,62327,62330,62332],{"class":38,"line":2061},[36,62324,52886],{"class":49},[36,62326,52149],{"class":52042},[36,62328,62329],{"class":49},">评论回车发布\u003C\u002F",[36,62331,52149],{"class":52042},[36,62333,52049],{"class":49},[36,62335,62336,62338,62340],{"class":38,"line":2067},[36,62337,52886],{"class":49},[36,62339,807],{"class":52042},[36,62341,52049],{"class":49},[36,62343,62344,62347],{"class":38,"line":2079},[36,62345,62346],{"class":2713},"    .wrapper",[36,62348,16316],{"class":49},[36,62350,62351,62354,62356,62358,62360],{"class":38,"line":2362},[36,62352,62353],{"class":60},"      min-width",[36,62355,52179],{"class":49},[36,62357,4736],{"class":60},[36,62359,52234],{"class":53},[36,62361,2040],{"class":49},[36,62363,62364,62367,62369,62372,62374],{"class":38,"line":2367},[36,62365,62366],{"class":60},"      max-width",[36,62368,52179],{"class":49},[36,62370,62371],{"class":60},"800",[36,62373,52234],{"class":53},[36,62375,2040],{"class":49},[36,62377,62378,62380,62382,62384],{"class":38,"line":2373},[36,62379,55751],{"class":60},[36,62381,52179],{"class":49},[36,62383,52219],{"class":60},[36,62385,2040],{"class":49},[36,62387,62388,62390,62392,62394],{"class":38,"line":2378},[36,62389,55762],{"class":60},[36,62391,52179],{"class":49},[36,62393,52322],{"class":60},[36,62395,2040],{"class":49},[36,62397,62398],{"class":38,"line":2392},[36,62399,2937],{"class":49},[36,62401,62402],{"class":38,"line":2397},[36,62403,194],{"emptyLinePlaceholder":193},[36,62405,62406,62409],{"class":38,"line":2403},[36,62407,62408],{"class":2713},"    .avatar",[36,62410,16316],{"class":49},[36,62412,62413,62415,62417,62419,62421],{"class":38,"line":2424},[36,62414,55513],{"class":60},[36,62416,52179],{"class":49},[36,62418,1489],{"class":60},[36,62420,52234],{"class":53},[36,62422,2040],{"class":49},[36,62424,62425,62427,62429,62431,62433],{"class":38,"line":2429},[36,62426,55527],{"class":60},[36,62428,52179],{"class":49},[36,62430,1489],{"class":60},[36,62432,52234],{"class":53},[36,62434,2040],{"class":49},[36,62436,62437,62439,62441,62443,62445],{"class":38,"line":2443},[36,62438,55876],{"class":60},[36,62440,52179],{"class":49},[36,62442,1538],{"class":60},[36,62444,1214],{"class":53},[36,62446,2040],{"class":49},[36,62448,62449,62452,62454,62457],{"class":38,"line":2448},[36,62450,62451],{"class":60},"      overflow",[36,62453,52179],{"class":49},[36,62455,62456],{"class":60},"hidden",[36,62458,2040],{"class":49},[36,62460,62461,62464,62466,62469,62471,62474,62476,62479,62481,62483,62486],{"class":38,"line":2477},[36,62462,62463],{"class":60},"      background",[36,62465,52179],{"class":49},[36,62467,62468],{"class":60},"url",[36,62470,901],{"class":49},[36,62472,62473],{"class":416},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[36,62475,14458],{"class":49},[36,62477,62478],{"class":60},"no-repeat",[36,62480,17888],{"class":60},[36,62482,25723],{"class":49},[36,62484,62485],{"class":60},"cover",[36,62487,2040],{"class":49},[36,62489,62490,62493,62495,62497,62499],{"class":38,"line":2482},[36,62491,62492],{"class":60},"      margin-right",[36,62494,52179],{"class":49},[36,62496,72],{"class":60},[36,62498,52234],{"class":53},[36,62500,2040],{"class":49},[36,62502,62503],{"class":38,"line":2499},[36,62504,2937],{"class":49},[36,62506,62507],{"class":38,"line":2504},[36,62508,194],{"emptyLinePlaceholder":193},[36,62510,62511,62513,62516],{"class":38,"line":2509},[36,62512,62346],{"class":2713},[36,62514,62515],{"class":52042}," textarea",[36,62517,16316],{"class":49},[36,62519,62520,62523,62525,62527],{"class":38,"line":2514},[36,62521,62522],{"class":60},"      outline",[36,62524,52179],{"class":49},[36,62526,55479],{"class":60},[36,62528,2040],{"class":49},[36,62530,62531,62534,62536,62539],{"class":38,"line":2528},[36,62532,62533],{"class":60},"      border-color",[36,62535,52179],{"class":49},[36,62537,62538],{"class":60},"transparent",[36,62540,2040],{"class":49},[36,62542,62543,62546,62548,62550],{"class":38,"line":2533},[36,62544,62545],{"class":60},"      resize",[36,62547,52179],{"class":49},[36,62549,55479],{"class":60},[36,62551,2040],{"class":49},[36,62553,62554,62556,62558,62561],{"class":38,"line":3326},[36,62555,62463],{"class":60},[36,62557,52179],{"class":49},[36,62559,62560],{"class":60},"#f5f5f5",[36,62562,2040],{"class":49},[36,62564,62565,62567,62569,62571,62573],{"class":38,"line":3340},[36,62566,55876],{"class":60},[36,62568,52179],{"class":49},[36,62570,186],{"class":60},[36,62572,52234],{"class":53},[36,62574,2040],{"class":49},[36,62576,62577,62580,62582,62584],{"class":38,"line":3348},[36,62578,62579],{"class":60},"      flex",[36,62581,52179],{"class":49},[36,62583,61],{"class":60},[36,62585,2040],{"class":49},[36,62587,62588,62590,62592,62594,62596],{"class":38,"line":3353},[36,62589,55437],{"class":60},[36,62591,52179],{"class":49},[36,62593,332],{"class":60},[36,62595,52234],{"class":53},[36,62597,2040],{"class":49},[36,62599,62600,62603,62605,62607,62610,62612],{"class":38,"line":3359},[36,62601,62602],{"class":60},"      transition",[36,62604,52179],{"class":49},[36,62606,28866],{"class":60},[36,62608,62609],{"class":60}," 0.5",[36,62611,1577],{"class":53},[36,62613,2040],{"class":49},[36,62615,62616,62618,62620,62622,62624],{"class":38,"line":3365},[36,62617,55527],{"class":60},[36,62619,52179],{"class":49},[36,62621,1830],{"class":60},[36,62623,52234],{"class":53},[36,62625,2040],{"class":49},[36,62627,62628],{"class":38,"line":3370},[36,62629,2937],{"class":49},[36,62631,62632],{"class":38,"line":8695},[36,62633,194],{"emptyLinePlaceholder":193},[36,62635,62636,62638,62640,62643],{"class":38,"line":8719},[36,62637,62346],{"class":2713},[36,62639,62515],{"class":52042},[36,62641,62642],{"class":2713},":focus",[36,62644,16316],{"class":49},[36,62646,62647,62649,62651,62654],{"class":38,"line":8724},[36,62648,62533],{"class":60},[36,62650,52179],{"class":49},[36,62652,62653],{"class":60},"#e4e4e4",[36,62655,2040],{"class":49},[36,62657,62658,62660,62662,62664],{"class":38,"line":8730},[36,62659,62463],{"class":60},[36,62661,52179],{"class":49},[36,62663,61584],{"class":60},[36,62665,2040],{"class":49},[36,62667,62668,62670,62672,62674,62676],{"class":38,"line":8757},[36,62669,55527],{"class":60},[36,62671,52179],{"class":49},[36,62673,1538],{"class":60},[36,62675,52234],{"class":53},[36,62677,2040],{"class":49},[36,62679,62680],{"class":38,"line":8762},[36,62681,2937],{"class":49},[36,62683,62684],{"class":38,"line":8768},[36,62685,194],{"emptyLinePlaceholder":193},[36,62687,62688,62690,62692],{"class":38,"line":8780},[36,62689,62346],{"class":2713},[36,62691,58209],{"class":52042},[36,62693,16316],{"class":49},[36,62695,62696,62698,62700,62703],{"class":38,"line":8792},[36,62697,62463],{"class":60},[36,62699,52179],{"class":49},[36,62701,62702],{"class":60},"#00aeec",[36,62704,2040],{"class":49},[36,62706,62707,62709,62711,62713],{"class":38,"line":8804},[36,62708,58158],{"class":60},[36,62710,52179],{"class":49},[36,62712,61584],{"class":60},[36,62714,2040],{"class":49},[36,62716,62717,62720,62722,62724],{"class":38,"line":10463},[36,62718,62719],{"class":60},"      border",[36,62721,52179],{"class":49},[36,62723,55479],{"class":60},[36,62725,2040],{"class":49},[36,62727,62728,62730,62732,62734,62736],{"class":38,"line":10488},[36,62729,55876],{"class":60},[36,62731,52179],{"class":49},[36,62733,186],{"class":60},[36,62735,52234],{"class":53},[36,62737,2040],{"class":49},[36,62739,62740,62743,62745,62747,62749],{"class":38,"line":10511},[36,62741,62742],{"class":60},"      margin-left",[36,62744,52179],{"class":49},[36,62746,332],{"class":60},[36,62748,52234],{"class":53},[36,62750,2040],{"class":49},[36,62752,62753,62755,62757,62759,62761],{"class":38,"line":10535},[36,62754,55513],{"class":60},[36,62756,52179],{"class":49},[36,62758,1242],{"class":60},[36,62760,52234],{"class":53},[36,62762,2040],{"class":49},[36,62764,62765,62768,62770,62773],{"class":38,"line":10540},[36,62766,62767],{"class":60},"      cursor",[36,62769,52179],{"class":49},[36,62771,62772],{"class":60},"pointer",[36,62774,2040],{"class":49},[36,62776,62777],{"class":38,"line":10545},[36,62778,2937],{"class":49},[36,62780,62781],{"class":38,"line":10550},[36,62782,194],{"emptyLinePlaceholder":193},[36,62784,62785,62787,62790],{"class":38,"line":10559},[36,62786,62346],{"class":2713},[36,62788,62789],{"class":2713}," .total",[36,62791,16316],{"class":49},[36,62793,62794,62796,62798,62800,62802],{"class":38,"line":10564},[36,62795,62492],{"class":60},[36,62797,52179],{"class":49},[36,62799,1494],{"class":60},[36,62801,52234],{"class":53},[36,62803,2040],{"class":49},[36,62805,62806,62808,62810,62813],{"class":38,"line":10570},[36,62807,58158],{"class":60},[36,62809,52179],{"class":49},[36,62811,62812],{"class":60},"#999",[36,62814,2040],{"class":49},[36,62816,62817,62820,62822,62824,62826],{"class":38,"line":10591},[36,62818,62819],{"class":60},"      margin-top",[36,62821,52179],{"class":49},[36,62823,157],{"class":60},[36,62825,52234],{"class":53},[36,62827,2040],{"class":49},[36,62829,62830,62833,62835,62837],{"class":38,"line":10597},[36,62831,62832],{"class":60},"      opacity",[36,62834,52179],{"class":49},[36,62836,643],{"class":60},[36,62838,2040],{"class":49},[36,62840,62841,62843,62845,62847,62849,62851],{"class":38,"line":10611},[36,62842,62602],{"class":60},[36,62844,52179],{"class":49},[36,62846,28866],{"class":60},[36,62848,62609],{"class":60},[36,62850,1577],{"class":53},[36,62852,2040],{"class":49},[36,62854,62855],{"class":38,"line":10617},[36,62856,2937],{"class":49},[36,62858,62859],{"class":38,"line":10644},[36,62860,194],{"emptyLinePlaceholder":193},[36,62862,62863,62866],{"class":38,"line":10653},[36,62864,62865],{"class":2713},"    .list",[36,62867,16316],{"class":49},[36,62869,62870,62872,62874,62876,62878],{"class":38,"line":10659},[36,62871,62353],{"class":60},[36,62873,52179],{"class":49},[36,62875,4736],{"class":60},[36,62877,52234],{"class":53},[36,62879,2040],{"class":49},[36,62881,62882,62884,62886,62888,62890],{"class":38,"line":10667},[36,62883,62366],{"class":60},[36,62885,52179],{"class":49},[36,62887,62371],{"class":60},[36,62889,52234],{"class":53},[36,62891,2040],{"class":49},[36,62893,62894,62896,62898,62900],{"class":38,"line":10672},[36,62895,55751],{"class":60},[36,62897,52179],{"class":49},[36,62899,52219],{"class":60},[36,62901,2040],{"class":49},[36,62903,62904],{"class":38,"line":17348},[36,62905,2937],{"class":49},[36,62907,62908],{"class":38,"line":17354},[36,62909,194],{"emptyLinePlaceholder":193},[36,62911,62912,62914,62917],{"class":38,"line":17377},[36,62913,62865],{"class":2713},[36,62915,62916],{"class":2713}," .item",[36,62918,16316],{"class":49},[36,62920,62921,62923,62925,62927,62929],{"class":38,"line":17383},[36,62922,55513],{"class":60},[36,62924,52179],{"class":49},[36,62926,67],{"class":60},[36,62928,1214],{"class":53},[36,62930,2040],{"class":49},[36,62932,62933,62935,62937,62939],{"class":38,"line":17406},[36,62934,55751],{"class":60},[36,62936,52179],{"class":49},[36,62938,52219],{"class":60},[36,62940,2040],{"class":49},[36,62942,62943],{"class":38,"line":17420},[36,62944,2937],{"class":49},[36,62946,62947],{"class":38,"line":17440},[36,62948,194],{"emptyLinePlaceholder":193},[36,62950,62951,62953,62955,62958],{"class":38,"line":17446},[36,62952,62865],{"class":2713},[36,62954,62916],{"class":2713},[36,62956,62957],{"class":2713}," .info",[36,62959,16316],{"class":49},[36,62961,62962,62964,62966,62968],{"class":38,"line":17457},[36,62963,62579],{"class":60},[36,62965,52179],{"class":49},[36,62967,61],{"class":60},[36,62969,2040],{"class":49},[36,62971,62972,62975,62977,62979,62981,62984,62987],{"class":38,"line":17480},[36,62973,62974],{"class":60},"      border-bottom",[36,62976,52179],{"class":49},[36,62978,61],{"class":60},[36,62980,52234],{"class":53},[36,62982,62983],{"class":60}," dashed",[36,62985,62986],{"class":60}," #e4e4e4",[36,62988,2040],{"class":49},[36,62990,62991,62994,62996,62998,63000],{"class":38,"line":17502},[36,62992,62993],{"class":60},"      padding-bottom",[36,62995,52179],{"class":49},[36,62997,332],{"class":60},[36,62999,52234],{"class":53},[36,63001,2040],{"class":49},[36,63003,63004],{"class":38,"line":17507},[36,63005,2937],{"class":49},[36,63007,63008],{"class":38,"line":17513},[36,63009,194],{"emptyLinePlaceholder":193},[36,63011,63012,63014,63016,63018],{"class":38,"line":17527},[36,63013,62865],{"class":2713},[36,63015,62916],{"class":2713},[36,63017,7572],{"class":52042},[36,63019,16316],{"class":49},[36,63021,63022,63024,63026,63028],{"class":38,"line":17540},[36,63023,55448],{"class":60},[36,63025,52179],{"class":49},[36,63027,643],{"class":60},[36,63029,2040],{"class":49},[36,63031,63032],{"class":38,"line":17545},[36,63033,2937],{"class":49},[36,63035,63036],{"class":38,"line":17559},[36,63037,194],{"emptyLinePlaceholder":193},[36,63039,63040,63042,63044,63047],{"class":38,"line":17564},[36,63041,62865],{"class":2713},[36,63043,62916],{"class":2713},[36,63045,63046],{"class":2713}," .name",[36,63048,16316],{"class":49},[36,63050,63051,63053,63055,63058],{"class":38,"line":17570},[36,63052,58158],{"class":60},[36,63054,52179],{"class":49},[36,63056,63057],{"class":60},"#FB7299",[36,63059,2040],{"class":49},[36,63061,63062,63064,63066,63068,63070],{"class":38,"line":17575},[36,63063,55664],{"class":60},[36,63065,52179],{"class":49},[36,63067,1431],{"class":60},[36,63069,52234],{"class":53},[36,63071,2040],{"class":49},[36,63073,63074,63077,63079,63082],{"class":38,"line":17589},[36,63075,63076],{"class":60},"      font-weight",[36,63078,52179],{"class":49},[36,63080,63081],{"class":60},"bold",[36,63083,2040],{"class":49},[36,63085,63086],{"class":38,"line":17594},[36,63087,2937],{"class":49},[36,63089,63090],{"class":38,"line":17599},[36,63091,194],{"emptyLinePlaceholder":193},[36,63093,63094,63096,63098,63101],{"class":38,"line":17613},[36,63095,62865],{"class":2713},[36,63097,62916],{"class":2713},[36,63099,63100],{"class":2713}," .text",[36,63102,16316],{"class":49},[36,63104,63105,63107,63109,63112],{"class":38,"line":17625},[36,63106,58158],{"class":60},[36,63108,52179],{"class":49},[36,63110,63111],{"class":60},"#333",[36,63113,2040],{"class":49},[36,63115,63116,63118,63120,63122,63124,63126],{"class":38,"line":17630},[36,63117,55437],{"class":60},[36,63119,52179],{"class":49},[36,63121,332],{"class":60},[36,63123,52234],{"class":53},[36,63125,4842],{"class":60},[36,63127,2040],{"class":49},[36,63129,63130],{"class":38,"line":17643},[36,63131,2937],{"class":49},[36,63133,63134],{"class":38,"line":17648},[36,63135,194],{"emptyLinePlaceholder":193},[36,63137,63138,63140,63142,63145],{"class":38,"line":17653},[36,63139,62865],{"class":2713},[36,63141,62916],{"class":2713},[36,63143,63144],{"class":2713}," .time",[36,63146,16316],{"class":49},[36,63148,63149,63151,63153,63155],{"class":38,"line":17658},[36,63150,58158],{"class":60},[36,63152,52179],{"class":49},[36,63154,62812],{"class":60},[36,63156,2040],{"class":49},[36,63158,63159,63161,63163,63165,63167],{"class":38,"line":17671},[36,63160,55664],{"class":60},[36,63162,52179],{"class":49},[36,63164,625],{"class":60},[36,63166,52234],{"class":53},[36,63168,2040],{"class":49},[36,63170,63171],{"class":38,"line":17676},[36,63172,2937],{"class":49},[36,63174,63175,63177,63179],{"class":38,"line":33375},[36,63176,53159],{"class":49},[36,63178,807],{"class":52042},[36,63180,52049],{"class":49},[36,63182,63183,63185,63187],{"class":38,"line":33381},[36,63184,52527],{"class":49},[36,63186,52076],{"class":52042},[36,63188,52049],{"class":49},[36,63190,63191],{"class":38,"line":33387},[36,63192,194],{"emptyLinePlaceholder":193},[36,63194,63195,63197,63199],{"class":38,"line":33393},[36,63196,1789],{"class":49},[36,63198,52542],{"class":52042},[36,63200,52049],{"class":49},[36,63202,63203,63205,63207,63209,63211,63214],{"class":38,"line":33399},[36,63204,52886],{"class":49},[36,63206,52353],{"class":52042},[36,63208,54228],{"class":2713},[36,63210,54],{"class":49},[36,63212,63213],{"class":998},"\"wrapper\"",[36,63215,52049],{"class":49},[36,63217,63218,63220,63222,63224,63226,63229,63231,63233],{"class":38,"line":33410},[36,63219,52083],{"class":49},[36,63221,1326],{"class":52042},[36,63223,54228],{"class":2713},[36,63225,54],{"class":49},[36,63227,63228],{"class":998},"\"avatar\"",[36,63230,56056],{"class":49},[36,63232,1326],{"class":52042},[36,63234,52049],{"class":49},[36,63236,63237,63239,63241,63243,63245,63248,63250,63252,63255,63257,63259,63261,63264,63266,63269,63271,63273],{"class":38,"line":33416},[36,63238,52083],{"class":49},[36,63240,55030],{"class":52042},[36,63242,15703],{"class":2713},[36,63244,54],{"class":49},[36,63246,63247],{"class":998},"\"tx\"",[36,63249,61762],{"class":2713},[36,63251,54],{"class":49},[36,63253,63254],{"class":998},"\"发一条友善的评论\"",[36,63256,55053],{"class":2713},[36,63258,54],{"class":49},[36,63260,4450],{"class":998},[36,63262,63263],{"class":2713}," maxlength",[36,63265,54],{"class":49},[36,63267,63268],{"class":998},"\"200\"",[36,63270,56056],{"class":49},[36,63272,55030],{"class":52042},[36,63274,52049],{"class":49},[36,63276,63277,63279,63281,63284,63286],{"class":38,"line":33436},[36,63278,52083],{"class":49},[36,63280,54629],{"class":52042},[36,63282,63283],{"class":49},">发布\u003C\u002F",[36,63285,54629],{"class":52042},[36,63287,52049],{"class":49},[36,63289,63290,63292,63294],{"class":38,"line":33442},[36,63291,53159],{"class":49},[36,63293,52353],{"class":52042},[36,63295,52049],{"class":49},[36,63297,63298,63300,63302,63304,63306,63308],{"class":38,"line":33453},[36,63299,52886],{"class":49},[36,63301,52353],{"class":52042},[36,63303,54228],{"class":2713},[36,63305,54],{"class":49},[36,63307,63213],{"class":998},[36,63309,52049],{"class":49},[36,63311,63312,63314,63316,63318,63320,63323,63326,63328],{"class":38,"line":33459},[36,63313,52083],{"class":49},[36,63315,36],{"class":52042},[36,63317,54228],{"class":2713},[36,63319,54],{"class":49},[36,63321,63322],{"class":998},"\"total\"",[36,63324,63325],{"class":49},">0\u002F200字\u003C\u002F",[36,63327,36],{"class":52042},[36,63329,52049],{"class":49},[36,63331,63332,63334,63336],{"class":38,"line":33465},[36,63333,53159],{"class":49},[36,63335,52353],{"class":52042},[36,63337,52049],{"class":49},[36,63339,63340,63342,63344,63346,63348,63351],{"class":38,"line":33471},[36,63341,52886],{"class":49},[36,63343,52353],{"class":52042},[36,63345,54228],{"class":2713},[36,63347,54],{"class":49},[36,63349,63350],{"class":998},"\"list\"",[36,63352,52049],{"class":49},[36,63354,63355,63357,63359,63361,63363,63366,63369,63371,63374],{"class":38,"line":33477},[36,63356,52083],{"class":49},[36,63358,52353],{"class":52042},[36,63360,54228],{"class":2713},[36,63362,54],{"class":49},[36,63364,63365],{"class":998},"\"item\"",[36,63367,63368],{"class":2713}," style",[36,63370,54],{"class":49},[36,63372,63373],{"class":998},"\"display: none;\"",[36,63375,52049],{"class":49},[36,63377,63378,63380,63382,63384,63386,63388,63390,63392],{"class":38,"line":33483},[36,63379,55976],{"class":49},[36,63381,1326],{"class":52042},[36,63383,54228],{"class":2713},[36,63385,54],{"class":49},[36,63387,63228],{"class":998},[36,63389,56056],{"class":49},[36,63391,1326],{"class":52042},[36,63393,52049],{"class":49},[36,63395,63396,63398,63400,63402,63404,63407],{"class":38,"line":33489},[36,63397,55976],{"class":49},[36,63399,52353],{"class":52042},[36,63401,54228],{"class":2713},[36,63403,54],{"class":49},[36,63405,63406],{"class":998},"\"info\"",[36,63408,52049],{"class":49},[36,63410,63411,63413,63415,63417,63419,63422,63425,63427],{"class":38,"line":33495},[36,63412,56044],{"class":49},[36,63414,14],{"class":52042},[36,63416,54228],{"class":2713},[36,63418,54],{"class":49},[36,63420,63421],{"class":998},"\"name\"",[36,63423,63424],{"class":49},">清风徐来\u003C\u002F",[36,63426,14],{"class":52042},[36,63428,52049],{"class":49},[36,63430,63431,63433,63435,63437,63439,63442,63445,63447],{"class":38,"line":33515},[36,63432,56044],{"class":49},[36,63434,14],{"class":52042},[36,63436,54228],{"class":2713},[36,63438,54],{"class":49},[36,63440,63441],{"class":998},"\"text\"",[36,63443,63444],{"class":49},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[36,63446,14],{"class":52042},[36,63448,52049],{"class":49},[36,63450,63451,63453,63455,63457,63459,63462,63465,63467],{"class":38,"line":33521},[36,63452,56044],{"class":49},[36,63454,14],{"class":52042},[36,63456,54228],{"class":2713},[36,63458,54],{"class":49},[36,63460,63461],{"class":998},"\"time\"",[36,63463,63464],{"class":49},">2022-10-10 20:29:21\u003C\u002F",[36,63466,14],{"class":52042},[36,63468,52049],{"class":49},[36,63470,63471,63473,63475],{"class":38,"line":33537},[36,63472,56149],{"class":49},[36,63474,52353],{"class":52042},[36,63476,52049],{"class":49},[36,63478,63479,63481,63483],{"class":38,"line":33543},[36,63480,52518],{"class":49},[36,63482,52353],{"class":52042},[36,63484,52049],{"class":49},[36,63486,63487,63489,63491],{"class":38,"line":33557},[36,63488,53159],{"class":49},[36,63490,52353],{"class":52042},[36,63492,52049],{"class":49},[36,63494,63495,63497,63499],{"class":38,"line":33563},[36,63496,52886],{"class":49},[36,63498,52555],{"class":52042},[36,63500,52049],{"class":49},[36,63502,63503,63505,63508,63510,63512,63514,63516,63519],{"class":38,"line":33578},[36,63504,11966],{"class":53},[36,63506,63507],{"class":60}," tx",[36,63509,14308],{"class":53},[36,63511,55138],{"class":49},[36,63513,55141],{"class":2713},[36,63515,901],{"class":49},[36,63517,63518],{"class":998},"'#tx'",[36,63520,75],{"class":49},[36,63522,63523,63525,63528,63530,63532,63534,63536,63539],{"class":38,"line":33584},[36,63524,11966],{"class":53},[36,63526,63527],{"class":60}," total",[36,63529,14308],{"class":53},[36,63531,55138],{"class":49},[36,63533,55141],{"class":2713},[36,63535,901],{"class":49},[36,63537,63538],{"class":998},"'.total'",[36,63540,75],{"class":49},[36,63542,63543],{"class":38,"line":33593},[36,63544,63545],{"class":42},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[36,63547,63548,63551,63553,63555,63557,63559,63561],{"class":38,"line":33599},[36,63549,63550],{"class":49},"    tx.",[36,63552,58555],{"class":2713},[36,63554,901],{"class":49},[36,63556,62069],{"class":998},[36,63558,154],{"class":49},[36,63560,55191],{"class":53},[36,63562,55194],{"class":49},[36,63564,63565,63568,63570],{"class":38,"line":33608},[36,63566,63567],{"class":49},"      total.style.opacity ",[36,63569,54],{"class":53},[36,63571,56441],{"class":60},[36,63573,63574],{"class":38,"line":33614},[36,63575,34203],{"class":49},[36,63577,63578],{"class":38,"line":33620},[36,63579,63580],{"class":42},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[36,63582,63583,63585,63587,63589,63591,63593,63595],{"class":38,"line":33629},[36,63584,63550],{"class":49},[36,63586,58555],{"class":2713},[36,63588,901],{"class":49},[36,63590,62130],{"class":998},[36,63592,154],{"class":49},[36,63594,55191],{"class":53},[36,63596,55194],{"class":49},[36,63598,63599,63601,63603],{"class":38,"line":33635},[36,63600,63567],{"class":49},[36,63602,54],{"class":53},[36,63604,48075],{"class":60},[36,63606,63607],{"class":38,"line":33646},[36,63608,34203],{"class":49},[36,63610,63611],{"class":38,"line":33652},[36,63612,63613],{"class":42},"    \u002F\u002F 3. 检测用户输入\n",[36,63615,63616,63618,63620,63622,63625,63627,63629],{"class":38,"line":33671},[36,63617,63550],{"class":49},[36,63619,58555],{"class":2713},[36,63621,901],{"class":49},[36,63623,63624],{"class":998},"'input'",[36,63626,154],{"class":49},[36,63628,55191],{"class":53},[36,63630,55194],{"class":49},[36,63632,63633],{"class":38,"line":33677},[36,63634,63635],{"class":42},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[36,63637,63638,63641,63643,63646,63649,63651,63654,63656,63658],{"class":38,"line":33688},[36,63639,63640],{"class":49},"      total.innerHTML ",[36,63642,54],{"class":53},[36,63644,63645],{"class":998}," `${",[36,63647,63648],{"class":49},"tx",[36,63650,1440],{"class":998},[36,63652,63653],{"class":49},"value",[36,63655,1440],{"class":998},[36,63657,52710],{"class":60},[36,63659,63660],{"class":998},"}\u002F200字`\n",[36,63662,63663],{"class":38,"line":33694},[36,63664,34203],{"class":49},[36,63666,63667],{"class":38,"line":33714},[36,63668,194],{"emptyLinePlaceholder":193},[36,63670,63671],{"class":38,"line":33730},[36,63672,63673],{"class":42},"    \u002F\u002F const str = 'andy'\n",[36,63675,63676],{"class":38,"line":33736},[36,63677,63678],{"class":42},"    \u002F\u002F console.log(str.length)\n",[36,63680,63681,63683,63685],{"class":38,"line":33750},[36,63682,53159],{"class":49},[36,63684,52555],{"class":52042},[36,63686,52049],{"class":49},[36,63688,63689,63691,63693],{"class":38,"line":33756},[36,63690,52527],{"class":49},[36,63692,52542],{"class":52042},[36,63694,52049],{"class":49},[36,63696,63697],{"class":38,"line":33762},[36,63698,194],{"emptyLinePlaceholder":193},[36,63700,63701,63703,63705],{"class":38,"line":33773},[36,63702,52527],{"class":49},[36,63704,51377],{"class":52042},[36,63706,52049],{"class":49},[22742,63708,63710],{"id":63709},"_3254-change事件","3.2.5.4 change事件",[14,63712,63713],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,63715,63716],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,63718,63719],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[26,63721,63723],{"className":51375,"code":63722,"language":51377,"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,63724,63725,63735,63749,63753,63761,63775,63795,63807,63815,63819,63827,63841,63849,63867,63885,63897,63901,63909,63917,63921],{"__ignoreMap":31},[36,63726,63727,63729,63731,63733],{"class":38,"line":39},[36,63728,52039],{"class":49},[36,63730,52043],{"class":52042},[36,63732,52046],{"class":2713},[36,63734,52049],{"class":49},[36,63736,63737,63739,63741,63743,63745,63747],{"class":38,"line":46},[36,63738,1789],{"class":49},[36,63740,51377],{"class":52042},[36,63742,52058],{"class":2713},[36,63744,54],{"class":49},[36,63746,52063],{"class":998},[36,63748,52049],{"class":49},[36,63750,63751],{"class":38,"line":78},[36,63752,194],{"emptyLinePlaceholder":193},[36,63754,63755,63757,63759],{"class":38,"line":125},[36,63756,1789],{"class":49},[36,63758,52076],{"class":52042},[36,63760,52049],{"class":49},[36,63762,63763,63765,63767,63769,63771,63773],{"class":38,"line":131},[36,63764,52886],{"class":49},[36,63766,52086],{"class":52042},[36,63768,52089],{"class":2713},[36,63770,54],{"class":49},[36,63772,52094],{"class":998},[36,63774,52049],{"class":49},[36,63776,63777,63779,63781,63783,63785,63787,63789,63791,63793],{"class":38,"line":396},[36,63778,52886],{"class":49},[36,63780,52086],{"class":52042},[36,63782,15664],{"class":2713},[36,63784,54],{"class":49},[36,63786,52133],{"class":998},[36,63788,52113],{"class":2713},[36,63790,54],{"class":49},[36,63792,52140],{"class":998},[36,63794,52049],{"class":49},[36,63796,63797,63799,63801,63803,63805],{"class":38,"line":407},[36,63798,52886],{"class":49},[36,63800,52149],{"class":52042},[36,63802,52152],{"class":49},[36,63804,52149],{"class":52042},[36,63806,52049],{"class":49},[36,63808,63809,63811,63813],{"class":38,"line":2061},[36,63810,52527],{"class":49},[36,63812,52076],{"class":52042},[36,63814,52049],{"class":49},[36,63816,63817],{"class":38,"line":2067},[36,63818,194],{"emptyLinePlaceholder":193},[36,63820,63821,63823,63825],{"class":38,"line":2079},[36,63822,1789],{"class":49},[36,63824,52542],{"class":52042},[36,63826,52049],{"class":49},[36,63828,63829,63831,63833,63835,63837,63839],{"class":38,"line":2362},[36,63830,52886],{"class":49},[36,63832,54563],{"class":52042},[36,63834,54566],{"class":2713},[36,63836,54],{"class":49},[36,63838,63441],{"class":998},[36,63840,52049],{"class":49},[36,63842,63843,63845,63847],{"class":38,"line":2367},[36,63844,52886],{"class":49},[36,63846,52555],{"class":52042},[36,63848,52049],{"class":49},[36,63850,63851,63853,63855,63857,63859,63861,63863,63865],{"class":38,"line":2373},[36,63852,11966],{"class":53},[36,63854,61347],{"class":60},[36,63856,14308],{"class":53},[36,63858,55138],{"class":49},[36,63860,55141],{"class":2713},[36,63862,901],{"class":49},[36,63864,63624],{"class":998},[36,63866,75],{"class":49},[36,63868,63869,63872,63874,63876,63879,63881,63883],{"class":38,"line":2378},[36,63870,63871],{"class":49},"    input.",[36,63873,58555],{"class":2713},[36,63875,901],{"class":49},[36,63877,63878],{"class":998},"'change'",[36,63880,154],{"class":49},[36,63882,55191],{"class":53},[36,63884,55194],{"class":49},[36,63886,63887,63889,63891,63893,63895],{"class":38,"line":2392},[36,63888,58986],{"class":49},[36,63890,58989],{"class":2713},[36,63892,901],{"class":49},[36,63894,1475],{"class":60},[36,63896,75],{"class":49},[36,63898,63899],{"class":38,"line":2397},[36,63900,34203],{"class":49},[36,63902,63903,63905,63907],{"class":38,"line":2403},[36,63904,53159],{"class":49},[36,63906,52555],{"class":52042},[36,63908,52049],{"class":49},[36,63910,63911,63913,63915],{"class":38,"line":2424},[36,63912,52527],{"class":49},[36,63914,52542],{"class":52042},[36,63916,52049],{"class":49},[36,63918,63919],{"class":38,"line":2429},[36,63920,194],{"emptyLinePlaceholder":193},[36,63922,63923,63925,63927],{"class":38,"line":2443},[36,63924,52527],{"class":49},[36,63926,51377],{"class":52042},[36,63928,52049],{"class":49},[14,63930,63931],{},"总结：内容发生改变才回去触发",[868,63933,63935],{"id":63934},"_326-事件对象","3.2.6 事件对象",[22742,63937,63939],{"id":63938},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63941,63942],{},[2212,63943],{"alt":31,"src":63944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63946,63947],{},[2212,63948],{"alt":31,"src":63949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63951,63952],{},"点击一次，就输出了事件对象，它是个对象",[14,63954,63955],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63957,63958],{},[2212,63959],{"alt":31,"src":63960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22742,63962,63964],{"id":63963},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63966,63967],{},[2212,63968],{"alt":31,"src":63969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63971,63972],{},"实现按特殊字符才是实现打印输出效果：",[26,63974,63976],{"className":53809,"code":63975,"language":53811,"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,63977,63978,63986,63991,64005,64013,64018,64023,64028,64033,64038,64043,64048,64053,64058,64062,64066,64074],{"__ignoreMap":31},[36,63979,63980,63982,63984],{"class":38,"line":39},[36,63981,1789],{"class":49},[36,63983,52542],{"class":52042},[36,63985,52049],{"class":49},[36,63987,63988],{"class":38,"line":46},[36,63989,63990],{"class":42},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[36,63992,63993,63995,63997,63999,64001,64003],{"class":38,"line":78},[36,63994,52886],{"class":49},[36,63996,54563],{"class":52042},[36,63998,54566],{"class":2713},[36,64000,54],{"class":49},[36,64002,63441],{"class":998},[36,64004,52049],{"class":49},[36,64006,64007,64009,64011],{"class":38,"line":125},[36,64008,52886],{"class":49},[36,64010,52555],{"class":52042},[36,64012,52049],{"class":49},[36,64014,64015],{"class":38,"line":131},[36,64016,64017],{"class":49},"    \u002F\u002F const btn = document.querySelector('button')\n",[36,64019,64020],{"class":38,"line":396},[36,64021,64022],{"class":49},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[36,64024,64025],{"class":38,"line":407},[36,64026,64027],{"class":49},"    \u002F\u002F   console.log(e);\n",[36,64029,64030],{"class":38,"line":2061},[36,64031,64032],{"class":49},"    \u002F\u002F })\n",[36,64034,64035],{"class":38,"line":2067},[36,64036,64037],{"class":49},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[36,64039,64040],{"class":38,"line":2079},[36,64041,64042],{"class":49},"    const input = document.querySelector('input')\n",[36,64044,64045],{"class":38,"line":2362},[36,64046,64047],{"class":49},"    input.addEventListener('keyup', function (e) {\n",[36,64049,64050],{"class":38,"line":2367},[36,64051,64052],{"class":49},"      if (e.key === 'Enter') {\n",[36,64054,64055],{"class":38,"line":2373},[36,64056,64057],{"class":49},"        console.log('我按下了回车键')\n",[36,64059,64060],{"class":38,"line":2378},[36,64061,53140],{"class":49},[36,64063,64064],{"class":38,"line":2392},[36,64065,34203],{"class":49},[36,64067,64068,64070,64072],{"class":38,"line":2397},[36,64069,53159],{"class":49},[36,64071,52555],{"class":52042},[36,64073,52049],{"class":49},[36,64075,64076,64078,64080],{"class":38,"line":2403},[36,64077,52527],{"class":49},[36,64079,52542],{"class":52042},[36,64081,52049],{"class":49},[22742,64083,64085],{"id":64084},"_3263-trim方法","3.2.6.3 trim方法",[14,64087,64088],{},[2212,64089],{"alt":31,"src":64090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,64092,64093],{},[2212,64094],{"alt":31,"src":64095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,64097,64098],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,64100,64101],{},"str.trim()",[868,64103,64105],{"id":64104},"_327-环境对象","3.2.7 环境对象",[14,64107,64108],{},[2212,64109],{"alt":31,"src":64110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,64112,64113],{},[2212,64114],{"alt":31,"src":64115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,64117,64118],{},[2212,64119],{"alt":31,"src":64120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,64122,64123],{},"实际函数调用是window.fn()",[14,64125,64126],{},"普通函数里面this指向的是window",[1886,64128,64129,64132,64135],{},[854,64130,64131],{},"在普通函数下，this指向的是window",[854,64133,64134],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[854,64136,64137],{},"箭头函数没有this",[14,64139,64140],{},"粗略记法就是：谁调用，this就指向谁",[14,64142,64143],{},[2212,64144],{"alt":31,"src":64145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,64147,64148],{},[2212,64149],{"alt":31,"src":64150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,64152,64153],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,64155,64156],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[26,64158,64160],{"className":53809,"code":64159,"language":53811,"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,64161,64162,64170,64182,64190,64195,64200,64205,64210,64214,64222],{"__ignoreMap":31},[36,64163,64164,64166,64168],{"class":38,"line":39},[36,64165,1789],{"class":49},[36,64167,52542],{"class":52042},[36,64169,52049],{"class":49},[36,64171,64172,64174,64176,64178,64180],{"class":38,"line":46},[36,64173,52886],{"class":49},[36,64175,54629],{"class":52042},[36,64177,54635],{"class":49},[36,64179,54629],{"class":52042},[36,64181,52049],{"class":49},[36,64183,64184,64186,64188],{"class":38,"line":78},[36,64185,52886],{"class":49},[36,64187,52555],{"class":52042},[36,64189,52049],{"class":49},[36,64191,64192],{"class":38,"line":125},[36,64193,64194],{"class":49},"    const button = document.querySelector('button')\n",[36,64196,64197],{"class":38,"line":131},[36,64198,64199],{"class":49},"    button.addEventListener('click', function () {\n",[36,64201,64202],{"class":38,"line":396},[36,64203,64204],{"class":49},"      \u002F\u002F console.log(this);\n",[36,64206,64207],{"class":38,"line":407},[36,64208,64209],{"class":49},"      this.style.color = 'pink'\n",[36,64211,64212],{"class":38,"line":2061},[36,64213,34203],{"class":49},[36,64215,64216,64218,64220],{"class":38,"line":2067},[36,64217,53159],{"class":49},[36,64219,52555],{"class":52042},[36,64221,52049],{"class":49},[36,64223,64224,64226,64228],{"class":38,"line":2079},[36,64225,52527],{"class":49},[36,64227,52542],{"class":52042},[36,64229,52049],{"class":49},[868,64231,64233],{"id":64232},"_328-回调函数","3.2.8 回调函数",[14,64235,64236],{},[2212,64237],{"alt":31,"src":64238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,64240,64241],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,64243,12077],{},[1886,64245,64246,64249,64252],{},[854,64247,64248],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[854,64250,64251],{},"回调函数本质还是函数，只不过把它当成参数使用",[854,64253,64254],{},"使用匿名函数做为回调函数比较常见",[868,64256,64258],{"id":64257},"_329-tab栏切换","3.2.9 tab栏切换",[14,64260,64261],{},[2212,64262],{"alt":31,"src":64263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[26,64265,64267],{"className":51375,"code":64266,"language":51377,"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,64268,64269,64279,64293,64297,64305,64319,64339,64359,64372,64380,64386,64396,64406,64410,64414,64421,64434,64447,64459,64475,64479,64483,64490,64502,64514,64526,64536,64546,64550,64554,64563,64575,64586,64598,64602,64606,64614,64624,64634,64644,64648,64652,64662,64676,64688,64692,64696,64708,64719,64736,64746,64750,64754,64769,64780,64790,64794,64798,64805,64820,64824,64828,64836,64846,64850,64854,64863,64873,64877,64885,64893,64897,64905,64920,64935,64948,64956,64990,65017,65044,65071,65098,65106,65114,65129,65166,65201,65236,65271,65306,65314,65322,65330,65335,65340,65360,65365,65394,65399,65404,65422,65427,65432,65437,65459,65464,65480,65484,65489,65494,65515,65520,65549,65553,65558,65562,65570,65578,65582],{"__ignoreMap":31},[36,64270,64271,64273,64275,64277],{"class":38,"line":39},[36,64272,52039],{"class":49},[36,64274,52043],{"class":52042},[36,64276,52046],{"class":2713},[36,64278,52049],{"class":49},[36,64280,64281,64283,64285,64287,64289,64291],{"class":38,"line":46},[36,64282,1789],{"class":49},[36,64284,51377],{"class":52042},[36,64286,52058],{"class":2713},[36,64288,54],{"class":49},[36,64290,52063],{"class":998},[36,64292,52049],{"class":49},[36,64294,64295],{"class":38,"line":78},[36,64296,194],{"emptyLinePlaceholder":193},[36,64298,64299,64301,64303],{"class":38,"line":125},[36,64300,1789],{"class":49},[36,64302,52076],{"class":52042},[36,64304,52049],{"class":49},[36,64306,64307,64309,64311,64313,64315,64317],{"class":38,"line":131},[36,64308,52886],{"class":49},[36,64310,52086],{"class":52042},[36,64312,52089],{"class":2713},[36,64314,54],{"class":49},[36,64316,52094],{"class":998},[36,64318,59869],{"class":49},[36,64320,64321,64323,64325,64327,64329,64331,64333,64335,64337],{"class":38,"line":396},[36,64322,52886],{"class":49},[36,64324,52086],{"class":52042},[36,64326,52105],{"class":2713},[36,64328,54],{"class":49},[36,64330,52110],{"class":998},[36,64332,52113],{"class":2713},[36,64334,54],{"class":49},[36,64336,52118],{"class":998},[36,64338,59869],{"class":49},[36,64340,64341,64343,64345,64347,64349,64351,64353,64355,64357],{"class":38,"line":407},[36,64342,52886],{"class":49},[36,64344,52086],{"class":52042},[36,64346,15664],{"class":2713},[36,64348,54],{"class":49},[36,64350,52133],{"class":998},[36,64352,52113],{"class":2713},[36,64354,54],{"class":49},[36,64356,52140],{"class":998},[36,64358,59869],{"class":49},[36,64360,64361,64363,64365,64368,64370],{"class":38,"line":2061},[36,64362,52886],{"class":49},[36,64364,52149],{"class":52042},[36,64366,64367],{"class":49},">tab栏切换\u003C\u002F",[36,64369,52149],{"class":52042},[36,64371,52049],{"class":49},[36,64373,64374,64376,64378],{"class":38,"line":2067},[36,64375,52886],{"class":49},[36,64377,807],{"class":52042},[36,64379,52049],{"class":49},[36,64381,64382,64384],{"class":38,"line":2079},[36,64383,7150],{"class":52042},[36,64385,16316],{"class":49},[36,64387,64388,64390,64392,64394],{"class":38,"line":2362},[36,64389,55448],{"class":60},[36,64391,52179],{"class":49},[36,64393,643],{"class":60},[36,64395,2040],{"class":49},[36,64397,64398,64400,64402,64404],{"class":38,"line":2367},[36,64399,55437],{"class":60},[36,64401,52179],{"class":49},[36,64403,643],{"class":60},[36,64405,2040],{"class":49},[36,64407,64408],{"class":38,"line":2373},[36,64409,2937],{"class":49},[36,64411,64412],{"class":38,"line":2378},[36,64413,194],{"emptyLinePlaceholder":193},[36,64415,64416,64419],{"class":38,"line":2392},[36,64417,64418],{"class":2713},"    .tab",[36,64420,16316],{"class":49},[36,64422,64423,64425,64427,64430,64432],{"class":38,"line":2397},[36,64424,55513],{"class":60},[36,64426,52179],{"class":49},[36,64428,64429],{"class":60},"590",[36,64431,52234],{"class":53},[36,64433,2040],{"class":49},[36,64435,64436,64438,64440,64443,64445],{"class":38,"line":2403},[36,64437,55527],{"class":60},[36,64439,52179],{"class":49},[36,64441,64442],{"class":60},"340",[36,64444,52234],{"class":53},[36,64446,2040],{"class":49},[36,64448,64449,64451,64453,64455,64457],{"class":38,"line":2424},[36,64450,55448],{"class":60},[36,64452,52179],{"class":49},[36,64454,72],{"class":60},[36,64456,52234],{"class":53},[36,64458,2040],{"class":49},[36,64460,64461,64463,64465,64467,64469,64471,64473],{"class":38,"line":2429},[36,64462,62719],{"class":60},[36,64464,52179],{"class":49},[36,64466,61],{"class":60},[36,64468,52234],{"class":53},[36,64470,52263],{"class":60},[36,64472,62986],{"class":60},[36,64474,2040],{"class":49},[36,64476,64477],{"class":38,"line":2443},[36,64478,2937],{"class":49},[36,64480,64481],{"class":38,"line":2448},[36,64482,194],{"emptyLinePlaceholder":193},[36,64484,64485,64488],{"class":38,"line":2477},[36,64486,64487],{"class":2713},"    .tab-nav",[36,64489,16316],{"class":49},[36,64491,64492,64494,64496,64498,64500],{"class":38,"line":2482},[36,64493,55513],{"class":60},[36,64495,52179],{"class":49},[36,64497,67],{"class":60},[36,64499,1214],{"class":53},[36,64501,2040],{"class":49},[36,64503,64504,64506,64508,64510,64512],{"class":38,"line":2499},[36,64505,55527],{"class":60},[36,64507,52179],{"class":49},[36,64509,1786],{"class":60},[36,64511,52234],{"class":53},[36,64513,2040],{"class":49},[36,64515,64516,64518,64520,64522,64524],{"class":38,"line":2504},[36,64517,58101],{"class":60},[36,64519,52179],{"class":49},[36,64521,1786],{"class":60},[36,64523,52234],{"class":53},[36,64525,2040],{"class":49},[36,64527,64528,64530,64532,64534],{"class":38,"line":2509},[36,64529,55751],{"class":60},[36,64531,52179],{"class":49},[36,64533,52219],{"class":60},[36,64535,2040],{"class":49},[36,64537,64538,64540,64542,64544],{"class":38,"line":2514},[36,64539,55762],{"class":60},[36,64541,52179],{"class":49},[36,64543,52410],{"class":60},[36,64545,2040],{"class":49},[36,64547,64548],{"class":38,"line":2528},[36,64549,2937],{"class":49},[36,64551,64552],{"class":38,"line":2533},[36,64553,194],{"emptyLinePlaceholder":193},[36,64555,64556,64558,64561],{"class":38,"line":3326},[36,64557,64487],{"class":2713},[36,64559,64560],{"class":52042}," h3",[36,64562,16316],{"class":49},[36,64564,64565,64567,64569,64571,64573],{"class":38,"line":3340},[36,64566,55664],{"class":60},[36,64568,52179],{"class":49},[36,64570,1680],{"class":60},[36,64572,52234],{"class":53},[36,64574,2040],{"class":49},[36,64576,64577,64579,64581,64584],{"class":38,"line":3348},[36,64578,63076],{"class":60},[36,64580,52179],{"class":49},[36,64582,64583],{"class":60},"normal",[36,64585,2040],{"class":49},[36,64587,64588,64590,64592,64594,64596],{"class":38,"line":3353},[36,64589,62742],{"class":60},[36,64591,52179],{"class":49},[36,64593,72],{"class":60},[36,64595,52234],{"class":53},[36,64597,2040],{"class":49},[36,64599,64600],{"class":38,"line":3359},[36,64601,2937],{"class":49},[36,64603,64604],{"class":38,"line":3365},[36,64605,194],{"emptyLinePlaceholder":193},[36,64607,64608,64610,64612],{"class":38,"line":3370},[36,64609,64487],{"class":2713},[36,64611,62034],{"class":52042},[36,64613,16316],{"class":49},[36,64615,64616,64618,64620,64622],{"class":38,"line":8695},[36,64617,55474],{"class":60},[36,64619,52179],{"class":49},[36,64621,55479],{"class":60},[36,64623,2040],{"class":49},[36,64625,64626,64628,64630,64632],{"class":38,"line":8719},[36,64627,55751],{"class":60},[36,64629,52179],{"class":49},[36,64631,52219],{"class":60},[36,64633,2040],{"class":49},[36,64635,64636,64638,64640,64642],{"class":38,"line":8724},[36,64637,55762],{"class":60},[36,64639,52179],{"class":49},[36,64641,52322],{"class":60},[36,64643,2040],{"class":49},[36,64645,64646],{"class":38,"line":8730},[36,64647,2937],{"class":49},[36,64649,64650],{"class":38,"line":8757},[36,64651,194],{"emptyLinePlaceholder":193},[36,64653,64654,64656,64658,64660],{"class":38,"line":8762},[36,64655,64487],{"class":2713},[36,64657,62034],{"class":52042},[36,64659,55817],{"class":52042},[36,64661,16316],{"class":49},[36,64663,64664,64666,64668,64670,64672,64674],{"class":38,"line":8768},[36,64665,55448],{"class":60},[36,64667,52179],{"class":49},[36,64669,643],{"class":60},[36,64671,9697],{"class":60},[36,64673,52234],{"class":53},[36,64675,2040],{"class":49},[36,64677,64678,64680,64682,64684,64686],{"class":38,"line":8780},[36,64679,55664],{"class":60},[36,64681,52179],{"class":49},[36,64683,1431],{"class":60},[36,64685,52234],{"class":53},[36,64687,2040],{"class":49},[36,64689,64690],{"class":38,"line":8792},[36,64691,2937],{"class":49},[36,64693,64694],{"class":38,"line":8804},[36,64695,194],{"emptyLinePlaceholder":193},[36,64697,64698,64700,64702,64704,64706],{"class":38,"line":10463},[36,64699,64487],{"class":2713},[36,64701,62034],{"class":52042},[36,64703,55817],{"class":52042},[36,64705,2148],{"class":52042},[36,64707,16316],{"class":49},[36,64709,64710,64713,64715,64717],{"class":38,"line":10488},[36,64711,64712],{"class":60},"      text-decoration",[36,64714,52179],{"class":49},[36,64716,55479],{"class":60},[36,64718,2040],{"class":49},[36,64720,64721,64723,64725,64727,64729,64731,64734],{"class":38,"line":10511},[36,64722,62974],{"class":60},[36,64724,52179],{"class":49},[36,64726,181],{"class":60},[36,64728,52234],{"class":53},[36,64730,52263],{"class":60},[36,64732,64733],{"class":60}," transparent",[36,64735,2040],{"class":49},[36,64737,64738,64740,64742,64744],{"class":38,"line":10535},[36,64739,58158],{"class":60},[36,64741,52179],{"class":49},[36,64743,63111],{"class":60},[36,64745,2040],{"class":49},[36,64747,64748],{"class":38,"line":10540},[36,64749,2937],{"class":49},[36,64751,64752],{"class":38,"line":10545},[36,64753,194],{"emptyLinePlaceholder":193},[36,64755,64756,64758,64760,64762,64764,64767],{"class":38,"line":10550},[36,64757,64487],{"class":2713},[36,64759,62034],{"class":52042},[36,64761,55817],{"class":52042},[36,64763,2148],{"class":52042},[36,64765,64766],{"class":2713},".active",[36,64768,16316],{"class":49},[36,64770,64771,64773,64775,64778],{"class":38,"line":10559},[36,64772,62533],{"class":60},[36,64774,52179],{"class":49},[36,64776,64777],{"class":60},"#e1251b",[36,64779,2040],{"class":49},[36,64781,64782,64784,64786,64788],{"class":38,"line":10564},[36,64783,58158],{"class":60},[36,64785,52179],{"class":49},[36,64787,64777],{"class":60},[36,64789,2040],{"class":49},[36,64791,64792],{"class":38,"line":10570},[36,64793,2937],{"class":49},[36,64795,64796],{"class":38,"line":10591},[36,64797,194],{"emptyLinePlaceholder":193},[36,64799,64800,64803],{"class":38,"line":10597},[36,64801,64802],{"class":2713},"    .tab-content",[36,64804,16316],{"class":49},[36,64806,64807,64809,64811,64813,64816,64818],{"class":38,"line":10611},[36,64808,55437],{"class":60},[36,64810,52179],{"class":49},[36,64812,643],{"class":60},[36,64814,64815],{"class":60}," 16",[36,64817,52234],{"class":53},[36,64819,2040],{"class":49},[36,64821,64822],{"class":38,"line":10617},[36,64823,2937],{"class":49},[36,64825,64826],{"class":38,"line":10644},[36,64827,194],{"emptyLinePlaceholder":193},[36,64829,64830,64832,64834],{"class":38,"line":10653},[36,64831,64802],{"class":2713},[36,64833,62916],{"class":2713},[36,64835,16316],{"class":49},[36,64837,64838,64840,64842,64844],{"class":38,"line":10659},[36,64839,55751],{"class":60},[36,64841,52179],{"class":49},[36,64843,55479],{"class":60},[36,64845,2040],{"class":49},[36,64847,64848],{"class":38,"line":10667},[36,64849,2937],{"class":49},[36,64851,64852],{"class":38,"line":10672},[36,64853,194],{"emptyLinePlaceholder":193},[36,64855,64856,64858,64861],{"class":38,"line":17348},[36,64857,64802],{"class":2713},[36,64859,64860],{"class":2713}," .item.active",[36,64862,16316],{"class":49},[36,64864,64865,64867,64869,64871],{"class":38,"line":17354},[36,64866,55751],{"class":60},[36,64868,52179],{"class":49},[36,64870,61611],{"class":60},[36,64872,2040],{"class":49},[36,64874,64875],{"class":38,"line":17377},[36,64876,2937],{"class":49},[36,64878,64879,64881,64883],{"class":38,"line":17383},[36,64880,53159],{"class":49},[36,64882,807],{"class":52042},[36,64884,52049],{"class":49},[36,64886,64887,64889,64891],{"class":38,"line":17406},[36,64888,52527],{"class":49},[36,64890,52076],{"class":52042},[36,64892,52049],{"class":49},[36,64894,64895],{"class":38,"line":17420},[36,64896,194],{"emptyLinePlaceholder":193},[36,64898,64899,64901,64903],{"class":38,"line":17440},[36,64900,1789],{"class":49},[36,64902,52542],{"class":52042},[36,64904,52049],{"class":49},[36,64906,64907,64909,64911,64913,64915,64918],{"class":38,"line":17446},[36,64908,52886],{"class":49},[36,64910,52353],{"class":52042},[36,64912,54228],{"class":2713},[36,64914,54],{"class":49},[36,64916,64917],{"class":998},"\"tab\"",[36,64919,52049],{"class":49},[36,64921,64922,64924,64926,64928,64930,64933],{"class":38,"line":17457},[36,64923,52083],{"class":49},[36,64925,52353],{"class":52042},[36,64927,54228],{"class":2713},[36,64929,54],{"class":49},[36,64931,64932],{"class":998},"\"tab-nav\"",[36,64934,52049],{"class":49},[36,64936,64937,64939,64941,64944,64946],{"class":38,"line":17480},[36,64938,55976],{"class":49},[36,64940,868],{"class":52042},[36,64942,64943],{"class":49},">每日特价\u003C\u002F",[36,64945,868],{"class":52042},[36,64947,52049],{"class":49},[36,64949,64950,64952,64954],{"class":38,"line":17502},[36,64951,55976],{"class":49},[36,64953,1886],{"class":52042},[36,64955,52049],{"class":49},[36,64957,64958,64960,64962,64964,64966,64968,64970,64972,64974,64976,64979,64982,64984,64986,64988],{"class":38,"line":17507},[36,64959,56044],{"class":49},[36,64961,854],{"class":52042},[36,64963,61794],{"class":49},[36,64965,50],{"class":52042},[36,64967,54228],{"class":2713},[36,64969,54],{"class":49},[36,64971,60448],{"class":998},[36,64973,61799],{"class":2713},[36,64975,54],{"class":49},[36,64977,64978],{"class":998},"\"javascript:;\"",[36,64980,64981],{"class":49},">精选\u003C\u002F",[36,64983,50],{"class":52042},[36,64985,56056],{"class":49},[36,64987,854],{"class":52042},[36,64989,52049],{"class":49},[36,64991,64992,64994,64996,64998,65000,65002,65004,65006,65009,65011,65013,65015],{"class":38,"line":17513},[36,64993,56044],{"class":49},[36,64995,854],{"class":52042},[36,64997,61794],{"class":49},[36,64999,50],{"class":52042},[36,65001,61799],{"class":2713},[36,65003,54],{"class":49},[36,65005,64978],{"class":998},[36,65007,65008],{"class":49},">美食\u003C\u002F",[36,65010,50],{"class":52042},[36,65012,56056],{"class":49},[36,65014,854],{"class":52042},[36,65016,52049],{"class":49},[36,65018,65019,65021,65023,65025,65027,65029,65031,65033,65036,65038,65040,65042],{"class":38,"line":17527},[36,65020,56044],{"class":49},[36,65022,854],{"class":52042},[36,65024,61794],{"class":49},[36,65026,50],{"class":52042},[36,65028,61799],{"class":2713},[36,65030,54],{"class":49},[36,65032,64978],{"class":998},[36,65034,65035],{"class":49},">百货\u003C\u002F",[36,65037,50],{"class":52042},[36,65039,56056],{"class":49},[36,65041,854],{"class":52042},[36,65043,52049],{"class":49},[36,65045,65046,65048,65050,65052,65054,65056,65058,65060,65063,65065,65067,65069],{"class":38,"line":17540},[36,65047,56044],{"class":49},[36,65049,854],{"class":52042},[36,65051,61794],{"class":49},[36,65053,50],{"class":52042},[36,65055,61799],{"class":2713},[36,65057,54],{"class":49},[36,65059,64978],{"class":998},[36,65061,65062],{"class":49},">个护\u003C\u002F",[36,65064,50],{"class":52042},[36,65066,56056],{"class":49},[36,65068,854],{"class":52042},[36,65070,52049],{"class":49},[36,65072,65073,65075,65077,65079,65081,65083,65085,65087,65090,65092,65094,65096],{"class":38,"line":17545},[36,65074,56044],{"class":49},[36,65076,854],{"class":52042},[36,65078,61794],{"class":49},[36,65080,50],{"class":52042},[36,65082,61799],{"class":2713},[36,65084,54],{"class":49},[36,65086,64978],{"class":998},[36,65088,65089],{"class":49},">预告\u003C\u002F",[36,65091,50],{"class":52042},[36,65093,56056],{"class":49},[36,65095,854],{"class":52042},[36,65097,52049],{"class":49},[36,65099,65100,65102,65104],{"class":38,"line":17559},[36,65101,56149],{"class":49},[36,65103,1886],{"class":52042},[36,65105,52049],{"class":49},[36,65107,65108,65110,65112],{"class":38,"line":17564},[36,65109,52518],{"class":49},[36,65111,52353],{"class":52042},[36,65113,52049],{"class":49},[36,65115,65116,65118,65120,65122,65124,65127],{"class":38,"line":17570},[36,65117,52083],{"class":49},[36,65119,52353],{"class":52042},[36,65121,54228],{"class":2713},[36,65123,54],{"class":49},[36,65125,65126],{"class":998},"\"tab-content\"",[36,65128,52049],{"class":49},[36,65130,65131,65133,65135,65137,65139,65142,65144,65146,65148,65150,65153,65155,65157,65159,65162,65164],{"class":38,"line":17575},[36,65132,55976],{"class":49},[36,65134,52353],{"class":52042},[36,65136,54228],{"class":2713},[36,65138,54],{"class":49},[36,65140,65141],{"class":998},"\"item active\"",[36,65143,61794],{"class":49},[36,65145,2212],{"class":52042},[36,65147,55981],{"class":2713},[36,65149,54],{"class":49},[36,65151,65152],{"class":998},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[36,65154,55989],{"class":2713},[36,65156,54],{"class":49},[36,65158,8399],{"class":998},[36,65160,65161],{"class":49}," \u002F>\u003C\u002F",[36,65163,52353],{"class":52042},[36,65165,52049],{"class":49},[36,65167,65168,65170,65172,65174,65176,65178,65180,65182,65184,65186,65189,65191,65193,65195,65197,65199],{"class":38,"line":17589},[36,65169,55976],{"class":49},[36,65171,52353],{"class":52042},[36,65173,54228],{"class":2713},[36,65175,54],{"class":49},[36,65177,63365],{"class":998},[36,65179,61794],{"class":49},[36,65181,2212],{"class":52042},[36,65183,55981],{"class":2713},[36,65185,54],{"class":49},[36,65187,65188],{"class":998},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[36,65190,55989],{"class":2713},[36,65192,54],{"class":49},[36,65194,8399],{"class":998},[36,65196,65161],{"class":49},[36,65198,52353],{"class":52042},[36,65200,52049],{"class":49},[36,65202,65203,65205,65207,65209,65211,65213,65215,65217,65219,65221,65224,65226,65228,65230,65232,65234],{"class":38,"line":17594},[36,65204,55976],{"class":49},[36,65206,52353],{"class":52042},[36,65208,54228],{"class":2713},[36,65210,54],{"class":49},[36,65212,63365],{"class":998},[36,65214,61794],{"class":49},[36,65216,2212],{"class":52042},[36,65218,55981],{"class":2713},[36,65220,54],{"class":49},[36,65222,65223],{"class":998},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[36,65225,55989],{"class":2713},[36,65227,54],{"class":49},[36,65229,8399],{"class":998},[36,65231,65161],{"class":49},[36,65233,52353],{"class":52042},[36,65235,52049],{"class":49},[36,65237,65238,65240,65242,65244,65246,65248,65250,65252,65254,65256,65259,65261,65263,65265,65267,65269],{"class":38,"line":17599},[36,65239,55976],{"class":49},[36,65241,52353],{"class":52042},[36,65243,54228],{"class":2713},[36,65245,54],{"class":49},[36,65247,63365],{"class":998},[36,65249,61794],{"class":49},[36,65251,2212],{"class":52042},[36,65253,55981],{"class":2713},[36,65255,54],{"class":49},[36,65257,65258],{"class":998},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[36,65260,55989],{"class":2713},[36,65262,54],{"class":49},[36,65264,8399],{"class":998},[36,65266,65161],{"class":49},[36,65268,52353],{"class":52042},[36,65270,52049],{"class":49},[36,65272,65273,65275,65277,65279,65281,65283,65285,65287,65289,65291,65294,65296,65298,65300,65302,65304],{"class":38,"line":17613},[36,65274,55976],{"class":49},[36,65276,52353],{"class":52042},[36,65278,54228],{"class":2713},[36,65280,54],{"class":49},[36,65282,63365],{"class":998},[36,65284,61794],{"class":49},[36,65286,2212],{"class":52042},[36,65288,55981],{"class":2713},[36,65290,54],{"class":49},[36,65292,65293],{"class":998},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[36,65295,55989],{"class":2713},[36,65297,54],{"class":49},[36,65299,8399],{"class":998},[36,65301,65161],{"class":49},[36,65303,52353],{"class":52042},[36,65305,52049],{"class":49},[36,65307,65308,65310,65312],{"class":38,"line":17625},[36,65309,52518],{"class":49},[36,65311,52353],{"class":52042},[36,65313,52049],{"class":49},[36,65315,65316,65318,65320],{"class":38,"line":17630},[36,65317,53159],{"class":49},[36,65319,52353],{"class":52042},[36,65321,52049],{"class":49},[36,65323,65324,65326,65328],{"class":38,"line":17643},[36,65325,52886],{"class":49},[36,65327,52555],{"class":52042},[36,65329,52049],{"class":49},[36,65331,65332],{"class":38,"line":17648},[36,65333,65334],{"class":42},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[36,65336,65337],{"class":38,"line":17653},[36,65338,65339],{"class":42},"    \u002F\u002F 1.1 获取 a 元素 \n",[36,65341,65342,65344,65347,65349,65351,65353,65355,65358],{"class":38,"line":17658},[36,65343,11966],{"class":53},[36,65345,65346],{"class":60}," as",[36,65348,14308],{"class":53},[36,65350,55138],{"class":49},[36,65352,56423],{"class":2713},[36,65354,901],{"class":49},[36,65356,65357],{"class":998},"'.tab-nav a'",[36,65359,75],{"class":49},[36,65361,65362],{"class":38,"line":17671},[36,65363,65364],{"class":42},"    \u002F\u002F console.log(as) \n",[36,65366,65367,65369,65371,65373,65375,65377,65379,65381,65383,65386,65388,65390,65392],{"class":38,"line":17676},[36,65368,3950],{"class":53},[36,65370,2408],{"class":49},[36,65372,52589],{"class":53},[36,65374,10185],{"class":49},[36,65376,54],{"class":53},[36,65378,4842],{"class":60},[36,65380,10192],{"class":49},[36,65382,1789],{"class":53},[36,65384,65385],{"class":49}," as.",[36,65387,52710],{"class":60},[36,65389,3963],{"class":49},[36,65391,3042],{"class":53},[36,65393,13186],{"class":49},[36,65395,65396],{"class":38,"line":33375},[36,65397,65398],{"class":42},"      \u002F\u002F console.log(as[i])\n",[36,65400,65401],{"class":38,"line":33381},[36,65402,65403],{"class":42},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[36,65405,65406,65409,65411,65413,65416,65418,65420],{"class":38,"line":33387},[36,65407,65408],{"class":49},"      as[i].",[36,65410,58555],{"class":2713},[36,65412,901],{"class":49},[36,65414,65415],{"class":998},"'mouseenter'",[36,65417,154],{"class":49},[36,65419,55191],{"class":53},[36,65421,55194],{"class":49},[36,65423,65424],{"class":38,"line":33393},[36,65425,65426],{"class":42},"        \u002F\u002F console.log('鼠标经过')\n",[36,65428,65429],{"class":38,"line":33399},[36,65430,65431],{"class":42},"        \u002F\u002F 排他思想  \n",[36,65433,65434],{"class":38,"line":33410},[36,65435,65436],{"class":42},"        \u002F\u002F 干掉别人 移除类active\n",[36,65438,65439,65441,65443,65445,65448,65450,65452,65454,65457],{"class":38,"line":33416},[36,65440,52667],{"class":49},[36,65442,55141],{"class":2713},[36,65444,901],{"class":49},[36,65446,65447],{"class":998},"'.tab-nav .active'",[36,65449,57745],{"class":49},[36,65451,57748],{"class":2713},[36,65453,901],{"class":49},[36,65455,65456],{"class":998},"'active'",[36,65458,75],{"class":49},[36,65460,65461],{"class":38,"line":33436},[36,65462,65463],{"class":42},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[36,65465,65466,65469,65472,65474,65476,65478],{"class":38,"line":33442},[36,65467,65468],{"class":60},"        this",[36,65470,65471],{"class":49},".classList.",[36,65473,6081],{"class":2713},[36,65475,901],{"class":49},[36,65477,65456],{"class":998},[36,65479,75],{"class":49},[36,65481,65482],{"class":38,"line":33453},[36,65483,194],{"emptyLinePlaceholder":193},[36,65485,65486],{"class":38,"line":33459},[36,65487,65488],{"class":42},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[36,65490,65491],{"class":38,"line":33465},[36,65492,65493],{"class":42},"        \u002F\u002F 干掉别人\n",[36,65495,65496,65498,65500,65502,65505,65507,65509,65511,65513],{"class":38,"line":33471},[36,65497,52667],{"class":49},[36,65499,55141],{"class":2713},[36,65501,901],{"class":49},[36,65503,65504],{"class":998},"'.tab-content .active'",[36,65506,57745],{"class":49},[36,65508,57748],{"class":2713},[36,65510,901],{"class":49},[36,65512,65456],{"class":998},[36,65514,75],{"class":49},[36,65516,65517],{"class":38,"line":33477},[36,65518,65519],{"class":42},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[36,65521,65522,65524,65526,65528,65531,65533,65535,65537,65539,65541,65543,65545,65547],{"class":38,"line":33483},[36,65523,52667],{"class":49},[36,65525,55141],{"class":2713},[36,65527,901],{"class":49},[36,65529,65530],{"class":998},"`.tab-content .item:nth-child(${",[36,65532,1326],{"class":49},[36,65534,46308],{"class":53},[36,65536,25863],{"class":60},[36,65538,57774],{"class":998},[36,65540,57745],{"class":49},[36,65542,6081],{"class":2713},[36,65544,901],{"class":49},[36,65546,65456],{"class":998},[36,65548,75],{"class":49},[36,65550,65551],{"class":38,"line":33489},[36,65552,194],{"emptyLinePlaceholder":193},[36,65554,65555],{"class":38,"line":33495},[36,65556,65557],{"class":49},"      })\n",[36,65559,65560],{"class":38,"line":33515},[36,65561,2937],{"class":49},[36,65563,65564,65566,65568],{"class":38,"line":33521},[36,65565,53159],{"class":49},[36,65567,52555],{"class":52042},[36,65569,52049],{"class":49},[36,65571,65572,65574,65576],{"class":38,"line":33537},[36,65573,52527],{"class":49},[36,65575,52542],{"class":52042},[36,65577,52049],{"class":49},[36,65579,65580],{"class":38,"line":33543},[36,65581,194],{"emptyLinePlaceholder":193},[36,65583,65584,65586,65588],{"class":38,"line":33557},[36,65585,52527],{"class":49},[36,65587,51377],{"class":52042},[36,65589,52049],{"class":49},[14,65591,65592],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,65594,65595],{},"在监听事件中，this指向的就是他的调用者",[14,65597,65598],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,65600,54462],{},[14,65602,65603],{},"(function () {",[14,65605,65606],{},"const list = document.querySelector('.xtx-elevator-list')",[14,65608,65609],{},"list.addEventListener('click', function (e) {",[14,65611,65612],{},"if (e.target.tagName === 'A') {",[14,65614,65615],{},"\u002F\u002F 排他思想",[14,65617,65618],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,65620,65621],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,65623,65624],{},"\u002F\u002F console.log(old);",[14,65626,65627],{},"\u002F\u002F 判断",[14,65629,65630],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,65632,65633],{},"if (old) old.classList.remove('active')",[14,65635,65636],{},"e.target.classList.add('active')",[14,65638,1825],{},[14,65640,53206],{},[14,65642,65643],{},"})();",[868,65645,65647],{"id":65646},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[26,65649,65651],{"className":51375,"code":65650,"language":51377,"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,65652,65653,65663,65667,65675,65679,65693,65707,65719,65727,65733,65743,65753,65757,65761,65768,65780,65791,65808,65821,65835,65845,65849,65853,65860,65871,65889,65899,65911,65915,65919,65926,65943,65954,65966,65970,65974,65981,65993,65997,66005,66013,66017,66025,66033,66041,66056,66100,66108,66121,66134,66147,66155,66163,66171,66199,66207,66219,66232,66245,66253,66261,66269,66295,66303,66316,66328,66341,66349,66357,66365,66391,66399,66412,66424,66437,66445,66453,66461,66466,66486,66491,66511,66516,66533,66538,66546,66551,66580,66593,66597,66601,66606,66610,66638,66643,66660,66665,66670,66675,66680,66706,66710,66714,66722,66730,66734],{"__ignoreMap":31},[36,65654,65655,65657,65659,65661],{"class":38,"line":39},[36,65656,52039],{"class":49},[36,65658,52043],{"class":52042},[36,65660,52046],{"class":2713},[36,65662,52049],{"class":49},[36,65664,65665],{"class":38,"line":46},[36,65666,194],{"emptyLinePlaceholder":193},[36,65668,65669,65671,65673],{"class":38,"line":78},[36,65670,1789],{"class":49},[36,65672,51377],{"class":52042},[36,65674,52049],{"class":49},[36,65676,65677],{"class":38,"line":125},[36,65678,194],{"emptyLinePlaceholder":193},[36,65680,65681,65683,65685,65687,65689,65691],{"class":38,"line":131},[36,65682,1789],{"class":49},[36,65684,52076],{"class":52042},[36,65686,52058],{"class":2713},[36,65688,54],{"class":49},[36,65690,52063],{"class":998},[36,65692,52049],{"class":49},[36,65694,65695,65697,65699,65701,65703,65705],{"class":38,"line":396},[36,65696,52886],{"class":49},[36,65698,52086],{"class":52042},[36,65700,52089],{"class":2713},[36,65702,54],{"class":49},[36,65704,52094],{"class":998},[36,65706,52049],{"class":49},[36,65708,65709,65711,65713,65715,65717],{"class":38,"line":407},[36,65710,52886],{"class":49},[36,65712,52149],{"class":52042},[36,65714,56056],{"class":49},[36,65716,52149],{"class":52042},[36,65718,52049],{"class":49},[36,65720,65721,65723,65725],{"class":38,"line":2061},[36,65722,52886],{"class":49},[36,65724,807],{"class":52042},[36,65726,52049],{"class":49},[36,65728,65729,65731],{"class":38,"line":2067},[36,65730,7150],{"class":52042},[36,65732,16316],{"class":49},[36,65734,65735,65737,65739,65741],{"class":38,"line":2079},[36,65736,55448],{"class":60},[36,65738,52179],{"class":49},[36,65740,643],{"class":60},[36,65742,2040],{"class":49},[36,65744,65745,65747,65749,65751],{"class":38,"line":2362},[36,65746,55437],{"class":60},[36,65748,52179],{"class":49},[36,65750,643],{"class":60},[36,65752,2040],{"class":49},[36,65754,65755],{"class":38,"line":2367},[36,65756,2937],{"class":49},[36,65758,65759],{"class":38,"line":2373},[36,65760,194],{"emptyLinePlaceholder":193},[36,65762,65763,65766],{"class":38,"line":2378},[36,65764,65765],{"class":52042},"    table",[36,65767,16316],{"class":49},[36,65769,65770,65773,65775,65778],{"class":38,"line":2392},[36,65771,65772],{"class":60},"      border-collapse",[36,65774,52179],{"class":49},[36,65776,65777],{"class":60},"collapse",[36,65779,2040],{"class":49},[36,65781,65782,65785,65787,65789],{"class":38,"line":2397},[36,65783,65784],{"class":60},"      border-spacing",[36,65786,52179],{"class":49},[36,65788,643],{"class":60},[36,65790,2040],{"class":49},[36,65792,65793,65795,65797,65799,65801,65803,65806],{"class":38,"line":2403},[36,65794,62719],{"class":60},[36,65796,52179],{"class":49},[36,65798,61],{"class":60},[36,65800,52234],{"class":53},[36,65802,52263],{"class":60},[36,65804,65805],{"class":60}," #c0c0c0",[36,65807,2040],{"class":49},[36,65809,65810,65812,65814,65817,65819],{"class":38,"line":2424},[36,65811,55513],{"class":60},[36,65813,52179],{"class":49},[36,65815,65816],{"class":60},"500",[36,65818,52234],{"class":53},[36,65820,2040],{"class":49},[36,65822,65823,65825,65827,65829,65831,65833],{"class":38,"line":2429},[36,65824,55448],{"class":60},[36,65826,52179],{"class":49},[36,65828,67],{"class":60},[36,65830,52234],{"class":53},[36,65832,52298],{"class":60},[36,65834,2040],{"class":49},[36,65836,65837,65839,65841,65843],{"class":38,"line":2443},[36,65838,58028],{"class":60},[36,65840,52179],{"class":49},[36,65842,52334],{"class":60},[36,65844,2040],{"class":49},[36,65846,65847],{"class":38,"line":2448},[36,65848,2937],{"class":49},[36,65850,65851],{"class":38,"line":2477},[36,65852,194],{"emptyLinePlaceholder":193},[36,65854,65855,65858],{"class":38,"line":2482},[36,65856,65857],{"class":52042},"    th",[36,65859,16316],{"class":49},[36,65861,65862,65864,65866,65869],{"class":38,"line":2499},[36,65863,55626],{"class":60},[36,65865,52179],{"class":49},[36,65867,65868],{"class":60},"#09c",[36,65870,2040],{"class":49},[36,65872,65873,65876,65878,65880,65882,65884,65887],{"class":38,"line":2504},[36,65874,65875],{"class":60},"      font",[36,65877,52179],{"class":49},[36,65879,63081],{"class":60},[36,65881,64815],{"class":60},[36,65883,52234],{"class":53},[36,65885,65886],{"class":998}," \"微软雅黑\"",[36,65888,2040],{"class":49},[36,65890,65891,65893,65895,65897],{"class":38,"line":2509},[36,65892,58158],{"class":60},[36,65894,52179],{"class":49},[36,65896,61584],{"class":60},[36,65898,2040],{"class":49},[36,65900,65901,65903,65905,65907,65909],{"class":38,"line":2514},[36,65902,55527],{"class":60},[36,65904,52179],{"class":49},[36,65906,1680],{"class":60},[36,65908,52234],{"class":53},[36,65910,2040],{"class":49},[36,65912,65913],{"class":38,"line":2528},[36,65914,2937],{"class":49},[36,65916,65917],{"class":38,"line":2533},[36,65918,194],{"emptyLinePlaceholder":193},[36,65920,65921,65924],{"class":38,"line":3326},[36,65922,65923],{"class":52042},"    td",[36,65925,16316],{"class":49},[36,65927,65928,65930,65932,65934,65936,65938,65941],{"class":38,"line":3340},[36,65929,62719],{"class":60},[36,65931,52179],{"class":49},[36,65933,61],{"class":60},[36,65935,52234],{"class":53},[36,65937,52263],{"class":60},[36,65939,65940],{"class":60}," #d0d0d0",[36,65942,2040],{"class":49},[36,65944,65945,65947,65949,65952],{"class":38,"line":3348},[36,65946,58158],{"class":60},[36,65948,52179],{"class":49},[36,65950,65951],{"class":60},"#404060",[36,65953,2040],{"class":49},[36,65955,65956,65958,65960,65962,65964],{"class":38,"line":3353},[36,65957,55437],{"class":60},[36,65959,52179],{"class":49},[36,65961,332],{"class":60},[36,65963,52234],{"class":53},[36,65965,2040],{"class":49},[36,65967,65968],{"class":38,"line":3359},[36,65969,2937],{"class":49},[36,65971,65972],{"class":38,"line":3365},[36,65973,194],{"emptyLinePlaceholder":193},[36,65975,65976,65979],{"class":38,"line":3370},[36,65977,65978],{"class":2713},"    .allCheck",[36,65980,16316],{"class":49},[36,65982,65983,65985,65987,65989,65991],{"class":38,"line":8695},[36,65984,55513],{"class":60},[36,65986,52179],{"class":49},[36,65988,1494],{"class":60},[36,65990,52234],{"class":53},[36,65992,2040],{"class":49},[36,65994,65995],{"class":38,"line":8719},[36,65996,2937],{"class":49},[36,65998,65999,66001,66003],{"class":38,"line":8724},[36,66000,53159],{"class":49},[36,66002,807],{"class":52042},[36,66004,52049],{"class":49},[36,66006,66007,66009,66011],{"class":38,"line":8730},[36,66008,52527],{"class":49},[36,66010,52076],{"class":52042},[36,66012,52049],{"class":49},[36,66014,66015],{"class":38,"line":8757},[36,66016,194],{"emptyLinePlaceholder":193},[36,66018,66019,66021,66023],{"class":38,"line":8762},[36,66020,1789],{"class":49},[36,66022,52542],{"class":52042},[36,66024,52049],{"class":49},[36,66026,66027,66029,66031],{"class":38,"line":8768},[36,66028,52886],{"class":49},[36,66030,1031],{"class":52042},[36,66032,52049],{"class":49},[36,66034,66035,66037,66039],{"class":38,"line":8780},[36,66036,52083],{"class":49},[36,66038,1037],{"class":52042},[36,66040,52049],{"class":49},[36,66042,66043,66045,66047,66049,66051,66054],{"class":38,"line":8792},[36,66044,55976],{"class":49},[36,66046,1040],{"class":52042},[36,66048,54228],{"class":2713},[36,66050,54],{"class":49},[36,66052,66053],{"class":998},"\"allCheck\"",[36,66055,52049],{"class":49},[36,66057,66058,66060,66062,66064,66066,66068,66070,66072,66074,66076,66078,66081,66084,66086,66088,66090,66093,66096,66098],{"class":38,"line":8804},[36,66059,56044],{"class":49},[36,66061,54563],{"class":52042},[36,66063,54566],{"class":2713},[36,66065,54],{"class":49},[36,66067,54571],{"class":998},[36,66069,15664],{"class":2713},[36,66071,54],{"class":49},[36,66073,8399],{"class":998},[36,66075,15703],{"class":2713},[36,66077,54],{"class":49},[36,66079,66080],{"class":998},"\"checkAll\"",[36,66082,66083],{"class":49},"> \u003C",[36,66085,36],{"class":52042},[36,66087,54228],{"class":2713},[36,66089,54],{"class":49},[36,66091,66092],{"class":998},"\"all\"",[36,66094,66095],{"class":49},">全选\u003C\u002F",[36,66097,36],{"class":52042},[36,66099,52049],{"class":49},[36,66101,66102,66104,66106],{"class":38,"line":10463},[36,66103,56149],{"class":49},[36,66105,1040],{"class":52042},[36,66107,52049],{"class":49},[36,66109,66110,66112,66114,66117,66119],{"class":38,"line":10488},[36,66111,55976],{"class":49},[36,66113,1040],{"class":52042},[36,66115,66116],{"class":49},">商品\u003C\u002F",[36,66118,1040],{"class":52042},[36,66120,52049],{"class":49},[36,66122,66123,66125,66127,66130,66132],{"class":38,"line":10511},[36,66124,55976],{"class":49},[36,66126,1040],{"class":52042},[36,66128,66129],{"class":49},">商家\u003C\u002F",[36,66131,1040],{"class":52042},[36,66133,52049],{"class":49},[36,66135,66136,66138,66140,66143,66145],{"class":38,"line":10535},[36,66137,55976],{"class":49},[36,66139,1040],{"class":52042},[36,66141,66142],{"class":49},">价格\u003C\u002F",[36,66144,1040],{"class":52042},[36,66146,52049],{"class":49},[36,66148,66149,66151,66153],{"class":38,"line":10540},[36,66150,52518],{"class":49},[36,66152,1037],{"class":52042},[36,66154,52049],{"class":49},[36,66156,66157,66159,66161],{"class":38,"line":10545},[36,66158,52083],{"class":49},[36,66160,1037],{"class":52042},[36,66162,52049],{"class":49},[36,66164,66165,66167,66169],{"class":38,"line":10550},[36,66166,55976],{"class":49},[36,66168,1083],{"class":52042},[36,66170,52049],{"class":49},[36,66172,66173,66175,66177,66179,66181,66183,66185,66187,66190,66192,66194,66197],{"class":38,"line":10559},[36,66174,56044],{"class":49},[36,66176,54563],{"class":52042},[36,66178,54566],{"class":2713},[36,66180,54],{"class":49},[36,66182,54571],{"class":998},[36,66184,15664],{"class":2713},[36,66186,54],{"class":49},[36,66188,66189],{"class":998},"\"check\"",[36,66191,54228],{"class":2713},[36,66193,54],{"class":49},[36,66195,66196],{"class":998},"\"ck\"",[36,66198,52049],{"class":49},[36,66200,66201,66203,66205],{"class":38,"line":10564},[36,66202,56149],{"class":49},[36,66204,1083],{"class":52042},[36,66206,52049],{"class":49},[36,66208,66209,66211,66213,66215,66217],{"class":38,"line":10570},[36,66210,55976],{"class":49},[36,66212,1083],{"class":52042},[36,66214,61915],{"class":49},[36,66216,1083],{"class":52042},[36,66218,52049],{"class":49},[36,66220,66221,66223,66225,66228,66230],{"class":38,"line":10591},[36,66222,55976],{"class":49},[36,66224,1083],{"class":52042},[36,66226,66227],{"class":49},">小米\u003C\u002F",[36,66229,1083],{"class":52042},[36,66231,52049],{"class":49},[36,66233,66234,66236,66238,66241,66243],{"class":38,"line":10597},[36,66235,55976],{"class":49},[36,66237,1083],{"class":52042},[36,66239,66240],{"class":49},">￥1999\u003C\u002F",[36,66242,1083],{"class":52042},[36,66244,52049],{"class":49},[36,66246,66247,66249,66251],{"class":38,"line":10611},[36,66248,52518],{"class":49},[36,66250,1037],{"class":52042},[36,66252,52049],{"class":49},[36,66254,66255,66257,66259],{"class":38,"line":10617},[36,66256,52083],{"class":49},[36,66258,1037],{"class":52042},[36,66260,52049],{"class":49},[36,66262,66263,66265,66267],{"class":38,"line":10644},[36,66264,55976],{"class":49},[36,66266,1083],{"class":52042},[36,66268,52049],{"class":49},[36,66270,66271,66273,66275,66277,66279,66281,66283,66285,66287,66289,66291,66293],{"class":38,"line":10653},[36,66272,56044],{"class":49},[36,66274,54563],{"class":52042},[36,66276,54566],{"class":2713},[36,66278,54],{"class":49},[36,66280,54571],{"class":998},[36,66282,15664],{"class":2713},[36,66284,54],{"class":49},[36,66286,66189],{"class":998},[36,66288,54228],{"class":2713},[36,66290,54],{"class":49},[36,66292,66196],{"class":998},[36,66294,52049],{"class":49},[36,66296,66297,66299,66301],{"class":38,"line":10659},[36,66298,56149],{"class":49},[36,66300,1083],{"class":52042},[36,66302,52049],{"class":49},[36,66304,66305,66307,66309,66312,66314],{"class":38,"line":10667},[36,66306,55976],{"class":49},[36,66308,1083],{"class":52042},[36,66310,66311],{"class":49},">小米净水器\u003C\u002F",[36,66313,1083],{"class":52042},[36,66315,52049],{"class":49},[36,66317,66318,66320,66322,66324,66326],{"class":38,"line":10672},[36,66319,55976],{"class":49},[36,66321,1083],{"class":52042},[36,66323,66227],{"class":49},[36,66325,1083],{"class":52042},[36,66327,52049],{"class":49},[36,66329,66330,66332,66334,66337,66339],{"class":38,"line":17348},[36,66331,55976],{"class":49},[36,66333,1083],{"class":52042},[36,66335,66336],{"class":49},">￥4999\u003C\u002F",[36,66338,1083],{"class":52042},[36,66340,52049],{"class":49},[36,66342,66343,66345,66347],{"class":38,"line":17354},[36,66344,52518],{"class":49},[36,66346,1037],{"class":52042},[36,66348,52049],{"class":49},[36,66350,66351,66353,66355],{"class":38,"line":17377},[36,66352,52083],{"class":49},[36,66354,1037],{"class":52042},[36,66356,52049],{"class":49},[36,66358,66359,66361,66363],{"class":38,"line":17383},[36,66360,55976],{"class":49},[36,66362,1083],{"class":52042},[36,66364,52049],{"class":49},[36,66366,66367,66369,66371,66373,66375,66377,66379,66381,66383,66385,66387,66389],{"class":38,"line":17406},[36,66368,56044],{"class":49},[36,66370,54563],{"class":52042},[36,66372,54566],{"class":2713},[36,66374,54],{"class":49},[36,66376,54571],{"class":998},[36,66378,15664],{"class":2713},[36,66380,54],{"class":49},[36,66382,66189],{"class":998},[36,66384,54228],{"class":2713},[36,66386,54],{"class":49},[36,66388,66196],{"class":998},[36,66390,52049],{"class":49},[36,66392,66393,66395,66397],{"class":38,"line":17420},[36,66394,56149],{"class":49},[36,66396,1083],{"class":52042},[36,66398,52049],{"class":49},[36,66400,66401,66403,66405,66408,66410],{"class":38,"line":17440},[36,66402,55976],{"class":49},[36,66404,1083],{"class":52042},[36,66406,66407],{"class":49},">小米电视\u003C\u002F",[36,66409,1083],{"class":52042},[36,66411,52049],{"class":49},[36,66413,66414,66416,66418,66420,66422],{"class":38,"line":17446},[36,66415,55976],{"class":49},[36,66417,1083],{"class":52042},[36,66419,66227],{"class":49},[36,66421,1083],{"class":52042},[36,66423,52049],{"class":49},[36,66425,66426,66428,66430,66433,66435],{"class":38,"line":17457},[36,66427,55976],{"class":49},[36,66429,1083],{"class":52042},[36,66431,66432],{"class":49},">￥5999\u003C\u002F",[36,66434,1083],{"class":52042},[36,66436,52049],{"class":49},[36,66438,66439,66441,66443],{"class":38,"line":17480},[36,66440,52518],{"class":49},[36,66442,1037],{"class":52042},[36,66444,52049],{"class":49},[36,66446,66447,66449,66451],{"class":38,"line":17502},[36,66448,53159],{"class":49},[36,66450,1031],{"class":52042},[36,66452,52049],{"class":49},[36,66454,66455,66457,66459],{"class":38,"line":17507},[36,66456,52886],{"class":49},[36,66458,52555],{"class":52042},[36,66460,52049],{"class":49},[36,66462,66463],{"class":38,"line":17513},[36,66464,66465],{"class":42},"    \u002F\u002F 1. 获取大复选框\n",[36,66467,66468,66470,66473,66475,66477,66479,66481,66484],{"class":38,"line":17527},[36,66469,11966],{"class":53},[36,66471,66472],{"class":60}," checkAll",[36,66474,14308],{"class":53},[36,66476,55138],{"class":49},[36,66478,55141],{"class":2713},[36,66480,901],{"class":49},[36,66482,66483],{"class":998},"'#checkAll'",[36,66485,75],{"class":49},[36,66487,66488],{"class":38,"line":17540},[36,66489,66490],{"class":42},"    \u002F\u002F 2. 获取所有的小复选框\n",[36,66492,66493,66495,66498,66500,66502,66504,66506,66509],{"class":38,"line":17545},[36,66494,11966],{"class":53},[36,66496,66497],{"class":60}," cks",[36,66499,14308],{"class":53},[36,66501,55138],{"class":49},[36,66503,56423],{"class":2713},[36,66505,901],{"class":49},[36,66507,66508],{"class":998},"'.ck'",[36,66510,75],{"class":49},[36,66512,66513],{"class":38,"line":17559},[36,66514,66515],{"class":42},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[36,66517,66518,66521,66523,66525,66527,66529,66531],{"class":38,"line":17564},[36,66519,66520],{"class":49},"    checkAll.",[36,66522,58555],{"class":2713},[36,66524,901],{"class":49},[36,66526,58560],{"class":998},[36,66528,154],{"class":49},[36,66530,55191],{"class":53},[36,66532,55194],{"class":49},[36,66534,66535],{"class":38,"line":17570},[36,66536,66537],{"class":42},"      \u002F\u002F 得到当前大复选框的选中状态\n",[36,66539,66540,66543],{"class":38,"line":17575},[36,66541,66542],{"class":42},"      \u002F\u002F console.log(checkAll.checked)",[36,66544,66545],{"class":42},"  \u002F\u002F 得到 是 true 或者是 false\n",[36,66547,66548],{"class":38,"line":17589},[36,66549,66550],{"class":42},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[36,66552,66553,66555,66557,66559,66561,66563,66565,66567,66569,66572,66574,66576,66578],{"class":38,"line":17594},[36,66554,53026],{"class":53},[36,66556,2408],{"class":49},[36,66558,52589],{"class":53},[36,66560,10185],{"class":49},[36,66562,54],{"class":53},[36,66564,4842],{"class":60},[36,66566,10192],{"class":49},[36,66568,1789],{"class":53},[36,66570,66571],{"class":49}," cks.",[36,66573,52710],{"class":60},[36,66575,3963],{"class":49},[36,66577,3042],{"class":53},[36,66579,13186],{"class":49},[36,66581,66582,66585,66587,66590],{"class":38,"line":17599},[36,66583,66584],{"class":49},"        cks[i].checked ",[36,66586,54],{"class":53},[36,66588,66589],{"class":60}," this",[36,66591,66592],{"class":49},".checked\n",[36,66594,66595],{"class":38,"line":17613},[36,66596,53140],{"class":49},[36,66598,66599],{"class":38,"line":17625},[36,66600,34203],{"class":49},[36,66602,66603],{"class":38,"line":17630},[36,66604,66605],{"class":42},"    \u002F\u002F 5. 小复选框控制大复选框\n",[36,66607,66608],{"class":38,"line":17643},[36,66609,194],{"emptyLinePlaceholder":193},[36,66611,66612,66614,66616,66618,66620,66622,66624,66626,66628,66630,66632,66634,66636],{"class":38,"line":17648},[36,66613,3950],{"class":53},[36,66615,2408],{"class":49},[36,66617,52589],{"class":53},[36,66619,10185],{"class":49},[36,66621,54],{"class":53},[36,66623,4842],{"class":60},[36,66625,10192],{"class":49},[36,66627,1789],{"class":53},[36,66629,66571],{"class":49},[36,66631,52710],{"class":60},[36,66633,3963],{"class":49},[36,66635,3042],{"class":53},[36,66637,13186],{"class":49},[36,66639,66640],{"class":38,"line":17653},[36,66641,66642],{"class":42},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[36,66644,66645,66648,66650,66652,66654,66656,66658],{"class":38,"line":17658},[36,66646,66647],{"class":49},"      cks[i].",[36,66649,58555],{"class":2713},[36,66651,901],{"class":49},[36,66653,58560],{"class":998},[36,66655,154],{"class":49},[36,66657,55191],{"class":53},[36,66659,55194],{"class":49},[36,66661,66662],{"class":38,"line":17671},[36,66663,66664],{"class":42},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[36,66666,66667],{"class":38,"line":17676},[36,66668,66669],{"class":42},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[36,66671,66672],{"class":38,"line":33375},[36,66673,66674],{"class":42},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[36,66676,66677],{"class":38,"line":33381},[36,66678,66679],{"class":42},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[36,66681,66682,66685,66687,66689,66691,66693,66696,66698,66700,66702,66704],{"class":38,"line":33387},[36,66683,66684],{"class":49},"        checkAll.checked ",[36,66686,54],{"class":53},[36,66688,55138],{"class":49},[36,66690,56423],{"class":2713},[36,66692,901],{"class":49},[36,66694,66695],{"class":998},"'.ck:checked'",[36,66697,31568],{"class":49},[36,66699,52710],{"class":60},[36,66701,58648],{"class":53},[36,66703,66571],{"class":49},[36,66705,56573],{"class":60},[36,66707,66708],{"class":38,"line":33393},[36,66709,65557],{"class":49},[36,66711,66712],{"class":38,"line":33399},[36,66713,2937],{"class":49},[36,66715,66716,66718,66720],{"class":38,"line":33410},[36,66717,53159],{"class":49},[36,66719,52555],{"class":52042},[36,66721,52049],{"class":49},[36,66723,66724,66726,66728],{"class":38,"line":33416},[36,66725,52527],{"class":49},[36,66727,52542],{"class":52042},[36,66729,52049],{"class":49},[36,66731,66732],{"class":38,"line":33436},[36,66733,194],{"emptyLinePlaceholder":193},[36,66735,66736,66738,66740],{"class":38,"line":33442},[36,66737,52527],{"class":49},[36,66739,51377],{"class":52042},[36,66741,52049],{"class":49},[14,66743,66744],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,66746,66747],{},"用好之间比较得到的布尔值！！！",[14,66749,66750,66751,66754,66755,2408,66758,1466,66760,66763],{},"在 JS 里访问的时候，",[33,66752,66753],{},"checkbox.checked"," 是一个 ",[1043,66756,66757],{},"布尔值",[33,66759,2112],{},[33,66761,66762],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66765,66766,66767,66770,66771],{},"HTML 的 ",[33,66768,66769],{},"checked=\"checked\""," 只是 ",[1043,66772,66773,66774,66777],{},"初始值；JS 的 ",[33,66775,66776],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66779,66780],{},"：checked是一个伪类选择器",[14,66782,66783],{},[2212,66784],{"alt":31,"src":66785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66787,66788,66791],{},[66789,66790],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66793,66794],{},[2212,66795],{"alt":31,"src":66796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[21,66798,66800],{"id":66799},"_33-dom事件进阶","3.3 DOM事件进阶",[868,66802,66804],{"id":66803},"_331-事件流","3.3.1 事件流",[14,66806,66807],{},[2212,66808],{"alt":31,"src":66809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22742,66811,66813],{"id":66812},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66815,66816],{},[2212,66817],{"alt":31,"src":66818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[26,66820,66822],{"className":51375,"code":66821,"language":51377,"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,66823,66824,66834,66848,66852,66860,66874,66894,66906,66914,66921,66933,66945,66955,66959,66963,66970,66982,66994,67004,67008,67016,67024,67028,67036,67051,67070,67078,67086,67106,67126,67142,67153,67161,67178,67189,67197,67214,67225,67233,67241,67249,67253],{"__ignoreMap":31},[36,66825,66826,66828,66830,66832],{"class":38,"line":39},[36,66827,52039],{"class":49},[36,66829,52043],{"class":52042},[36,66831,52046],{"class":2713},[36,66833,52049],{"class":49},[36,66835,66836,66838,66840,66842,66844,66846],{"class":38,"line":46},[36,66837,1789],{"class":49},[36,66839,51377],{"class":52042},[36,66841,52058],{"class":2713},[36,66843,54],{"class":49},[36,66845,52063],{"class":998},[36,66847,52049],{"class":49},[36,66849,66850],{"class":38,"line":78},[36,66851,194],{"emptyLinePlaceholder":193},[36,66853,66854,66856,66858],{"class":38,"line":125},[36,66855,1789],{"class":49},[36,66857,52076],{"class":52042},[36,66859,52049],{"class":49},[36,66861,66862,66864,66866,66868,66870,66872],{"class":38,"line":131},[36,66863,52886],{"class":49},[36,66865,52086],{"class":52042},[36,66867,52089],{"class":2713},[36,66869,54],{"class":49},[36,66871,52094],{"class":998},[36,66873,52049],{"class":49},[36,66875,66876,66878,66880,66882,66884,66886,66888,66890,66892],{"class":38,"line":396},[36,66877,52886],{"class":49},[36,66879,52086],{"class":52042},[36,66881,15664],{"class":2713},[36,66883,54],{"class":49},[36,66885,52133],{"class":998},[36,66887,52113],{"class":2713},[36,66889,54],{"class":49},[36,66891,52140],{"class":998},[36,66893,52049],{"class":49},[36,66895,66896,66898,66900,66902,66904],{"class":38,"line":407},[36,66897,52886],{"class":49},[36,66899,52149],{"class":52042},[36,66901,52152],{"class":49},[36,66903,52149],{"class":52042},[36,66905,52049],{"class":49},[36,66907,66908,66910,66912],{"class":38,"line":2061},[36,66909,52886],{"class":49},[36,66911,807],{"class":52042},[36,66913,52049],{"class":49},[36,66915,66916,66919],{"class":38,"line":2067},[36,66917,66918],{"class":2713},"    .father",[36,66920,16316],{"class":49},[36,66922,66923,66925,66927,66929,66931],{"class":38,"line":2079},[36,66924,55513],{"class":60},[36,66926,52179],{"class":49},[36,66928,65816],{"class":60},[36,66930,52234],{"class":53},[36,66932,2040],{"class":49},[36,66934,66935,66937,66939,66941,66943],{"class":38,"line":2362},[36,66936,55527],{"class":60},[36,66938,52179],{"class":49},[36,66940,65816],{"class":60},[36,66942,52234],{"class":53},[36,66944,2040],{"class":49},[36,66946,66947,66949,66951,66953],{"class":38,"line":2367},[36,66948,55626],{"class":60},[36,66950,52179],{"class":49},[36,66952,52387],{"class":60},[36,66954,2040],{"class":49},[36,66956,66957],{"class":38,"line":2373},[36,66958,2937],{"class":49},[36,66960,66961],{"class":38,"line":2378},[36,66962,194],{"emptyLinePlaceholder":193},[36,66964,66965,66968],{"class":38,"line":2392},[36,66966,66967],{"class":2713},"    .son",[36,66969,16316],{"class":49},[36,66971,66972,66974,66976,66978,66980],{"class":38,"line":2397},[36,66973,55513],{"class":60},[36,66975,52179],{"class":49},[36,66977,2472],{"class":60},[36,66979,52234],{"class":53},[36,66981,2040],{"class":49},[36,66983,66984,66986,66988,66990,66992],{"class":38,"line":2403},[36,66985,55527],{"class":60},[36,66987,52179],{"class":49},[36,66989,2472],{"class":60},[36,66991,52234],{"class":53},[36,66993,2040],{"class":49},[36,66995,66996,66998,67000,67002],{"class":38,"line":2424},[36,66997,55626],{"class":60},[36,66999,52179],{"class":49},[36,67001,55631],{"class":60},[36,67003,2040],{"class":49},[36,67005,67006],{"class":38,"line":2429},[36,67007,2937],{"class":49},[36,67009,67010,67012,67014],{"class":38,"line":2443},[36,67011,53159],{"class":49},[36,67013,807],{"class":52042},[36,67015,52049],{"class":49},[36,67017,67018,67020,67022],{"class":38,"line":2448},[36,67019,52527],{"class":49},[36,67021,52076],{"class":52042},[36,67023,52049],{"class":49},[36,67025,67026],{"class":38,"line":2477},[36,67027,194],{"emptyLinePlaceholder":193},[36,67029,67030,67032,67034],{"class":38,"line":2482},[36,67031,1789],{"class":49},[36,67033,52542],{"class":52042},[36,67035,52049],{"class":49},[36,67037,67038,67040,67042,67044,67046,67049],{"class":38,"line":2499},[36,67039,52886],{"class":49},[36,67041,52353],{"class":52042},[36,67043,54228],{"class":2713},[36,67045,54],{"class":49},[36,67047,67048],{"class":998},"\"father\"",[36,67050,52049],{"class":49},[36,67052,67053,67055,67057,67059,67061,67064,67066,67068],{"class":38,"line":2504},[36,67054,52083],{"class":49},[36,67056,52353],{"class":52042},[36,67058,54228],{"class":2713},[36,67060,54],{"class":49},[36,67062,67063],{"class":998},"\"son\"",[36,67065,56056],{"class":49},[36,67067,52353],{"class":52042},[36,67069,52049],{"class":49},[36,67071,67072,67074,67076],{"class":38,"line":2509},[36,67073,53159],{"class":49},[36,67075,52353],{"class":52042},[36,67077,52049],{"class":49},[36,67079,67080,67082,67084],{"class":38,"line":2514},[36,67081,52886],{"class":49},[36,67083,52555],{"class":52042},[36,67085,52049],{"class":49},[36,67087,67088,67090,67093,67095,67097,67099,67101,67104],{"class":38,"line":2528},[36,67089,11966],{"class":53},[36,67091,67092],{"class":60}," fa",[36,67094,14308],{"class":53},[36,67096,55138],{"class":49},[36,67098,55141],{"class":2713},[36,67100,901],{"class":49},[36,67102,67103],{"class":998},"'.father'",[36,67105,75],{"class":49},[36,67107,67108,67110,67113,67115,67117,67119,67121,67124],{"class":38,"line":2533},[36,67109,11966],{"class":53},[36,67111,67112],{"class":60}," son",[36,67114,14308],{"class":53},[36,67116,55138],{"class":49},[36,67118,55141],{"class":2713},[36,67120,901],{"class":49},[36,67122,67123],{"class":998},"'.son'",[36,67125,75],{"class":49},[36,67127,67128,67130,67132,67134,67136,67138,67140],{"class":38,"line":3326},[36,67129,53149],{"class":49},[36,67131,58555],{"class":2713},[36,67133,901],{"class":49},[36,67135,58560],{"class":998},[36,67137,154],{"class":49},[36,67139,55191],{"class":53},[36,67141,55194],{"class":49},[36,67143,67144,67146,67148,67151],{"class":38,"line":3340},[36,67145,59667],{"class":2713},[36,67147,901],{"class":49},[36,67149,67150],{"class":998},"'woshiu1'",[36,67152,75],{"class":49},[36,67154,67155,67157,67159],{"class":38,"line":3348},[36,67156,55277],{"class":49},[36,67158,2112],{"class":60},[36,67160,75],{"class":49},[36,67162,67163,67166,67168,67170,67172,67174,67176],{"class":38,"line":3353},[36,67164,67165],{"class":49},"    fa.",[36,67167,58555],{"class":2713},[36,67169,901],{"class":49},[36,67171,58560],{"class":998},[36,67173,154],{"class":49},[36,67175,55191],{"class":53},[36,67177,55194],{"class":49},[36,67179,67180,67182,67184,67187],{"class":38,"line":3359},[36,67181,59667],{"class":2713},[36,67183,901],{"class":49},[36,67185,67186],{"class":998},"'1'",[36,67188,75],{"class":49},[36,67190,67191,67193,67195],{"class":38,"line":3365},[36,67192,55277],{"class":49},[36,67194,2112],{"class":60},[36,67196,75],{"class":49},[36,67198,67199,67202,67204,67206,67208,67210,67212],{"class":38,"line":3370},[36,67200,67201],{"class":49},"    son.",[36,67203,58555],{"class":2713},[36,67205,901],{"class":49},[36,67207,58560],{"class":998},[36,67209,154],{"class":49},[36,67211,55191],{"class":53},[36,67213,55194],{"class":49},[36,67215,67216,67218,67220,67223],{"class":38,"line":8695},[36,67217,59667],{"class":2713},[36,67219,901],{"class":49},[36,67221,67222],{"class":998},"'2'",[36,67224,75],{"class":49},[36,67226,67227,67229,67231],{"class":38,"line":8719},[36,67228,55277],{"class":49},[36,67230,2112],{"class":60},[36,67232,75],{"class":49},[36,67234,67235,67237,67239],{"class":38,"line":8724},[36,67236,53159],{"class":49},[36,67238,52555],{"class":52042},[36,67240,52049],{"class":49},[36,67242,67243,67245,67247],{"class":38,"line":8730},[36,67244,52527],{"class":49},[36,67246,52542],{"class":52042},[36,67248,52049],{"class":49},[36,67250,67251],{"class":38,"line":8757},[36,67252,194],{"emptyLinePlaceholder":193},[36,67254,67255,67257,67259],{"class":38,"line":8762},[36,67256,52527],{"class":49},[36,67258,51377],{"class":52042},[36,67260,52049],{"class":49},[14,67262,67263],{},[2212,67264],{"alt":31,"src":67265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,67267,67268],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22742,67270,67272],{"id":67271},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,67274,67275],{},[2212,67276],{"alt":31,"src":67277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,67279,67280],{},"反着来",[14,67282,67283],{},"注意是同名事件，比如都是‘click’",[22742,67285,67287],{"id":67286},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,67289,67290],{},[2212,67291],{"alt":31,"src":67292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22742,67294,67296],{"id":67295},"_3314-解绑事件","3.3.1.4 解绑事件",[14,67298,67299],{},[2212,67300],{"alt":31,"src":67301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,67303,67304],{},[2212,67305],{"alt":31,"src":67306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22742,67308,67310],{"id":67309},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[851,67312,67313],{},[854,67314,67315],{},"事件类型的区别",[14,67317,67318],{},[2212,67319],{"alt":31,"src":67320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,67322,67323],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[851,67325,67326],{"start":46},[854,67327,67328],{},"注册事件的区别",[14,67330,67331],{},[2212,67332],{"alt":31,"src":67333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22742,67335,67337],{"id":67336},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,67339,67340],{},[2212,67341],{"alt":31,"src":67342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,67344,67345],{},[2212,67346],{"alt":31,"src":67347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[26,67349,67351],{"className":53809,"code":67350,"language":53811,"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,67352,67353,67361,67378,67401,67409,67414,67419,67424,67428,67436,67444],{"__ignoreMap":31},[36,67354,67355,67357,67359],{"class":38,"line":39},[36,67356,1789],{"class":49},[36,67358,52542],{"class":52042},[36,67360,52049],{"class":49},[36,67362,67363,67365,67368,67371,67373,67376],{"class":38,"line":46},[36,67364,52886],{"class":49},[36,67366,67367],{"class":52042},"form",[36,67369,67370],{"class":2713}," action",[36,67372,54],{"class":49},[36,67374,67375],{"class":998},"\"http:\u002F\u002Fwww.itcast.cn\"",[36,67377,52049],{"class":49},[36,67379,67380,67382,67384,67386,67388,67391,67394,67396,67399],{"class":38,"line":78},[36,67381,52083],{"class":49},[36,67383,54563],{"class":52042},[36,67385,54566],{"class":2713},[36,67387,54],{"class":49},[36,67389,67390],{"class":998},"\"submit\"",[36,67392,67393],{"class":2713}," value",[36,67395,54],{"class":49},[36,67397,67398],{"class":998},"\"免费注册\"",[36,67400,52049],{"class":49},[36,67402,67403,67405,67407],{"class":38,"line":125},[36,67404,52083],{"class":49},[36,67406,52555],{"class":52042},[36,67408,52049],{"class":49},[36,67410,67411],{"class":38,"line":131},[36,67412,67413],{"class":49},"      const form = document.querySelector('form')\n",[36,67415,67416],{"class":38,"line":396},[36,67417,67418],{"class":49},"      form.addEventListener('submit', function (e) {\n",[36,67420,67421],{"class":38,"line":407},[36,67422,67423],{"class":49},"        e.preventDefault()\n",[36,67425,67426],{"class":38,"line":2061},[36,67427,65557],{"class":49},[36,67429,67430,67432,67434],{"class":38,"line":2067},[36,67431,52518],{"class":49},[36,67433,52555],{"class":52042},[36,67435,52049],{"class":49},[36,67437,67438,67440,67442],{"class":38,"line":2079},[36,67439,53159],{"class":49},[36,67441,67367],{"class":52042},[36,67443,52049],{"class":49},[36,67445,67446,67448,67450],{"class":38,"line":2362},[36,67447,52527],{"class":49},[36,67449,52542],{"class":52042},[36,67451,52049],{"class":49},[14,67453,67454],{},"点击不在跳转！！！",[868,67456,67458],{"id":67457},"_332-事件委托","3.3.2 事件委托",[14,67460,67461],{},[2212,67462],{"alt":31,"src":67463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[26,67465,67467],{"className":51375,"code":67466,"language":51377,"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,67468,67469,67479,67493,67497,67505,67519,67539,67551,67559,67563,67571,67579,67591,67603,67615,67627,67639,67652,67660,67668,67673,67692,67713,67718,67723,67728,67733,67742,67746,67756,67760,67765,67770,67784,67794,67798,67802,67810,67818,67822],{"__ignoreMap":31},[36,67470,67471,67473,67475,67477],{"class":38,"line":39},[36,67472,52039],{"class":49},[36,67474,52043],{"class":52042},[36,67476,52046],{"class":2713},[36,67478,52049],{"class":49},[36,67480,67481,67483,67485,67487,67489,67491],{"class":38,"line":46},[36,67482,1789],{"class":49},[36,67484,51377],{"class":52042},[36,67486,52058],{"class":2713},[36,67488,54],{"class":49},[36,67490,52063],{"class":998},[36,67492,52049],{"class":49},[36,67494,67495],{"class":38,"line":78},[36,67496,194],{"emptyLinePlaceholder":193},[36,67498,67499,67501,67503],{"class":38,"line":125},[36,67500,1789],{"class":49},[36,67502,52076],{"class":52042},[36,67504,52049],{"class":49},[36,67506,67507,67509,67511,67513,67515,67517],{"class":38,"line":131},[36,67508,52886],{"class":49},[36,67510,52086],{"class":52042},[36,67512,52089],{"class":2713},[36,67514,54],{"class":49},[36,67516,52094],{"class":998},[36,67518,52049],{"class":49},[36,67520,67521,67523,67525,67527,67529,67531,67533,67535,67537],{"class":38,"line":396},[36,67522,52886],{"class":49},[36,67524,52086],{"class":52042},[36,67526,15664],{"class":2713},[36,67528,54],{"class":49},[36,67530,52133],{"class":998},[36,67532,52113],{"class":2713},[36,67534,54],{"class":49},[36,67536,52140],{"class":998},[36,67538,52049],{"class":49},[36,67540,67541,67543,67545,67547,67549],{"class":38,"line":407},[36,67542,52886],{"class":49},[36,67544,52149],{"class":52042},[36,67546,52152],{"class":49},[36,67548,52149],{"class":52042},[36,67550,52049],{"class":49},[36,67552,67553,67555,67557],{"class":38,"line":2061},[36,67554,52527],{"class":49},[36,67556,52076],{"class":52042},[36,67558,52049],{"class":49},[36,67560,67561],{"class":38,"line":2067},[36,67562,194],{"emptyLinePlaceholder":193},[36,67564,67565,67567,67569],{"class":38,"line":2079},[36,67566,1789],{"class":49},[36,67568,52542],{"class":52042},[36,67570,52049],{"class":49},[36,67572,67573,67575,67577],{"class":38,"line":2362},[36,67574,52886],{"class":49},[36,67576,1886],{"class":52042},[36,67578,52049],{"class":49},[36,67580,67581,67583,67585,67587,67589],{"class":38,"line":2367},[36,67582,52083],{"class":49},[36,67584,854],{"class":52042},[36,67586,54708],{"class":49},[36,67588,854],{"class":52042},[36,67590,52049],{"class":49},[36,67592,67593,67595,67597,67599,67601],{"class":38,"line":2373},[36,67594,52083],{"class":49},[36,67596,854],{"class":52042},[36,67598,54727],{"class":49},[36,67600,854],{"class":52042},[36,67602,52049],{"class":49},[36,67604,67605,67607,67609,67611,67613],{"class":38,"line":2378},[36,67606,52083],{"class":49},[36,67608,854],{"class":52042},[36,67610,54746],{"class":49},[36,67612,854],{"class":52042},[36,67614,52049],{"class":49},[36,67616,67617,67619,67621,67623,67625],{"class":38,"line":2392},[36,67618,52083],{"class":49},[36,67620,854],{"class":52042},[36,67622,54765],{"class":49},[36,67624,854],{"class":52042},[36,67626,52049],{"class":49},[36,67628,67629,67631,67633,67635,67637],{"class":38,"line":2397},[36,67630,52083],{"class":49},[36,67632,854],{"class":52042},[36,67634,54784],{"class":49},[36,67636,854],{"class":52042},[36,67638,52049],{"class":49},[36,67640,67641,67643,67645,67648,67650],{"class":38,"line":2403},[36,67642,52083],{"class":49},[36,67644,14],{"class":52042},[36,67646,67647],{"class":49},">我不需要变色\u003C\u002F",[36,67649,14],{"class":52042},[36,67651,52049],{"class":49},[36,67653,67654,67656,67658],{"class":38,"line":2424},[36,67655,53159],{"class":49},[36,67657,1886],{"class":52042},[36,67659,52049],{"class":49},[36,67661,67662,67664,67666],{"class":38,"line":2429},[36,67663,52886],{"class":49},[36,67665,52555],{"class":52042},[36,67667,52049],{"class":49},[36,67669,67670],{"class":38,"line":2443},[36,67671,67672],{"class":42},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[36,67674,67675,67677,67679,67681,67683,67685,67687,67690],{"class":38,"line":2448},[36,67676,11966],{"class":53},[36,67678,62034],{"class":60},[36,67680,14308],{"class":53},[36,67682,55138],{"class":49},[36,67684,55141],{"class":2713},[36,67686,901],{"class":49},[36,67688,67689],{"class":998},"'ul'",[36,67691,75],{"class":49},[36,67693,67694,67697,67699,67701,67703,67705,67707,67709,67711],{"class":38,"line":2477},[36,67695,67696],{"class":49},"    ul.",[36,67698,58555],{"class":2713},[36,67700,901],{"class":49},[36,67702,58560],{"class":998},[36,67704,154],{"class":49},[36,67706,55191],{"class":53},[36,67708,2408],{"class":49},[36,67710,969],{"class":416},[36,67712,13186],{"class":49},[36,67714,67715],{"class":38,"line":2482},[36,67716,67717],{"class":42},"      \u002F\u002F alert(1)\n",[36,67719,67720],{"class":38,"line":2499},[36,67721,67722],{"class":42},"      \u002F\u002F e.target就是我们点击的对象\n",[36,67724,67725],{"class":38,"line":2504},[36,67726,67727],{"class":42},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[36,67729,67730],{"class":38,"line":2509},[36,67731,67732],{"class":42},"      \u002F\u002F e.target.style.color = 'red'\n",[36,67734,67735,67737,67739],{"class":38,"line":2514},[36,67736,58986],{"class":49},[36,67738,58989],{"class":2713},[36,67740,67741],{"class":49},"(e)\n",[36,67743,67744],{"class":38,"line":2528},[36,67745,194],{"emptyLinePlaceholder":193},[36,67747,67748,67750,67753],{"class":38,"line":2533},[36,67749,58986],{"class":49},[36,67751,67752],{"class":2713},"dir",[36,67754,67755],{"class":49},"(e.target)\n",[36,67757,67758],{"class":38,"line":3326},[36,67759,194],{"emptyLinePlaceholder":193},[36,67761,67762],{"class":38,"line":3340},[36,67763,67764],{"class":42},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[36,67766,67767],{"class":38,"line":3348},[36,67768,67769],{"class":42},"      \u002F\u002F 通过tagName来进行判断\n",[36,67771,67772,67774,67777,67779,67782],{"class":38,"line":3353},[36,67773,55222],{"class":53},[36,67775,67776],{"class":49}," (e.target.tagName ",[36,67778,55228],{"class":53},[36,67780,67781],{"class":998}," 'LI'",[36,67783,13186],{"class":49},[36,67785,67786,67789,67791],{"class":38,"line":3359},[36,67787,67788],{"class":49},"        e.target.style.color ",[36,67790,54],{"class":53},[36,67792,67793],{"class":998}," 'red'\n",[36,67795,67796],{"class":38,"line":3365},[36,67797,53140],{"class":49},[36,67799,67800],{"class":38,"line":3370},[36,67801,34203],{"class":49},[36,67803,67804,67806,67808],{"class":38,"line":8695},[36,67805,53159],{"class":49},[36,67807,52555],{"class":52042},[36,67809,52049],{"class":49},[36,67811,67812,67814,67816],{"class":38,"line":8719},[36,67813,52527],{"class":49},[36,67815,52542],{"class":52042},[36,67817,52049],{"class":49},[36,67819,67820],{"class":38,"line":8724},[36,67821,194],{"emptyLinePlaceholder":193},[36,67823,67824,67826,67828],{"class":38,"line":8730},[36,67825,52527],{"class":49},[36,67827,51377],{"class":52042},[36,67829,52049],{"class":49},[14,67831,67832],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67834,67835],{},"if(e.target.ragName==='P') {}",[14,67837,67838],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67840,67841],{},"通过事件委托的方式实现tab栏切换改造：",[14,67843,67844],{},"一定要记住自定义属性！！！！！！",[14,67846,67847],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67849,67850],{},"id是自定义的属性名",[14,67852,67853],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[26,67855,67857],{"className":51375,"code":67856,"language":51377,"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,67858,67859,67869,67883,67887,67895,67909,67929,67949,67961,67969,67975,67985,67995,67999,68003,68009,68021,68033,68045,68061,68065,68069,68075,68087,68099,68111,68121,68131,68135,68139,68147,68159,68169,68181,68185,68189,68197,68207,68217,68227,68231,68235,68245,68259,68271,68275,68279,68291,68301,68317,68327,68331,68335,68349,68359,68369,68373,68377,68383,68397,68401,68405,68413,68423,68427,68431,68440,68450,68454,68462,68470,68474,68482,68496,68510,68522,68530,68569,68601,68633,68665,68697,68705,68713,68727,68761,68795,68829,68863,68897,68905,68913,68921,68926,68931,68950,68955,68975,68983,68988,69001,69022,69035,69039,69044,69049,69062,69082,69110,69114,69118,69122,69130,69138,69142],{"__ignoreMap":31},[36,67860,67861,67863,67865,67867],{"class":38,"line":39},[36,67862,52039],{"class":49},[36,67864,52043],{"class":52042},[36,67866,52046],{"class":2713},[36,67868,52049],{"class":49},[36,67870,67871,67873,67875,67877,67879,67881],{"class":38,"line":46},[36,67872,1789],{"class":49},[36,67874,51377],{"class":52042},[36,67876,52058],{"class":2713},[36,67878,54],{"class":49},[36,67880,52063],{"class":998},[36,67882,52049],{"class":49},[36,67884,67885],{"class":38,"line":78},[36,67886,194],{"emptyLinePlaceholder":193},[36,67888,67889,67891,67893],{"class":38,"line":125},[36,67890,1789],{"class":49},[36,67892,52076],{"class":52042},[36,67894,52049],{"class":49},[36,67896,67897,67899,67901,67903,67905,67907],{"class":38,"line":131},[36,67898,52886],{"class":49},[36,67900,52086],{"class":52042},[36,67902,52089],{"class":2713},[36,67904,54],{"class":49},[36,67906,52094],{"class":998},[36,67908,59869],{"class":49},[36,67910,67911,67913,67915,67917,67919,67921,67923,67925,67927],{"class":38,"line":396},[36,67912,52886],{"class":49},[36,67914,52086],{"class":52042},[36,67916,52105],{"class":2713},[36,67918,54],{"class":49},[36,67920,52110],{"class":998},[36,67922,52113],{"class":2713},[36,67924,54],{"class":49},[36,67926,52118],{"class":998},[36,67928,59869],{"class":49},[36,67930,67931,67933,67935,67937,67939,67941,67943,67945,67947],{"class":38,"line":407},[36,67932,52886],{"class":49},[36,67934,52086],{"class":52042},[36,67936,15664],{"class":2713},[36,67938,54],{"class":49},[36,67940,52133],{"class":998},[36,67942,52113],{"class":2713},[36,67944,54],{"class":49},[36,67946,52140],{"class":998},[36,67948,59869],{"class":49},[36,67950,67951,67953,67955,67957,67959],{"class":38,"line":2061},[36,67952,52886],{"class":49},[36,67954,52149],{"class":52042},[36,67956,64367],{"class":49},[36,67958,52149],{"class":52042},[36,67960,52049],{"class":49},[36,67962,67963,67965,67967],{"class":38,"line":2067},[36,67964,52886],{"class":49},[36,67966,807],{"class":52042},[36,67968,52049],{"class":49},[36,67970,67971,67973],{"class":38,"line":2079},[36,67972,7150],{"class":52042},[36,67974,16316],{"class":49},[36,67976,67977,67979,67981,67983],{"class":38,"line":2362},[36,67978,55448],{"class":60},[36,67980,52179],{"class":49},[36,67982,643],{"class":60},[36,67984,2040],{"class":49},[36,67986,67987,67989,67991,67993],{"class":38,"line":2367},[36,67988,55437],{"class":60},[36,67990,52179],{"class":49},[36,67992,643],{"class":60},[36,67994,2040],{"class":49},[36,67996,67997],{"class":38,"line":2373},[36,67998,2937],{"class":49},[36,68000,68001],{"class":38,"line":2378},[36,68002,194],{"emptyLinePlaceholder":193},[36,68004,68005,68007],{"class":38,"line":2392},[36,68006,64418],{"class":2713},[36,68008,16316],{"class":49},[36,68010,68011,68013,68015,68017,68019],{"class":38,"line":2397},[36,68012,55513],{"class":60},[36,68014,52179],{"class":49},[36,68016,64429],{"class":60},[36,68018,52234],{"class":53},[36,68020,2040],{"class":49},[36,68022,68023,68025,68027,68029,68031],{"class":38,"line":2403},[36,68024,55527],{"class":60},[36,68026,52179],{"class":49},[36,68028,64442],{"class":60},[36,68030,52234],{"class":53},[36,68032,2040],{"class":49},[36,68034,68035,68037,68039,68041,68043],{"class":38,"line":2424},[36,68036,55448],{"class":60},[36,68038,52179],{"class":49},[36,68040,72],{"class":60},[36,68042,52234],{"class":53},[36,68044,2040],{"class":49},[36,68046,68047,68049,68051,68053,68055,68057,68059],{"class":38,"line":2429},[36,68048,62719],{"class":60},[36,68050,52179],{"class":49},[36,68052,61],{"class":60},[36,68054,52234],{"class":53},[36,68056,52263],{"class":60},[36,68058,62986],{"class":60},[36,68060,2040],{"class":49},[36,68062,68063],{"class":38,"line":2443},[36,68064,2937],{"class":49},[36,68066,68067],{"class":38,"line":2448},[36,68068,194],{"emptyLinePlaceholder":193},[36,68070,68071,68073],{"class":38,"line":2477},[36,68072,64487],{"class":2713},[36,68074,16316],{"class":49},[36,68076,68077,68079,68081,68083,68085],{"class":38,"line":2482},[36,68078,55513],{"class":60},[36,68080,52179],{"class":49},[36,68082,67],{"class":60},[36,68084,1214],{"class":53},[36,68086,2040],{"class":49},[36,68088,68089,68091,68093,68095,68097],{"class":38,"line":2499},[36,68090,55527],{"class":60},[36,68092,52179],{"class":49},[36,68094,1786],{"class":60},[36,68096,52234],{"class":53},[36,68098,2040],{"class":49},[36,68100,68101,68103,68105,68107,68109],{"class":38,"line":2504},[36,68102,58101],{"class":60},[36,68104,52179],{"class":49},[36,68106,1786],{"class":60},[36,68108,52234],{"class":53},[36,68110,2040],{"class":49},[36,68112,68113,68115,68117,68119],{"class":38,"line":2509},[36,68114,55751],{"class":60},[36,68116,52179],{"class":49},[36,68118,52219],{"class":60},[36,68120,2040],{"class":49},[36,68122,68123,68125,68127,68129],{"class":38,"line":2514},[36,68124,55762],{"class":60},[36,68126,52179],{"class":49},[36,68128,52410],{"class":60},[36,68130,2040],{"class":49},[36,68132,68133],{"class":38,"line":2528},[36,68134,2937],{"class":49},[36,68136,68137],{"class":38,"line":2533},[36,68138,194],{"emptyLinePlaceholder":193},[36,68140,68141,68143,68145],{"class":38,"line":3326},[36,68142,64487],{"class":2713},[36,68144,64560],{"class":52042},[36,68146,16316],{"class":49},[36,68148,68149,68151,68153,68155,68157],{"class":38,"line":3340},[36,68150,55664],{"class":60},[36,68152,52179],{"class":49},[36,68154,1680],{"class":60},[36,68156,52234],{"class":53},[36,68158,2040],{"class":49},[36,68160,68161,68163,68165,68167],{"class":38,"line":3348},[36,68162,63076],{"class":60},[36,68164,52179],{"class":49},[36,68166,64583],{"class":60},[36,68168,2040],{"class":49},[36,68170,68171,68173,68175,68177,68179],{"class":38,"line":3353},[36,68172,62742],{"class":60},[36,68174,52179],{"class":49},[36,68176,72],{"class":60},[36,68178,52234],{"class":53},[36,68180,2040],{"class":49},[36,68182,68183],{"class":38,"line":3359},[36,68184,2937],{"class":49},[36,68186,68187],{"class":38,"line":3365},[36,68188,194],{"emptyLinePlaceholder":193},[36,68190,68191,68193,68195],{"class":38,"line":3370},[36,68192,64487],{"class":2713},[36,68194,62034],{"class":52042},[36,68196,16316],{"class":49},[36,68198,68199,68201,68203,68205],{"class":38,"line":8695},[36,68200,55474],{"class":60},[36,68202,52179],{"class":49},[36,68204,55479],{"class":60},[36,68206,2040],{"class":49},[36,68208,68209,68211,68213,68215],{"class":38,"line":8719},[36,68210,55751],{"class":60},[36,68212,52179],{"class":49},[36,68214,52219],{"class":60},[36,68216,2040],{"class":49},[36,68218,68219,68221,68223,68225],{"class":38,"line":8724},[36,68220,55762],{"class":60},[36,68222,52179],{"class":49},[36,68224,52322],{"class":60},[36,68226,2040],{"class":49},[36,68228,68229],{"class":38,"line":8730},[36,68230,2937],{"class":49},[36,68232,68233],{"class":38,"line":8757},[36,68234,194],{"emptyLinePlaceholder":193},[36,68236,68237,68239,68241,68243],{"class":38,"line":8762},[36,68238,64487],{"class":2713},[36,68240,62034],{"class":52042},[36,68242,55817],{"class":52042},[36,68244,16316],{"class":49},[36,68246,68247,68249,68251,68253,68255,68257],{"class":38,"line":8768},[36,68248,55448],{"class":60},[36,68250,52179],{"class":49},[36,68252,643],{"class":60},[36,68254,9697],{"class":60},[36,68256,52234],{"class":53},[36,68258,2040],{"class":49},[36,68260,68261,68263,68265,68267,68269],{"class":38,"line":8780},[36,68262,55664],{"class":60},[36,68264,52179],{"class":49},[36,68266,1431],{"class":60},[36,68268,52234],{"class":53},[36,68270,2040],{"class":49},[36,68272,68273],{"class":38,"line":8792},[36,68274,2937],{"class":49},[36,68276,68277],{"class":38,"line":8804},[36,68278,194],{"emptyLinePlaceholder":193},[36,68280,68281,68283,68285,68287,68289],{"class":38,"line":10463},[36,68282,64487],{"class":2713},[36,68284,62034],{"class":52042},[36,68286,55817],{"class":52042},[36,68288,2148],{"class":52042},[36,68290,16316],{"class":49},[36,68292,68293,68295,68297,68299],{"class":38,"line":10488},[36,68294,64712],{"class":60},[36,68296,52179],{"class":49},[36,68298,55479],{"class":60},[36,68300,2040],{"class":49},[36,68302,68303,68305,68307,68309,68311,68313,68315],{"class":38,"line":10511},[36,68304,62974],{"class":60},[36,68306,52179],{"class":49},[36,68308,181],{"class":60},[36,68310,52234],{"class":53},[36,68312,52263],{"class":60},[36,68314,64733],{"class":60},[36,68316,2040],{"class":49},[36,68318,68319,68321,68323,68325],{"class":38,"line":10535},[36,68320,58158],{"class":60},[36,68322,52179],{"class":49},[36,68324,63111],{"class":60},[36,68326,2040],{"class":49},[36,68328,68329],{"class":38,"line":10540},[36,68330,2937],{"class":49},[36,68332,68333],{"class":38,"line":10545},[36,68334,194],{"emptyLinePlaceholder":193},[36,68336,68337,68339,68341,68343,68345,68347],{"class":38,"line":10550},[36,68338,64487],{"class":2713},[36,68340,62034],{"class":52042},[36,68342,55817],{"class":52042},[36,68344,2148],{"class":52042},[36,68346,64766],{"class":2713},[36,68348,16316],{"class":49},[36,68350,68351,68353,68355,68357],{"class":38,"line":10559},[36,68352,62533],{"class":60},[36,68354,52179],{"class":49},[36,68356,64777],{"class":60},[36,68358,2040],{"class":49},[36,68360,68361,68363,68365,68367],{"class":38,"line":10564},[36,68362,58158],{"class":60},[36,68364,52179],{"class":49},[36,68366,64777],{"class":60},[36,68368,2040],{"class":49},[36,68370,68371],{"class":38,"line":10570},[36,68372,2937],{"class":49},[36,68374,68375],{"class":38,"line":10591},[36,68376,194],{"emptyLinePlaceholder":193},[36,68378,68379,68381],{"class":38,"line":10597},[36,68380,64802],{"class":2713},[36,68382,16316],{"class":49},[36,68384,68385,68387,68389,68391,68393,68395],{"class":38,"line":10611},[36,68386,55437],{"class":60},[36,68388,52179],{"class":49},[36,68390,643],{"class":60},[36,68392,64815],{"class":60},[36,68394,52234],{"class":53},[36,68396,2040],{"class":49},[36,68398,68399],{"class":38,"line":10617},[36,68400,2937],{"class":49},[36,68402,68403],{"class":38,"line":10644},[36,68404,194],{"emptyLinePlaceholder":193},[36,68406,68407,68409,68411],{"class":38,"line":10653},[36,68408,64802],{"class":2713},[36,68410,62916],{"class":2713},[36,68412,16316],{"class":49},[36,68414,68415,68417,68419,68421],{"class":38,"line":10659},[36,68416,55751],{"class":60},[36,68418,52179],{"class":49},[36,68420,55479],{"class":60},[36,68422,2040],{"class":49},[36,68424,68425],{"class":38,"line":10667},[36,68426,2937],{"class":49},[36,68428,68429],{"class":38,"line":10672},[36,68430,194],{"emptyLinePlaceholder":193},[36,68432,68433,68435,68438],{"class":38,"line":17348},[36,68434,64802],{"class":2713},[36,68436,68437],{"class":2713}," .active",[36,68439,16316],{"class":49},[36,68441,68442,68444,68446,68448],{"class":38,"line":17354},[36,68443,55751],{"class":60},[36,68445,52179],{"class":49},[36,68447,61611],{"class":60},[36,68449,2040],{"class":49},[36,68451,68452],{"class":38,"line":17377},[36,68453,2937],{"class":49},[36,68455,68456,68458,68460],{"class":38,"line":17383},[36,68457,53159],{"class":49},[36,68459,807],{"class":52042},[36,68461,52049],{"class":49},[36,68463,68464,68466,68468],{"class":38,"line":17406},[36,68465,52527],{"class":49},[36,68467,52076],{"class":52042},[36,68469,52049],{"class":49},[36,68471,68472],{"class":38,"line":17420},[36,68473,194],{"emptyLinePlaceholder":193},[36,68475,68476,68478,68480],{"class":38,"line":17440},[36,68477,1789],{"class":49},[36,68479,52542],{"class":52042},[36,68481,52049],{"class":49},[36,68483,68484,68486,68488,68490,68492,68494],{"class":38,"line":17446},[36,68485,52886],{"class":49},[36,68487,52353],{"class":52042},[36,68489,54228],{"class":2713},[36,68491,54],{"class":49},[36,68493,64917],{"class":998},[36,68495,52049],{"class":49},[36,68497,68498,68500,68502,68504,68506,68508],{"class":38,"line":17457},[36,68499,52083],{"class":49},[36,68501,52353],{"class":52042},[36,68503,54228],{"class":2713},[36,68505,54],{"class":49},[36,68507,64932],{"class":998},[36,68509,52049],{"class":49},[36,68511,68512,68514,68516,68518,68520],{"class":38,"line":17480},[36,68513,55976],{"class":49},[36,68515,868],{"class":52042},[36,68517,64943],{"class":49},[36,68519,868],{"class":52042},[36,68521,52049],{"class":49},[36,68523,68524,68526,68528],{"class":38,"line":17502},[36,68525,55976],{"class":49},[36,68527,1886],{"class":52042},[36,68529,52049],{"class":49},[36,68531,68532,68534,68536,68538,68540,68542,68544,68546,68548,68550,68552,68554,68556,68559,68561,68563,68565,68567],{"class":38,"line":17507},[36,68533,56044],{"class":49},[36,68535,854],{"class":52042},[36,68537,61794],{"class":49},[36,68539,50],{"class":52042},[36,68541,54228],{"class":2713},[36,68543,54],{"class":49},[36,68545,60448],{"class":998},[36,68547,61799],{"class":2713},[36,68549,54],{"class":49},[36,68551,64978],{"class":998},[36,68553,54693],{"class":2713},[36,68555,54],{"class":49},[36,68557,68558],{"class":998},"\"0\"",[36,68560,64981],{"class":49},[36,68562,50],{"class":52042},[36,68564,56056],{"class":49},[36,68566,854],{"class":52042},[36,68568,52049],{"class":49},[36,68570,68571,68573,68575,68577,68579,68581,68583,68585,68587,68589,68591,68593,68595,68597,68599],{"class":38,"line":17513},[36,68572,56044],{"class":49},[36,68574,854],{"class":52042},[36,68576,61794],{"class":49},[36,68578,50],{"class":52042},[36,68580,61799],{"class":2713},[36,68582,54],{"class":49},[36,68584,64978],{"class":998},[36,68586,54693],{"class":2713},[36,68588,54],{"class":49},[36,68590,4427],{"class":998},[36,68592,65008],{"class":49},[36,68594,50],{"class":52042},[36,68596,56056],{"class":49},[36,68598,854],{"class":52042},[36,68600,52049],{"class":49},[36,68602,68603,68605,68607,68609,68611,68613,68615,68617,68619,68621,68623,68625,68627,68629,68631],{"class":38,"line":17527},[36,68604,56044],{"class":49},[36,68606,854],{"class":52042},[36,68608,61794],{"class":49},[36,68610,50],{"class":52042},[36,68612,61799],{"class":2713},[36,68614,54],{"class":49},[36,68616,64978],{"class":998},[36,68618,54693],{"class":2713},[36,68620,54],{"class":49},[36,68622,4450],{"class":998},[36,68624,65035],{"class":49},[36,68626,50],{"class":52042},[36,68628,56056],{"class":49},[36,68630,854],{"class":52042},[36,68632,52049],{"class":49},[36,68634,68635,68637,68639,68641,68643,68645,68647,68649,68651,68653,68655,68657,68659,68661,68663],{"class":38,"line":17540},[36,68636,56044],{"class":49},[36,68638,854],{"class":52042},[36,68640,61794],{"class":49},[36,68642,50],{"class":52042},[36,68644,61799],{"class":2713},[36,68646,54],{"class":49},[36,68648,64978],{"class":998},[36,68650,54693],{"class":2713},[36,68652,54],{"class":49},[36,68654,4463],{"class":998},[36,68656,65062],{"class":49},[36,68658,50],{"class":52042},[36,68660,56056],{"class":49},[36,68662,854],{"class":52042},[36,68664,52049],{"class":49},[36,68666,68667,68669,68671,68673,68675,68677,68679,68681,68683,68685,68687,68689,68691,68693,68695],{"class":38,"line":17545},[36,68668,56044],{"class":49},[36,68670,854],{"class":52042},[36,68672,61794],{"class":49},[36,68674,50],{"class":52042},[36,68676,61799],{"class":2713},[36,68678,54],{"class":49},[36,68680,64978],{"class":998},[36,68682,54693],{"class":2713},[36,68684,54],{"class":49},[36,68686,4476],{"class":998},[36,68688,65089],{"class":49},[36,68690,50],{"class":52042},[36,68692,56056],{"class":49},[36,68694,854],{"class":52042},[36,68696,52049],{"class":49},[36,68698,68699,68701,68703],{"class":38,"line":17559},[36,68700,56149],{"class":49},[36,68702,1886],{"class":52042},[36,68704,52049],{"class":49},[36,68706,68707,68709,68711],{"class":38,"line":17564},[36,68708,52518],{"class":49},[36,68710,52353],{"class":52042},[36,68712,52049],{"class":49},[36,68714,68715,68717,68719,68721,68723,68725],{"class":38,"line":17570},[36,68716,52083],{"class":49},[36,68718,52353],{"class":52042},[36,68720,54228],{"class":2713},[36,68722,54],{"class":49},[36,68724,65126],{"class":998},[36,68726,52049],{"class":49},[36,68728,68729,68731,68733,68735,68737,68739,68741,68743,68745,68747,68749,68751,68753,68755,68757,68759],{"class":38,"line":17575},[36,68730,55976],{"class":49},[36,68732,52353],{"class":52042},[36,68734,54228],{"class":2713},[36,68736,54],{"class":49},[36,68738,65141],{"class":998},[36,68740,61794],{"class":49},[36,68742,2212],{"class":52042},[36,68744,55981],{"class":2713},[36,68746,54],{"class":49},[36,68748,65152],{"class":998},[36,68750,55989],{"class":2713},[36,68752,54],{"class":49},[36,68754,8399],{"class":998},[36,68756,65161],{"class":49},[36,68758,52353],{"class":52042},[36,68760,52049],{"class":49},[36,68762,68763,68765,68767,68769,68771,68773,68775,68777,68779,68781,68783,68785,68787,68789,68791,68793],{"class":38,"line":17589},[36,68764,55976],{"class":49},[36,68766,52353],{"class":52042},[36,68768,54228],{"class":2713},[36,68770,54],{"class":49},[36,68772,63365],{"class":998},[36,68774,61794],{"class":49},[36,68776,2212],{"class":52042},[36,68778,55981],{"class":2713},[36,68780,54],{"class":49},[36,68782,65188],{"class":998},[36,68784,55989],{"class":2713},[36,68786,54],{"class":49},[36,68788,8399],{"class":998},[36,68790,65161],{"class":49},[36,68792,52353],{"class":52042},[36,68794,52049],{"class":49},[36,68796,68797,68799,68801,68803,68805,68807,68809,68811,68813,68815,68817,68819,68821,68823,68825,68827],{"class":38,"line":17594},[36,68798,55976],{"class":49},[36,68800,52353],{"class":52042},[36,68802,54228],{"class":2713},[36,68804,54],{"class":49},[36,68806,63365],{"class":998},[36,68808,61794],{"class":49},[36,68810,2212],{"class":52042},[36,68812,55981],{"class":2713},[36,68814,54],{"class":49},[36,68816,65223],{"class":998},[36,68818,55989],{"class":2713},[36,68820,54],{"class":49},[36,68822,8399],{"class":998},[36,68824,65161],{"class":49},[36,68826,52353],{"class":52042},[36,68828,52049],{"class":49},[36,68830,68831,68833,68835,68837,68839,68841,68843,68845,68847,68849,68851,68853,68855,68857,68859,68861],{"class":38,"line":17599},[36,68832,55976],{"class":49},[36,68834,52353],{"class":52042},[36,68836,54228],{"class":2713},[36,68838,54],{"class":49},[36,68840,63365],{"class":998},[36,68842,61794],{"class":49},[36,68844,2212],{"class":52042},[36,68846,55981],{"class":2713},[36,68848,54],{"class":49},[36,68850,65258],{"class":998},[36,68852,55989],{"class":2713},[36,68854,54],{"class":49},[36,68856,8399],{"class":998},[36,68858,65161],{"class":49},[36,68860,52353],{"class":52042},[36,68862,52049],{"class":49},[36,68864,68865,68867,68869,68871,68873,68875,68877,68879,68881,68883,68885,68887,68889,68891,68893,68895],{"class":38,"line":17613},[36,68866,55976],{"class":49},[36,68868,52353],{"class":52042},[36,68870,54228],{"class":2713},[36,68872,54],{"class":49},[36,68874,63365],{"class":998},[36,68876,61794],{"class":49},[36,68878,2212],{"class":52042},[36,68880,55981],{"class":2713},[36,68882,54],{"class":49},[36,68884,65293],{"class":998},[36,68886,55989],{"class":2713},[36,68888,54],{"class":49},[36,68890,8399],{"class":998},[36,68892,65161],{"class":49},[36,68894,52353],{"class":52042},[36,68896,52049],{"class":49},[36,68898,68899,68901,68903],{"class":38,"line":17625},[36,68900,52518],{"class":49},[36,68902,52353],{"class":52042},[36,68904,52049],{"class":49},[36,68906,68907,68909,68911],{"class":38,"line":17630},[36,68908,53159],{"class":49},[36,68910,52353],{"class":52042},[36,68912,52049],{"class":49},[36,68914,68915,68917,68919],{"class":38,"line":17643},[36,68916,52886],{"class":49},[36,68918,52555],{"class":52042},[36,68920,52049],{"class":49},[36,68922,68923],{"class":38,"line":17648},[36,68924,68925],{"class":42},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[36,68927,68928],{"class":38,"line":17653},[36,68929,68930],{"class":42},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[36,68932,68933,68935,68937,68939,68941,68943,68945,68948],{"class":38,"line":17658},[36,68934,11966],{"class":53},[36,68936,62034],{"class":60},[36,68938,14308],{"class":53},[36,68940,55138],{"class":49},[36,68942,55141],{"class":2713},[36,68944,901],{"class":49},[36,68946,68947],{"class":998},"'.tab-nav ul'",[36,68949,75],{"class":49},[36,68951,68952],{"class":38,"line":17671},[36,68953,68954],{"class":42},"    \u002F\u002F 2.添加事件\n",[36,68956,68957,68959,68961,68963,68965,68967,68969,68971,68973],{"class":38,"line":17676},[36,68958,67696],{"class":49},[36,68960,58555],{"class":2713},[36,68962,901],{"class":49},[36,68964,58560],{"class":998},[36,68966,154],{"class":49},[36,68968,55191],{"class":53},[36,68970,2408],{"class":49},[36,68972,969],{"class":416},[36,68974,13186],{"class":49},[36,68976,68977,68979,68981],{"class":38,"line":33375},[36,68978,58986],{"class":49},[36,68980,67752],{"class":2713},[36,68982,67755],{"class":49},[36,68984,68985],{"class":38,"line":33381},[36,68986,68987],{"class":42},"      \u002F\u002Fe.targer是我们点击的对象\n",[36,68989,68990,68992,68994,68996,68999],{"class":38,"line":33387},[36,68991,55222],{"class":53},[36,68993,67776],{"class":49},[36,68995,55228],{"class":53},[36,68997,68998],{"class":998}," 'A'",[36,69000,13186],{"class":49},[36,69002,69003,69005,69007,69009,69012,69014,69016,69018,69020],{"class":38,"line":33393},[36,69004,52667],{"class":49},[36,69006,55141],{"class":2713},[36,69008,901],{"class":49},[36,69010,69011],{"class":998},"'.active'",[36,69013,57745],{"class":49},[36,69015,57748],{"class":2713},[36,69017,901],{"class":49},[36,69019,65456],{"class":998},[36,69021,75],{"class":49},[36,69023,69024,69027,69029,69031,69033],{"class":38,"line":33399},[36,69025,69026],{"class":49},"        e.target.classList.",[36,69028,6081],{"class":2713},[36,69030,901],{"class":49},[36,69032,65456],{"class":998},[36,69034,75],{"class":49},[36,69036,69037],{"class":38,"line":33410},[36,69038,194],{"emptyLinePlaceholder":193},[36,69040,69041],{"class":38,"line":33416},[36,69042,69043],{"class":42},"        \u002F\u002F 下面大盒子模块\n",[36,69045,69046],{"class":38,"line":33436},[36,69047,69048],{"class":42},"        \u002F\u002F console.log(e.target.dataset.id)\n",[36,69050,69051,69053,69055,69057,69059],{"class":38,"line":33442},[36,69052,62012],{"class":53},[36,69054,3781],{"class":60},[36,69056,14308],{"class":53},[36,69058,46308],{"class":53},[36,69060,69061],{"class":49},"e.target.dataset.id\n",[36,69063,69064,69066,69068,69070,69072,69074,69076,69078,69080],{"class":38,"line":33453},[36,69065,52667],{"class":49},[36,69067,55141],{"class":2713},[36,69069,901],{"class":49},[36,69071,65504],{"class":998},[36,69073,57745],{"class":49},[36,69075,57748],{"class":2713},[36,69077,901],{"class":49},[36,69079,65456],{"class":998},[36,69081,75],{"class":49},[36,69083,69084,69086,69088,69090,69092,69094,69096,69098,69100,69102,69104,69106,69108],{"class":38,"line":33459},[36,69085,52667],{"class":49},[36,69087,55141],{"class":2713},[36,69089,901],{"class":49},[36,69091,65530],{"class":998},[36,69093,1326],{"class":49},[36,69095,46308],{"class":53},[36,69097,25863],{"class":60},[36,69099,57774],{"class":998},[36,69101,57745],{"class":49},[36,69103,6081],{"class":2713},[36,69105,901],{"class":49},[36,69107,65456],{"class":998},[36,69109,75],{"class":49},[36,69111,69112],{"class":38,"line":33465},[36,69113,194],{"emptyLinePlaceholder":193},[36,69115,69116],{"class":38,"line":33471},[36,69117,53140],{"class":49},[36,69119,69120],{"class":38,"line":33477},[36,69121,34203],{"class":49},[36,69123,69124,69126,69128],{"class":38,"line":33483},[36,69125,53159],{"class":49},[36,69127,52555],{"class":52042},[36,69129,52049],{"class":49},[36,69131,69132,69134,69136],{"class":38,"line":33489},[36,69133,52527],{"class":49},[36,69135,52542],{"class":52042},[36,69137,52049],{"class":49},[36,69139,69140],{"class":38,"line":33495},[36,69141,194],{"emptyLinePlaceholder":193},[36,69143,69144,69146,69148],{"class":38,"line":33515},[36,69145,52527],{"class":49},[36,69147,51377],{"class":52042},[36,69149,52049],{"class":49},[868,69151,69153],{"id":69152},"_333-页面加载事件","3.3.3 页面加载事件",[851,69155,69156],{},[854,69157,69158],{},"load",[14,69160,69161],{},[2212,69162],{"alt":31,"src":69163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,69165,69166],{},"window代表整个窗口，比document还要大",[14,69168,69169],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,69171,69172],{},"img.addEventListener('load', function () {",[14,69174,69175],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,69177,53206],{},[851,69179,69180],{"start":46},[854,69181,69182],{},"DOMContentLoaded",[14,69184,69185],{},[2212,69186],{"alt":31,"src":69187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,69189,69190],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[868,69192,69194],{"id":69193},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,69196,69197],{},[2212,69198],{"alt":31,"src":69199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,69201,69202],{},[2212,69203],{"alt":31,"src":69204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,69206,69207],{},[2212,69208],{"alt":31,"src":69209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,69211,69212],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,69214,69215],{},"获得的是数字型数据，不带单位",[14,69217,69218],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,69220,69221],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,69223,69224],{},"它是通过document.documentElement来获取",[14,69226,69227],{},[2212,69228],{"alt":31,"src":69229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,69231,69232],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[868,69234,69236],{"id":69235},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,69238,69239],{},[2212,69240],{"alt":31,"src":69241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,69243,69244],{},[2212,69245],{"alt":31,"src":69246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[868,69248,69250],{"id":69249},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,69252,69253],{},[2212,69254],{"alt":31,"src":69255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,69257,69258],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,69260,69261],{},[2212,69262],{"alt":31,"src":69263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,69265,69266],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,69268,69269],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,69271,69272],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,69274,69275],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,69277,69278],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,69280,69281],{},[2212,69282],{"alt":31,"src":69283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,69285,69286],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,69288,69289],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,69291,69292],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,69294,69295],{},"e.pageX-box.getBoundingClientRect()",[868,69297,69299],{"id":69298},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,69301,69302],{},[2212,69303],{"alt":31,"src":69304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,69306,69307],{},"这个是相对于视口来说的，它是个方法，不是属性值",[868,69309,69311],{"id":69310},"_338-总结","3.3.8 总结",[14,69313,69314],{},[2212,69315],{"alt":31,"src":69316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,69318,69319],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,69321,69322],{},"修改盒子的宽高只能通过width和height来实现",[868,69324,69326],{"id":69325},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[26,69328,69330],{"className":51375,"code":69329,"language":51377,"meta":31,"style":31},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[33,69331,69332,69337,69342,69347,69352],{"__ignoreMap":31},[36,69333,69334],{"class":38,"line":39},[36,69335,69336],{"class":49},"\u002F* 页面滑动 *\u002F\n",[36,69338,69339],{"class":38,"line":46},[36,69340,69341],{"class":49},"html {\n",[36,69343,69344],{"class":38,"line":78},[36,69345,69346],{"class":49},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[36,69348,69349],{"class":38,"line":125},[36,69350,69351],{"class":49},"  scroll-behavior: smooth;\n",[36,69353,69354],{"class":38,"line":131},[36,69355,2315],{"class":49},[14,69357,69358],{},"默认是auto",[868,69360,69362],{"id":69361},"_3310-日期对象","3.3.10 日期对象",[22742,69364,69366],{"id":69365},"_33101-实例化","3.3.10.1 实例化",[14,69368,69369],{},[2212,69370],{"alt":31,"src":69371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22742,69373,69375],{"id":69374},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,69377,69378],{},[2212,69379],{"alt":31,"src":69380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,69382,69383],{},"月份+1",[14,69385,69386],{},"老外认为第一天为0，星期天",[14,69388,69389],{},"方法使用的时候必须要跟括号",[14,69391,69392],{},"快速获得日期",[14,69394,69395],{},"\u002F\u002F 得到年月日",[14,69397,69398],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,69400,69401],{},"\u002F\u002F 得到当地日期",[14,69403,69404],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,69406,69407],{},"\u002F\u002F 得到当地时间",[14,69409,69410],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,69412,69413],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,69415,69416],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52555,69418,69419],{},"\n\nconst div = document.querySelector('div')\n\nfunction getMyDate() {\n\nconst date = new Date()\n\nlet h = date.getHours()\n\nlet m = date.getMinutes()\n\nlet s = date.getSeconds()\n\nh = h \u003C 10 ? '0' + h : h\n\nm = m \u003C 10 ? '0' + m : m\n\ns = s \u003C 10 ? '0' + s : s\n\nreturn \\``今天是${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}号 ${h}:${m}:${s}`\\`\n\n}\n\n\u002F\u002F 外面还写一个这个时间是因为定时器需要经过1秒才调用一次函数，刚开始会有空白\n\ndiv.innerHTML = getMyDate()\n\nsetInterval(function () {\n\ndiv.innerHTML = getMyDate()\n\n}, 1000)\n\n",[14,69421,69422],{},"学会去封装函数！",[22742,69424,69426],{"id":69425},"_33103-时间戳","3.3.10.3 时间戳",[14,69428,69429],{},[2212,69430],{"alt":31,"src":69431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,69433,69434],{},[2212,69435],{"alt":31,"src":69436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,69438,69439],{},"三种方法记住一个就可以",[868,69441,69443],{"id":69442},"_3311-节点操作","3.3.11 节点操作",[22742,69445,69447],{"id":69446},"_33111-dom节点","3.3.11.1 DOM节点",[14,69449,69450],{},[2212,69451],{"alt":31,"src":69452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,69454,69455],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22742,69457,69459],{"id":69458},"_33112-查找节点","3.3.11.2 查找节点",[14,69461,69462],{},"前边的document.querySelector()是获取的元素",[14,69464,69465],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,69467,69468],{},[2212,69469],{"alt":31,"src":69470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[851,69472,69473],{},[854,69474,69475],{},"父节点",[14,69477,69478],{},[2212,69479],{"alt":31,"src":69480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[851,69482,69483],{"start":46},[854,69484,69485],{},"子节点",[14,69487,69488],{},[2212,69489],{"alt":31,"src":69490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,69492,69493],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,69495,69496],{},"children获得的是伪数组，是亲儿子",[851,69498,69499],{"start":78},[854,69500,69501],{},"兄弟节点",[14,69503,69504],{},[2212,69505],{"alt":31,"src":69506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22742,69508,69510],{"id":69509},"_33113-增加节点","3.3.11.3 增加节点",[14,69512,69513],{},[2212,69514],{"alt":31,"src":69515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,69517,69518],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,69520,69521],{},[2212,69522],{"alt":31,"src":69523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,69525,69526],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,69528,69529],{},"下面是写法的部分展示，就按照下边的格式来写",[14,69531,69532],{},"例：",[52555,69534,69535],{},"\n\n\u002F\u002F 1. 重构 let data = \\[\n\n{\n\nsrc: 'images\u002Fcourse01.png',\n\ntitle: 'Think PHP 5.0 博客系统实战项目演练',\n\nnum: 1125\n\n},\n\n{\n\nsrc: 'images\u002Fcourse02.png',\n\ntitle: 'Android 网络动态图片加载实战',\n\nnum: 357\n\n},\n\n{\n\nsrc: 'images\u002Fcourse03.png',\n\ntitle: 'Angular2 大前端商城实战项目演练',\n\nnum: 22250\n\n},\n\n{\n\nsrc: 'images\u002Fcourse04.png',\n\ntitle: 'Android APP 实战项目演练',\n\nnum: 389\n\n},\n\n{\n\nsrc: 'images\u002Fcourse05.png',\n\ntitle: 'UGUI 源码深度分析案例',\n\nnum: 124\n\n},\n\n{\n\nsrc: 'images\u002Fcourse06.png',\n\ntitle: 'Kami2首页界面切换效果实战演练',\n\nnum: 432\n\n},\n\n{\n\nsrc: 'images\u002Fcourse07.png',\n\ntitle: 'UNITY 从入门到精通实战案例',\n\nnum: 888\n\n},\n\n{\n\nsrc: 'images\u002Fcourse08.png',\n\ntitle: 'Cocos 深度学习你不会错过的实战',\n\nnum: 590\n\n},\n\n\\]\n\n\u002F\u002F 1.根据数据的个数创建对应的li\n\nconst ul = document.querySelector('ul')\n\nfor (let i = 0; i \u003C data.length; i++) {\n\n\u002F\u002F 2.创建新的li\n\nconst li = document.createElement('li')\n\nul.appendChild(li)\n\n\u002F\u002F 把内容给li\n\nli.innerHTML = `\u003Ca href=\"#\">`\n\n   `\u003Cimg src=\"${data[i].src}\" alt=\"\">`\n\n   `\u003Ch4>${data[i].title}\u003C\u002Fh4>`\n\n   `\u003Cdiv class=\"info\">`\n\n   `\u003Cspan>高级\u003C\u002Fspan>·\u003Cspan>${data[i].num}\u003C\u002Fspan>人在学 \u003C\u002Fdiv>`\n\n   `\u003C\u002Fa>`\n\n}\n\n",[14,69537,69538],{},[2212,69539],{"alt":31,"src":69540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,69542,69543],{},"false只克隆标签，里边的内容不会克隆过来",[26,69545,69547],{"className":51375,"code":69546,"language":51377,"meta":31,"style":31},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[33,69548,69549],{"__ignoreMap":31},[36,69550,69551],{"class":38,"line":39},[36,69552,69546],{"class":49},[22742,69554,69556],{"id":69555},"_33114-删除节点","3.3.11.4 删除节点",[14,69558,69559],{},[2212,69560],{"alt":31,"src":69561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,69563,69564],{},"父亲删儿子",[14,69566,69567],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[868,69569,69571],{"id":69570},"_3312-m端事件","3.3.12 M端事件",[14,69573,69574],{},"M端就是移动端",[14,69576,69577],{},[2212,69578],{"alt":31,"src":69579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[868,69581,69583],{"id":69582},"_3313-插件","3.3.13 插件",[14,69585,69586],{},"要熟悉官网！！！",[14,69588,69589],{},[50,69590,69591],{"href":69591,"rel":69592},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24609],[14,69594,69595],{},[50,69596,69597],{"href":69597,"rel":69598},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24609],[868,69600,69602],{"id":69601},"_3314-学生信息表","3.3.14 学生信息表",[851,69604,69605,69608,69611,69614,69617,69620,69623,69626],{},[854,69606,69607],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[854,69609,69610],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[854,69612,69613],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[854,69615,69616],{},"用好表单元素自带的属性，value,name等",[854,69618,69619],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[854,69621,69622],{},"不要忘记事件对象",[854,69624,69625],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[854,69627,69628],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,69630,69631],{},"结构：",[26,69633,69635],{"className":51375,"code":69634,"language":51377,"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,69636,69637,69647,69661,69665,69673,69687,69707,69728,69741,69765,69773,69777,69785,69798,69819,69847,69875,69880,69902,69922,69941,69949,69977,69999,70019,70039,70059,70079,70099,70107,70127,70135,70139,70152,70160,70168,70176,70189,70202,70215,70228,70241,70254,70267,70275,70283,70291,70296,70301,70306,70311,70316,70321,70326,70331,70336,70341,70346,70351,70356,70364,70372,70380,70384,70404,70423,70443,70463,70483,70503,70507,70512,70532,70537,70547,70552,70557,70577,70599,70604,70614,70618,70622,70627,70632,70661,70675,70690,70694,70698,70702,70707,70718,70731,70736,70741,70746,70751,70756,70760,70765,70770,70779,70784,70789,70801,70806,70813,70817,70822,70832,70837,70847,70852,70880,70901,70911,70931,70949,70966,70983,71000,71017,71021,71031,71036,71041,71046,71057,71061,71065,71069,71074,71079,71100,71112,71117,71122,71127,71141,71146,71153,71157,71161,71169,71173,71181,71185],{"__ignoreMap":31},[36,69638,69639,69641,69643,69645],{"class":38,"line":39},[36,69640,52039],{"class":49},[36,69642,52043],{"class":52042},[36,69644,52046],{"class":2713},[36,69646,52049],{"class":49},[36,69648,69649,69651,69653,69655,69657,69659],{"class":38,"line":46},[36,69650,1789],{"class":49},[36,69652,51377],{"class":52042},[36,69654,52058],{"class":2713},[36,69656,54],{"class":49},[36,69658,52063],{"class":998},[36,69660,52049],{"class":49},[36,69662,69663],{"class":38,"line":78},[36,69664,194],{"emptyLinePlaceholder":193},[36,69666,69667,69669,69671],{"class":38,"line":125},[36,69668,1789],{"class":49},[36,69670,52076],{"class":52042},[36,69672,52049],{"class":49},[36,69674,69675,69677,69679,69681,69683,69685],{"class":38,"line":131},[36,69676,52886],{"class":49},[36,69678,52086],{"class":52042},[36,69680,52089],{"class":2713},[36,69682,54],{"class":49},[36,69684,52094],{"class":998},[36,69686,59869],{"class":49},[36,69688,69689,69691,69693,69695,69697,69699,69701,69703,69705],{"class":38,"line":396},[36,69690,52886],{"class":49},[36,69692,52086],{"class":52042},[36,69694,15664],{"class":2713},[36,69696,54],{"class":49},[36,69698,52133],{"class":998},[36,69700,52113],{"class":2713},[36,69702,54],{"class":49},[36,69704,52140],{"class":998},[36,69706,59869],{"class":49},[36,69708,69709,69711,69713,69715,69717,69719,69721,69723,69726],{"class":38,"line":407},[36,69710,52886],{"class":49},[36,69712,52086],{"class":52042},[36,69714,52105],{"class":2713},[36,69716,54],{"class":49},[36,69718,52110],{"class":998},[36,69720,52113],{"class":2713},[36,69722,54],{"class":49},[36,69724,69725],{"class":998},"\"ie=edge\"",[36,69727,59869],{"class":49},[36,69729,69730,69732,69734,69737,69739],{"class":38,"line":2061},[36,69731,52886],{"class":49},[36,69733,52149],{"class":52042},[36,69735,69736],{"class":49},">学生信息管理\u003C\u002F",[36,69738,52149],{"class":52042},[36,69740,52049],{"class":49},[36,69742,69743,69745,69748,69751,69753,69756,69758,69760,69763],{"class":38,"line":2067},[36,69744,52886],{"class":49},[36,69746,69747],{"class":52042},"link",[36,69749,69750],{"class":2713}," rel",[36,69752,54],{"class":49},[36,69754,69755],{"class":998},"\"stylesheet\"",[36,69757,61799],{"class":2713},[36,69759,54],{"class":49},[36,69761,69762],{"class":998},"\"css\u002Findex.css\"",[36,69764,59869],{"class":49},[36,69766,69767,69769,69771],{"class":38,"line":2079},[36,69768,52527],{"class":49},[36,69770,52076],{"class":52042},[36,69772,52049],{"class":49},[36,69774,69775],{"class":38,"line":2362},[36,69776,194],{"emptyLinePlaceholder":193},[36,69778,69779,69781,69783],{"class":38,"line":2367},[36,69780,1789],{"class":49},[36,69782,52542],{"class":52042},[36,69784,52049],{"class":49},[36,69786,69787,69789,69791,69794,69796],{"class":38,"line":2373},[36,69788,52886],{"class":49},[36,69790,10],{"class":52042},[36,69792,69793],{"class":49},">新增学员\u003C\u002F",[36,69795,10],{"class":52042},[36,69797,52049],{"class":49},[36,69799,69800,69802,69804,69806,69808,69810,69813,69815,69817],{"class":38,"line":2378},[36,69801,52886],{"class":49},[36,69803,67367],{"class":52042},[36,69805,54228],{"class":2713},[36,69807,54],{"class":49},[36,69809,63406],{"class":998},[36,69811,69812],{"class":2713}," autocomplete",[36,69814,54],{"class":49},[36,69816,32518],{"class":998},[36,69818,52049],{"class":49},[36,69820,69821,69824,69826,69828,69830,69832,69834,69836,69839,69841,69843,69845],{"class":38,"line":2392},[36,69822,69823],{"class":49},"    姓名：\u003C",[36,69825,54563],{"class":52042},[36,69827,54566],{"class":2713},[36,69829,54],{"class":49},[36,69831,63441],{"class":998},[36,69833,54228],{"class":2713},[36,69835,54],{"class":49},[36,69837,69838],{"class":998},"\"uname\"",[36,69840,15664],{"class":2713},[36,69842,54],{"class":49},[36,69844,69838],{"class":998},[36,69846,59869],{"class":49},[36,69848,69849,69852,69854,69856,69858,69860,69862,69864,69867,69869,69871,69873],{"class":38,"line":2397},[36,69850,69851],{"class":49},"    年龄：\u003C",[36,69853,54563],{"class":52042},[36,69855,54566],{"class":2713},[36,69857,54],{"class":49},[36,69859,63441],{"class":998},[36,69861,54228],{"class":2713},[36,69863,54],{"class":49},[36,69865,69866],{"class":998},"\"age\"",[36,69868,15664],{"class":2713},[36,69870,54],{"class":49},[36,69872,69866],{"class":998},[36,69874,59869],{"class":49},[36,69876,69877],{"class":38,"line":2403},[36,69878,69879],{"class":49},"    性别:\n",[36,69881,69882,69884,69887,69889,69891,69894,69896,69898,69900],{"class":38,"line":2424},[36,69883,52083],{"class":49},[36,69885,69886],{"class":52042},"select",[36,69888,15664],{"class":2713},[36,69890,54],{"class":49},[36,69892,69893],{"class":998},"\"gender\"",[36,69895,54228],{"class":2713},[36,69897,54],{"class":49},[36,69899,69893],{"class":998},[36,69901,52049],{"class":49},[36,69903,69904,69906,69909,69911,69913,69915,69918,69920],{"class":38,"line":2429},[36,69905,55976],{"class":49},[36,69907,69908],{"class":52042},"option",[36,69910,67393],{"class":2713},[36,69912,54],{"class":49},[36,69914,10708],{"class":998},[36,69916,69917],{"class":49},">男\u003C\u002F",[36,69919,69908],{"class":52042},[36,69921,52049],{"class":49},[36,69923,69924,69926,69928,69930,69932,69934,69937,69939],{"class":38,"line":2443},[36,69925,55976],{"class":49},[36,69927,69908],{"class":52042},[36,69929,67393],{"class":2713},[36,69931,54],{"class":49},[36,69933,10777],{"class":998},[36,69935,69936],{"class":49},">女\u003C\u002F",[36,69938,69908],{"class":52042},[36,69940,52049],{"class":49},[36,69942,69943,69945,69947],{"class":38,"line":2448},[36,69944,52518],{"class":49},[36,69946,69886],{"class":52042},[36,69948,52049],{"class":49},[36,69950,69951,69954,69956,69958,69960,69962,69964,69966,69969,69971,69973,69975],{"class":38,"line":2477},[36,69952,69953],{"class":49},"    薪资：\u003C",[36,69955,54563],{"class":52042},[36,69957,54566],{"class":2713},[36,69959,54],{"class":49},[36,69961,63441],{"class":998},[36,69963,54228],{"class":2713},[36,69965,54],{"class":49},[36,69967,69968],{"class":998},"\"salary\"",[36,69970,15664],{"class":2713},[36,69972,54],{"class":49},[36,69974,69968],{"class":998},[36,69976,59869],{"class":49},[36,69978,69979,69982,69984,69986,69988,69991,69993,69995,69997],{"class":38,"line":2482},[36,69980,69981],{"class":49},"    就业城市：\u003C",[36,69983,69886],{"class":52042},[36,69985,15664],{"class":2713},[36,69987,54],{"class":49},[36,69989,69990],{"class":998},"\"city\"",[36,69992,54228],{"class":2713},[36,69994,54],{"class":49},[36,69996,69990],{"class":998},[36,69998,52049],{"class":49},[36,70000,70001,70003,70005,70007,70009,70012,70015,70017],{"class":38,"line":2499},[36,70002,55976],{"class":49},[36,70004,69908],{"class":52042},[36,70006,67393],{"class":2713},[36,70008,54],{"class":49},[36,70010,70011],{"class":998},"\"北京\"",[36,70013,70014],{"class":49},">北京\u003C\u002F",[36,70016,69908],{"class":52042},[36,70018,52049],{"class":49},[36,70020,70021,70023,70025,70027,70029,70032,70035,70037],{"class":38,"line":2504},[36,70022,55976],{"class":49},[36,70024,69908],{"class":52042},[36,70026,67393],{"class":2713},[36,70028,54],{"class":49},[36,70030,70031],{"class":998},"\"上海\"",[36,70033,70034],{"class":49},">上海\u003C\u002F",[36,70036,69908],{"class":52042},[36,70038,52049],{"class":49},[36,70040,70041,70043,70045,70047,70049,70052,70055,70057],{"class":38,"line":2509},[36,70042,55976],{"class":49},[36,70044,69908],{"class":52042},[36,70046,67393],{"class":2713},[36,70048,54],{"class":49},[36,70050,70051],{"class":998},"\"广州\"",[36,70053,70054],{"class":49},">广州\u003C\u002F",[36,70056,69908],{"class":52042},[36,70058,52049],{"class":49},[36,70060,70061,70063,70065,70067,70069,70072,70075,70077],{"class":38,"line":2514},[36,70062,55976],{"class":49},[36,70064,69908],{"class":52042},[36,70066,67393],{"class":2713},[36,70068,54],{"class":49},[36,70070,70071],{"class":998},"\"深圳\"",[36,70073,70074],{"class":49},">深圳\u003C\u002F",[36,70076,69908],{"class":52042},[36,70078,52049],{"class":49},[36,70080,70081,70083,70085,70087,70089,70092,70095,70097],{"class":38,"line":2528},[36,70082,55976],{"class":49},[36,70084,69908],{"class":52042},[36,70086,67393],{"class":2713},[36,70088,54],{"class":49},[36,70090,70091],{"class":998},"\"曹县\"",[36,70093,70094],{"class":49},">曹县\u003C\u002F",[36,70096,69908],{"class":52042},[36,70098,52049],{"class":49},[36,70100,70101,70103,70105],{"class":38,"line":2533},[36,70102,52518],{"class":49},[36,70104,69886],{"class":52042},[36,70106,52049],{"class":49},[36,70108,70109,70111,70113,70115,70117,70120,70123,70125],{"class":38,"line":3326},[36,70110,52083],{"class":49},[36,70112,54629],{"class":52042},[36,70114,54228],{"class":2713},[36,70116,54],{"class":49},[36,70118,70119],{"class":998},"\"add\"",[36,70121,70122],{"class":49},">录入\u003C\u002F",[36,70124,54629],{"class":52042},[36,70126,52049],{"class":49},[36,70128,70129,70131,70133],{"class":38,"line":3340},[36,70130,53159],{"class":49},[36,70132,67367],{"class":52042},[36,70134,52049],{"class":49},[36,70136,70137],{"class":38,"line":3348},[36,70138,194],{"emptyLinePlaceholder":193},[36,70140,70141,70143,70145,70148,70150],{"class":38,"line":3353},[36,70142,52886],{"class":49},[36,70144,10],{"class":52042},[36,70146,70147],{"class":49},">就业榜\u003C\u002F",[36,70149,10],{"class":52042},[36,70151,52049],{"class":49},[36,70153,70154,70156,70158],{"class":38,"line":3359},[36,70155,52886],{"class":49},[36,70157,1031],{"class":52042},[36,70159,52049],{"class":49},[36,70161,70162,70164,70166],{"class":38,"line":3365},[36,70163,52083],{"class":49},[36,70165,1034],{"class":52042},[36,70167,52049],{"class":49},[36,70169,70170,70172,70174],{"class":38,"line":3370},[36,70171,55976],{"class":49},[36,70173,1037],{"class":52042},[36,70175,52049],{"class":49},[36,70177,70178,70180,70182,70185,70187],{"class":38,"line":8695},[36,70179,56044],{"class":49},[36,70181,1040],{"class":52042},[36,70183,70184],{"class":49},">序号\u003C\u002F",[36,70186,1040],{"class":52042},[36,70188,52049],{"class":49},[36,70190,70191,70193,70195,70198,70200],{"class":38,"line":8719},[36,70192,56044],{"class":49},[36,70194,1040],{"class":52042},[36,70196,70197],{"class":49},">姓名\u003C\u002F",[36,70199,1040],{"class":52042},[36,70201,52049],{"class":49},[36,70203,70204,70206,70208,70211,70213],{"class":38,"line":8724},[36,70205,56044],{"class":49},[36,70207,1040],{"class":52042},[36,70209,70210],{"class":49},">年龄\u003C\u002F",[36,70212,1040],{"class":52042},[36,70214,52049],{"class":49},[36,70216,70217,70219,70221,70224,70226],{"class":38,"line":8730},[36,70218,56044],{"class":49},[36,70220,1040],{"class":52042},[36,70222,70223],{"class":49},">性别\u003C\u002F",[36,70225,1040],{"class":52042},[36,70227,52049],{"class":49},[36,70229,70230,70232,70234,70237,70239],{"class":38,"line":8757},[36,70231,56044],{"class":49},[36,70233,1040],{"class":52042},[36,70235,70236],{"class":49},">薪资\u003C\u002F",[36,70238,1040],{"class":52042},[36,70240,52049],{"class":49},[36,70242,70243,70245,70247,70250,70252],{"class":38,"line":8762},[36,70244,56044],{"class":49},[36,70246,1040],{"class":52042},[36,70248,70249],{"class":49},">就业城市\u003C\u002F",[36,70251,1040],{"class":52042},[36,70253,52049],{"class":49},[36,70255,70256,70258,70260,70263,70265],{"class":38,"line":8768},[36,70257,56044],{"class":49},[36,70259,1040],{"class":52042},[36,70261,70262],{"class":49},">操作\u003C\u002F",[36,70264,1040],{"class":52042},[36,70266,52049],{"class":49},[36,70268,70269,70271,70273],{"class":38,"line":8780},[36,70270,56149],{"class":49},[36,70272,1037],{"class":52042},[36,70274,52049],{"class":49},[36,70276,70277,70279,70281],{"class":38,"line":8792},[36,70278,52518],{"class":49},[36,70280,1034],{"class":52042},[36,70282,52049],{"class":49},[36,70284,70285,70287,70289],{"class":38,"line":8804},[36,70286,52083],{"class":49},[36,70288,1078],{"class":52042},[36,70290,52049],{"class":49},[36,70292,70293],{"class":38,"line":10463},[36,70294,70295],{"class":42},"      \u003C!-- \n",[36,70297,70298],{"class":38,"line":10488},[36,70299,70300],{"class":42},"        \u003Ctr>\n",[36,70302,70303],{"class":38,"line":10511},[36,70304,70305],{"class":42},"          \u003Ctd>1001\u003C\u002Ftd>\n",[36,70307,70308],{"class":38,"line":10535},[36,70309,70310],{"class":42},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[36,70312,70313],{"class":38,"line":10540},[36,70314,70315],{"class":42},"          \u003Ctd>19\u003C\u002Ftd>\n",[36,70317,70318],{"class":38,"line":10545},[36,70319,70320],{"class":42},"          \u003Ctd>男\u003C\u002Ftd>\n",[36,70322,70323],{"class":38,"line":10550},[36,70324,70325],{"class":42},"          \u003Ctd>15000\u003C\u002Ftd>\n",[36,70327,70328],{"class":38,"line":10559},[36,70329,70330],{"class":42},"          \u003Ctd>上海\u003C\u002Ftd>\n",[36,70332,70333],{"class":38,"line":10564},[36,70334,70335],{"class":42},"          \u003Ctd>\n",[36,70337,70338],{"class":38,"line":10570},[36,70339,70340],{"class":42},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[36,70342,70343],{"class":38,"line":10591},[36,70344,70345],{"class":42},"          \u003C\u002Ftd>\n",[36,70347,70348],{"class":38,"line":10597},[36,70349,70350],{"class":42},"        \u003C\u002Ftr> \n",[36,70352,70353],{"class":38,"line":10611},[36,70354,70355],{"class":42},"        -->\n",[36,70357,70358,70360,70362],{"class":38,"line":10617},[36,70359,52518],{"class":49},[36,70361,1078],{"class":52042},[36,70363,52049],{"class":49},[36,70365,70366,70368,70370],{"class":38,"line":10644},[36,70367,53159],{"class":49},[36,70369,1031],{"class":52042},[36,70371,52049],{"class":49},[36,70373,70374,70376,70378],{"class":38,"line":10653},[36,70375,52886],{"class":49},[36,70377,52555],{"class":52042},[36,70379,52049],{"class":49},[36,70381,70382],{"class":38,"line":10659},[36,70383,60700],{"class":42},[36,70385,70386,70388,70391,70393,70395,70397,70399,70402],{"class":38,"line":10667},[36,70387,11966],{"class":53},[36,70389,70390],{"class":60}," uname",[36,70392,14308],{"class":53},[36,70394,55138],{"class":49},[36,70396,55141],{"class":2713},[36,70398,901],{"class":49},[36,70400,70401],{"class":998},"'.uname'",[36,70403,75],{"class":49},[36,70405,70406,70408,70410,70412,70414,70416,70418,70421],{"class":38,"line":10672},[36,70407,11966],{"class":53},[36,70409,16433],{"class":60},[36,70411,14308],{"class":53},[36,70413,55138],{"class":49},[36,70415,55141],{"class":2713},[36,70417,901],{"class":49},[36,70419,70420],{"class":998},"'.age'",[36,70422,75],{"class":49},[36,70424,70425,70427,70430,70432,70434,70436,70438,70441],{"class":38,"line":17348},[36,70426,11966],{"class":53},[36,70428,70429],{"class":60}," gender",[36,70431,14308],{"class":53},[36,70433,55138],{"class":49},[36,70435,55141],{"class":2713},[36,70437,901],{"class":49},[36,70439,70440],{"class":998},"'.gender'",[36,70442,75],{"class":49},[36,70444,70445,70447,70450,70452,70454,70456,70458,70461],{"class":38,"line":17354},[36,70446,11966],{"class":53},[36,70448,70449],{"class":60}," salary",[36,70451,14308],{"class":53},[36,70453,55138],{"class":49},[36,70455,55141],{"class":2713},[36,70457,901],{"class":49},[36,70459,70460],{"class":998},"'.salary'",[36,70462,75],{"class":49},[36,70464,70465,70467,70470,70472,70474,70476,70478,70481],{"class":38,"line":17377},[36,70466,11966],{"class":53},[36,70468,70469],{"class":60}," city",[36,70471,14308],{"class":53},[36,70473,55138],{"class":49},[36,70475,55141],{"class":2713},[36,70477,901],{"class":49},[36,70479,70480],{"class":998},"'.city'",[36,70482,75],{"class":49},[36,70484,70485,70487,70490,70492,70494,70496,70498,70501],{"class":38,"line":17383},[36,70486,11966],{"class":53},[36,70488,70489],{"class":60}," tbody",[36,70491,14308],{"class":53},[36,70493,55138],{"class":49},[36,70495,55141],{"class":2713},[36,70497,901],{"class":49},[36,70499,70500],{"class":998},"'tbody'",[36,70502,75],{"class":49},[36,70504,70505],{"class":38,"line":17406},[36,70506,194],{"emptyLinePlaceholder":193},[36,70508,70509],{"class":38,"line":17420},[36,70510,70511],{"class":42},"    \u002F\u002F 获取所有带有name属性的元素\n",[36,70513,70514,70516,70519,70521,70523,70525,70527,70530],{"class":38,"line":17440},[36,70515,11966],{"class":53},[36,70517,70518],{"class":60}," items",[36,70520,14308],{"class":53},[36,70522,55138],{"class":49},[36,70524,56423],{"class":2713},[36,70526,901],{"class":49},[36,70528,70529],{"class":998},"'[name]'",[36,70531,75],{"class":49},[36,70533,70534],{"class":38,"line":17446},[36,70535,70536],{"class":42},"    \u002F\u002F 声明一个空的数组\n",[36,70538,70539,70541,70543,70545],{"class":38,"line":17457},[36,70540,11966],{"class":53},[36,70542,58437],{"class":60},[36,70544,14308],{"class":53},[36,70546,52580],{"class":49},[36,70548,70549],{"class":38,"line":17480},[36,70550,70551],{"class":42},"    \u002F\u002F 1.录入模块\n",[36,70553,70554],{"class":38,"line":17502},[36,70555,70556],{"class":42},"    \u002F\u002F 1.1这是一个表单提交事件\n",[36,70558,70559,70561,70564,70566,70568,70570,70572,70575],{"class":38,"line":17507},[36,70560,11966],{"class":53},[36,70562,70563],{"class":60}," info",[36,70565,14308],{"class":53},[36,70567,55138],{"class":49},[36,70569,55141],{"class":2713},[36,70571,901],{"class":49},[36,70573,70574],{"class":998},"'.info'",[36,70576,75],{"class":49},[36,70578,70579,70582,70584,70586,70589,70591,70593,70595,70597],{"class":38,"line":17513},[36,70580,70581],{"class":49},"    info.",[36,70583,58555],{"class":2713},[36,70585,901],{"class":49},[36,70587,70588],{"class":998},"'submit'",[36,70590,154],{"class":49},[36,70592,55191],{"class":53},[36,70594,2408],{"class":49},[36,70596,969],{"class":416},[36,70598,13186],{"class":49},[36,70600,70601],{"class":38,"line":17527},[36,70602,70603],{"class":42},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[36,70605,70606,70609,70612],{"class":38,"line":17540},[36,70607,70608],{"class":49},"      e.",[36,70610,70611],{"class":2713},"preventDefault",[36,70613,2726],{"class":49},[36,70615,70616],{"class":38,"line":17545},[36,70617,60754],{"class":42},[36,70619,70620],{"class":38,"line":17559},[36,70621,194],{"emptyLinePlaceholder":193},[36,70623,70624],{"class":38,"line":17564},[36,70625,70626],{"class":42},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[36,70628,70629],{"class":38,"line":17570},[36,70630,70631],{"class":42},"      \u002F\u002F 先遍历循环\n",[36,70633,70634,70636,70638,70640,70642,70644,70646,70648,70650,70653,70655,70657,70659],{"class":38,"line":17575},[36,70635,53026],{"class":53},[36,70637,2408],{"class":49},[36,70639,52589],{"class":53},[36,70641,10185],{"class":49},[36,70643,54],{"class":53},[36,70645,4842],{"class":60},[36,70647,10192],{"class":49},[36,70649,1789],{"class":53},[36,70651,70652],{"class":49}," items.",[36,70654,52710],{"class":60},[36,70656,3963],{"class":49},[36,70658,3042],{"class":53},[36,70660,13186],{"class":49},[36,70662,70663,70665,70668,70670,70673],{"class":38,"line":17589},[36,70664,3246],{"class":53},[36,70666,70667],{"class":49}," (items[i].value ",[36,70669,55228],{"class":53},[36,70671,70672],{"class":998}," ''",[36,70674,13186],{"class":49},[36,70676,70677,70680,70683,70685,70688],{"class":38,"line":17594},[36,70678,70679],{"class":53},"          return",[36,70681,70682],{"class":2713}," alert",[36,70684,901],{"class":49},[36,70686,70687],{"class":998},"'输入内容不能为空'",[36,70689,75],{"class":49},[36,70691,70692],{"class":38,"line":17599},[36,70693,3278],{"class":49},[36,70695,70696],{"class":38,"line":17613},[36,70697,53140],{"class":49},[36,70699,70700],{"class":38,"line":17625},[36,70701,194],{"emptyLinePlaceholder":193},[36,70703,70704],{"class":38,"line":17630},[36,70705,70706],{"class":42},"      \u002F\u002F 创建新的对象\n",[36,70708,70709,70711,70714,70716],{"class":38,"line":17643},[36,70710,58970],{"class":53},[36,70712,70713],{"class":60}," obj",[36,70715,14308],{"class":53},[36,70717,16316],{"class":49},[36,70719,70720,70723,70725,70727,70729],{"class":38,"line":17648},[36,70721,70722],{"class":49},"        stuID: arr.",[36,70724,52710],{"class":60},[36,70726,46308],{"class":53},[36,70728,25863],{"class":60},[36,70730,32208],{"class":49},[36,70732,70733],{"class":38,"line":17653},[36,70734,70735],{"class":49},"        uname: uname.value,\n",[36,70737,70738],{"class":38,"line":17658},[36,70739,70740],{"class":49},"        age: age.value,\n",[36,70742,70743],{"class":38,"line":17671},[36,70744,70745],{"class":49},"        gender: gender.value,\n",[36,70747,70748],{"class":38,"line":17676},[36,70749,70750],{"class":49},"        salary: salary.value,\n",[36,70752,70753],{"class":38,"line":33375},[36,70754,70755],{"class":49},"        city: city.value\n",[36,70757,70758],{"class":38,"line":33381},[36,70759,53140],{"class":49},[36,70761,70762],{"class":38,"line":33387},[36,70763,70764],{"class":42},"      \u002F\u002F console.log(obj);\n",[36,70766,70767],{"class":38,"line":33393},[36,70768,70769],{"class":42},"      \u002F\u002F 追加到数组里面\n",[36,70771,70772,70774,70776],{"class":38,"line":33399},[36,70773,58749],{"class":49},[36,70775,52626],{"class":2713},[36,70777,70778],{"class":49},"(obj)\n",[36,70780,70781],{"class":38,"line":33410},[36,70782,70783],{"class":42},"      \u002F\u002F console.log(arr);\n",[36,70785,70786],{"class":38,"line":33416},[36,70787,70788],{"class":42},"      \u002F\u002F 清空表单  reset重置表单\n",[36,70790,70791,70794,70796,70799],{"class":38,"line":33436},[36,70792,70793],{"class":60},"      this",[36,70795,1440],{"class":49},[36,70797,70798],{"class":2713},"reset",[36,70800,2726],{"class":49},[36,70802,70803],{"class":38,"line":33442},[36,70804,70805],{"class":42},"      \u002F\u002F 调用渲染函数\n",[36,70807,70808,70811],{"class":38,"line":33453},[36,70809,70810],{"class":2713},"      render",[36,70812,2726],{"class":49},[36,70814,70815],{"class":38,"line":33459},[36,70816,34203],{"class":49},[36,70818,70819],{"class":38,"line":33465},[36,70820,70821],{"class":42},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[36,70823,70824,70827,70830],{"class":38,"line":33471},[36,70825,70826],{"class":53},"    function",[36,70828,70829],{"class":2713}," render",[36,70831,11600],{"class":49},[36,70833,70834],{"class":38,"line":33477},[36,70835,70836],{"class":42},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[36,70838,70839,70842,70844],{"class":38,"line":33483},[36,70840,70841],{"class":49},"      tbody.innerHTML ",[36,70843,54],{"class":53},[36,70845,70846],{"class":998}," ''\n",[36,70848,70849],{"class":38,"line":33489},[36,70850,70851],{"class":42},"      \u002F\u002F 遍历数组\n",[36,70853,70854,70856,70858,70860,70862,70864,70866,70868,70870,70872,70874,70876,70878],{"class":38,"line":33495},[36,70855,53026],{"class":53},[36,70857,2408],{"class":49},[36,70859,52589],{"class":53},[36,70861,10185],{"class":49},[36,70863,54],{"class":53},[36,70865,4842],{"class":60},[36,70867,10192],{"class":49},[36,70869,1789],{"class":53},[36,70871,52707],{"class":49},[36,70873,52710],{"class":60},[36,70875,3963],{"class":49},[36,70877,3042],{"class":53},[36,70879,13186],{"class":49},[36,70881,70882,70884,70887,70889,70891,70894,70896,70899],{"class":38,"line":33515},[36,70883,62012],{"class":53},[36,70885,70886],{"class":60}," tr",[36,70888,14308],{"class":53},[36,70890,55138],{"class":49},[36,70892,70893],{"class":2713},"createElement",[36,70895,901],{"class":49},[36,70897,70898],{"class":998},"'tr'",[36,70900,75],{"class":49},[36,70902,70903,70906,70908],{"class":38,"line":33521},[36,70904,70905],{"class":49},"        tr.innerHTML ",[36,70907,54],{"class":53},[36,70909,70910],{"class":998}," `\n",[36,70912,70913,70916,70918,70920,70922,70925,70928],{"class":38,"line":33537},[36,70914,70915],{"class":998},"        \u003Ctd>${",[36,70917,4629],{"class":49},[36,70919,1769],{"class":998},[36,70921,1326],{"class":49},[36,70923,70924],{"class":998},"].",[36,70926,70927],{"class":49},"stuID",[36,70929,70930],{"class":998},"}\u003C\u002Ftd>\n",[36,70932,70933,70936,70938,70940,70942,70944,70947],{"class":38,"line":33543},[36,70934,70935],{"class":998},"          \u003Ctd>${",[36,70937,4629],{"class":49},[36,70939,1769],{"class":998},[36,70941,1326],{"class":49},[36,70943,70924],{"class":998},[36,70945,70946],{"class":49},"uname",[36,70948,70930],{"class":998},[36,70950,70951,70953,70955,70957,70959,70961,70964],{"class":38,"line":33557},[36,70952,70935],{"class":998},[36,70954,4629],{"class":49},[36,70956,1769],{"class":998},[36,70958,1326],{"class":49},[36,70960,70924],{"class":998},[36,70962,70963],{"class":49},"age",[36,70965,70930],{"class":998},[36,70967,70968,70970,70972,70974,70976,70978,70981],{"class":38,"line":33563},[36,70969,70935],{"class":998},[36,70971,4629],{"class":49},[36,70973,1769],{"class":998},[36,70975,1326],{"class":49},[36,70977,70924],{"class":998},[36,70979,70980],{"class":49},"gender",[36,70982,70930],{"class":998},[36,70984,70985,70987,70989,70991,70993,70995,70998],{"class":38,"line":33578},[36,70986,70935],{"class":998},[36,70988,4629],{"class":49},[36,70990,1769],{"class":998},[36,70992,1326],{"class":49},[36,70994,70924],{"class":998},[36,70996,70997],{"class":49},"salary",[36,70999,70930],{"class":998},[36,71001,71002,71004,71006,71008,71010,71012,71015],{"class":38,"line":33584},[36,71003,70935],{"class":998},[36,71005,4629],{"class":49},[36,71007,1769],{"class":998},[36,71009,1326],{"class":49},[36,71011,70924],{"class":998},[36,71013,71014],{"class":49},"city",[36,71016,70930],{"class":998},[36,71018,71019],{"class":38,"line":33593},[36,71020,70335],{"class":998},[36,71022,71023,71026,71028],{"class":38,"line":33599},[36,71024,71025],{"class":998},"            \u003Ca href=\"javascript:\" data-id=${",[36,71027,1326],{"class":49},[36,71029,71030],{"class":998},"}>删除\u003C\u002Fa>\n",[36,71032,71033],{"class":38,"line":33608},[36,71034,71035],{"class":998},"          \u003C\u002Ftd> \n",[36,71037,71038],{"class":38,"line":33614},[36,71039,71040],{"class":998},"          `\n",[36,71042,71043],{"class":38,"line":33620},[36,71044,71045],{"class":42},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[36,71047,71048,71051,71054],{"class":38,"line":33629},[36,71049,71050],{"class":49},"        tbody.",[36,71052,71053],{"class":2713},"appendChild",[36,71055,71056],{"class":49},"(tr)\n",[36,71058,71059],{"class":38,"line":33635},[36,71060,53140],{"class":49},[36,71062,71063],{"class":38,"line":33646},[36,71064,2937],{"class":49},[36,71066,71067],{"class":38,"line":33652},[36,71068,194],{"emptyLinePlaceholder":193},[36,71070,71071],{"class":38,"line":33671},[36,71072,71073],{"class":42},"    \u002F\u002F 3.删除委托\n",[36,71075,71076],{"class":38,"line":33677},[36,71077,71078],{"class":42},"    \u002F\u002F 3.1 事件委托 tbody\n",[36,71080,71081,71084,71086,71088,71090,71092,71094,71096,71098],{"class":38,"line":33688},[36,71082,71083],{"class":49},"    tbody.",[36,71085,58555],{"class":2713},[36,71087,901],{"class":49},[36,71089,58560],{"class":998},[36,71091,154],{"class":49},[36,71093,55191],{"class":53},[36,71095,2408],{"class":49},[36,71097,969],{"class":416},[36,71099,13186],{"class":49},[36,71101,71102,71104,71106,71108,71110],{"class":38,"line":33694},[36,71103,55222],{"class":53},[36,71105,67776],{"class":49},[36,71107,55228],{"class":53},[36,71109,68998],{"class":998},[36,71111,13186],{"class":49},[36,71113,71114],{"class":38,"line":33714},[36,71115,71116],{"class":42},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[36,71118,71119],{"class":38,"line":33730},[36,71120,71121],{"class":42},"        \u002F\u002F console.log(e.target.dataset.id);\n",[36,71123,71124],{"class":38,"line":33736},[36,71125,71126],{"class":42},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[36,71128,71129,71132,71134,71137,71139],{"class":38,"line":33750},[36,71130,71131],{"class":49},"        arr.",[36,71133,58752],{"class":2713},[36,71135,71136],{"class":49},"(e.target.dataset.id, ",[36,71138,61],{"class":60},[36,71140,75],{"class":49},[36,71142,71143],{"class":38,"line":33756},[36,71144,71145],{"class":42},"        \u002F\u002F 重新渲染一次\n",[36,71147,71148,71151],{"class":38,"line":33762},[36,71149,71150],{"class":2713},"        render",[36,71152,2726],{"class":49},[36,71154,71155],{"class":38,"line":33773},[36,71156,53140],{"class":49},[36,71158,71159],{"class":38,"line":33779},[36,71160,34203],{"class":49},[36,71162,71163,71165,71167],{"class":38,"line":33785},[36,71164,53159],{"class":49},[36,71166,52555],{"class":52042},[36,71168,52049],{"class":49},[36,71170,71171],{"class":38,"line":33795},[36,71172,194],{"emptyLinePlaceholder":193},[36,71174,71175,71177,71179],{"class":38,"line":33801},[36,71176,52527],{"class":49},[36,71178,52542],{"class":52042},[36,71180,52049],{"class":49},[36,71182,71183],{"class":38,"line":33812},[36,71184,194],{"emptyLinePlaceholder":193},[36,71186,71187,71189,71191],{"class":38,"line":33818},[36,71188,52527],{"class":49},[36,71190,51377],{"class":52042},[36,71192,52049],{"class":49},[14,71194,71195],{},"样式：",[26,71197,71201],{"className":71198,"code":71199,"language":71200,"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,71202,71203,71208,71218,71227,71231,71235,71240,71250,71255,71259,71264,71274,71279,71288,71292,71296,71301,71306,71316,71326,71331,71335,71340,71349,71359,71364,71374,71384,71388,71393,71401,71405,71410,71415,71420,71428,71437,71441,71446,71455,71459,71464,71473,71477,71482,71491,71500,71508,71512,71517,71526,71536,71545,71555,71561,71570,71580,71590,71594,71599,71608,71616,71626,71634,71643,71652,71662,71670,71674,71679,71688],{"__ignoreMap":31},[36,71204,71205],{"class":38,"line":39},[36,71206,71207],{"class":49},"* {\n",[36,71209,71210,71213,71215],{"class":38,"line":46},[36,71211,71212],{"class":52042},"  margin",[36,71214,52179],{"class":49},[36,71216,71217],{"class":998},"0;\n",[36,71219,71220,71223,71225],{"class":38,"line":78},[36,71221,71222],{"class":998},"  padding",[36,71224,52179],{"class":49},[36,71226,71217],{"class":998},[36,71228,71229],{"class":38,"line":125},[36,71230,2315],{"class":49},[36,71232,71233],{"class":38,"line":131},[36,71234,194],{"emptyLinePlaceholder":193},[36,71236,71237],{"class":38,"line":396},[36,71238,71239],{"class":998},"a {\n",[36,71241,71242,71245,71247],{"class":38,"line":407},[36,71243,71244],{"class":52042},"  text-decoration",[36,71246,52179],{"class":49},[36,71248,71249],{"class":998},"none;\n",[36,71251,71252],{"class":38,"line":2061},[36,71253,71254],{"class":998},"  color:#721c24;\n",[36,71256,71257],{"class":38,"line":2067},[36,71258,2315],{"class":49},[36,71260,71261],{"class":38,"line":2079},[36,71262,71263],{"class":998},"h1 {\n",[36,71265,71266,71269,71271],{"class":38,"line":2362},[36,71267,71268],{"class":52042},"  text-align",[36,71270,52179],{"class":49},[36,71272,71273],{"class":998},"center;\n",[36,71275,71276],{"class":38,"line":2367},[36,71277,71278],{"class":998},"  color:#333;\n",[36,71280,71281,71283,71285],{"class":38,"line":2373},[36,71282,71212],{"class":52042},[36,71284,52179],{"class":49},[36,71286,71287],{"class":998},"20px 0;\n",[36,71289,71290],{"class":38,"line":2378},[36,71291,3423],{"class":49},[36,71293,71294],{"class":38,"line":2392},[36,71295,2315],{"class":49},[36,71297,71298],{"class":38,"line":2397},[36,71299,71300],{"class":998},"table {\n",[36,71302,71303],{"class":38,"line":2403},[36,71304,71305],{"class":998},"  margin:0 auto;\n",[36,71307,71308,71311,71313],{"class":38,"line":2424},[36,71309,71310],{"class":52042},"  width",[36,71312,52179],{"class":49},[36,71314,71315],{"class":998},"800px;\n",[36,71317,71318,71321,71323],{"class":38,"line":2429},[36,71319,71320],{"class":52042},"  border-collapse",[36,71322,52179],{"class":49},[36,71324,71325],{"class":998},"collapse;\n",[36,71327,71328],{"class":38,"line":2443},[36,71329,71330],{"class":998},"  color:#004085;\n",[36,71332,71333],{"class":38,"line":2448},[36,71334,2315],{"class":49},[36,71336,71337],{"class":38,"line":2477},[36,71338,71339],{"class":998},"th {\n",[36,71341,71342,71344,71346],{"class":38,"line":2482},[36,71343,71222],{"class":52042},[36,71345,52179],{"class":49},[36,71347,71348],{"class":998},"10px;\n",[36,71350,71351,71354,71356],{"class":38,"line":2499},[36,71352,71353],{"class":52042},"  background",[36,71355,52179],{"class":49},[36,71357,71358],{"class":42},"#cfe5ff;\n",[36,71360,71361],{"class":38,"line":2504},[36,71362,71363],{"class":49},"  \n",[36,71365,71366,71369,71371],{"class":38,"line":2509},[36,71367,71368],{"class":52042},"  font-size",[36,71370,52179],{"class":49},[36,71372,71373],{"class":998},"20px;\n",[36,71375,71376,71379,71381],{"class":38,"line":2514},[36,71377,71378],{"class":52042},"  font-weight",[36,71380,52179],{"class":49},[36,71382,71383],{"class":998},"400;\n",[36,71385,71386],{"class":38,"line":2528},[36,71387,2315],{"class":49},[36,71389,71390],{"class":38,"line":2533},[36,71391,71392],{"class":998},"td,th {\n",[36,71394,71395,71398],{"class":38,"line":3326},[36,71396,71397],{"class":998},"  border:1px solid",[36,71399,71400],{"class":42}," #b8daff;\n",[36,71402,71403],{"class":38,"line":3340},[36,71404,2315],{"class":49},[36,71406,71407],{"class":38,"line":3348},[36,71408,71409],{"class":998},"td {\n",[36,71411,71412],{"class":38,"line":3353},[36,71413,71414],{"class":998},"  padding:10px;\n",[36,71416,71417],{"class":38,"line":3359},[36,71418,71419],{"class":998},"  color:#666;\n",[36,71421,71422,71424,71426],{"class":38,"line":3365},[36,71423,71268],{"class":52042},[36,71425,52179],{"class":49},[36,71427,71273],{"class":998},[36,71429,71430,71432,71434],{"class":38,"line":3370},[36,71431,71368],{"class":52042},[36,71433,52179],{"class":49},[36,71435,71436],{"class":998},"16px;\n",[36,71438,71439],{"class":38,"line":8695},[36,71440,2315],{"class":49},[36,71442,71443],{"class":38,"line":8719},[36,71444,71445],{"class":998},"tbody tr {\n",[36,71447,71448,71450,71452],{"class":38,"line":8724},[36,71449,71353],{"class":52042},[36,71451,52179],{"class":49},[36,71453,71454],{"class":42},"#fff;\n",[36,71456,71457],{"class":38,"line":8730},[36,71458,2315],{"class":49},[36,71460,71461],{"class":38,"line":8757},[36,71462,71463],{"class":998},"tbody tr:hover {\n",[36,71465,71466,71468,71470],{"class":38,"line":8762},[36,71467,71353],{"class":52042},[36,71469,52179],{"class":49},[36,71471,71472],{"class":42},"#e1ecf8;\n",[36,71474,71475],{"class":38,"line":8768},[36,71476,2315],{"class":49},[36,71478,71479],{"class":38,"line":8780},[36,71480,71481],{"class":998},".info {\n",[36,71483,71484,71486,71488],{"class":38,"line":8792},[36,71485,71310],{"class":52042},[36,71487,52179],{"class":49},[36,71489,71490],{"class":998},"900px;\n",[36,71492,71493,71495,71497],{"class":38,"line":8804},[36,71494,71212],{"class":52042},[36,71496,52179],{"class":49},[36,71498,71499],{"class":998},"50px auto;\n",[36,71501,71502,71504,71506],{"class":38,"line":10463},[36,71503,71268],{"class":52042},[36,71505,52179],{"class":49},[36,71507,71273],{"class":998},[36,71509,71510],{"class":38,"line":10488},[36,71511,2315],{"class":49},[36,71513,71514],{"class":38,"line":10511},[36,71515,71516],{"class":998},".info  input, .info select {\n",[36,71518,71519,71521,71523],{"class":38,"line":10535},[36,71520,71310],{"class":52042},[36,71522,52179],{"class":49},[36,71524,71525],{"class":998},"80px;\n",[36,71527,71528,71531,71533],{"class":38,"line":10540},[36,71529,71530],{"class":52042},"  height",[36,71532,52179],{"class":49},[36,71534,71535],{"class":998},"27px;\n",[36,71537,71538,71541,71543],{"class":38,"line":10545},[36,71539,71540],{"class":52042},"  outline",[36,71542,52179],{"class":49},[36,71544,71249],{"class":998},[36,71546,71547,71550,71552],{"class":38,"line":10550},[36,71548,71549],{"class":52042},"  border-radius",[36,71551,52179],{"class":49},[36,71553,71554],{"class":998},"5px;\n",[36,71556,71557,71559],{"class":38,"line":10559},[36,71558,71397],{"class":998},[36,71560,71400],{"class":42},[36,71562,71563,71566,71568],{"class":38,"line":10564},[36,71564,71565],{"class":52042},"  padding-left",[36,71567,52179],{"class":49},[36,71569,71554],{"class":998},[36,71571,71572,71575,71577],{"class":38,"line":10570},[36,71573,71574],{"class":52042},"  box-sizing",[36,71576,52179],{"class":49},[36,71578,71579],{"class":998},"border-box;\n",[36,71581,71582,71585,71587],{"class":38,"line":10591},[36,71583,71584],{"class":52042},"  margin-right",[36,71586,52179],{"class":49},[36,71588,71589],{"class":998},"15px;\n",[36,71591,71592],{"class":38,"line":10597},[36,71593,2315],{"class":49},[36,71595,71596],{"class":38,"line":10611},[36,71597,71598],{"class":998},".info button {\n",[36,71600,71601,71603,71605],{"class":38,"line":10617},[36,71602,71310],{"class":52042},[36,71604,52179],{"class":49},[36,71606,71607],{"class":998},"60px;\n",[36,71609,71610,71612,71614],{"class":38,"line":10644},[36,71611,71530],{"class":52042},[36,71613,52179],{"class":49},[36,71615,71535],{"class":998},[36,71617,71618,71621,71623],{"class":38,"line":10653},[36,71619,71620],{"class":52042},"  background-color",[36,71622,52179],{"class":49},[36,71624,71625],{"class":42},"#004085;\n",[36,71627,71628,71630,71632],{"class":38,"line":10659},[36,71629,71540],{"class":52042},[36,71631,52179],{"class":49},[36,71633,71249],{"class":998},[36,71635,71636,71639,71641],{"class":38,"line":10667},[36,71637,71638],{"class":52042},"  border",[36,71640,52179],{"class":49},[36,71642,71217],{"class":998},[36,71644,71645,71648,71650],{"class":38,"line":10672},[36,71646,71647],{"class":52042},"  color",[36,71649,52179],{"class":49},[36,71651,71454],{"class":42},[36,71653,71654,71657,71659],{"class":38,"line":17348},[36,71655,71656],{"class":52042},"  cursor",[36,71658,52179],{"class":49},[36,71660,71661],{"class":998},"pointer;\n",[36,71663,71664,71666,71668],{"class":38,"line":17354},[36,71665,71549],{"class":52042},[36,71667,52179],{"class":49},[36,71669,71554],{"class":998},[36,71671,71672],{"class":38,"line":17377},[36,71673,2315],{"class":49},[36,71675,71676],{"class":38,"line":17383},[36,71677,71678],{"class":998},".info .age {\n",[36,71680,71681,71683,71685],{"class":38,"line":17406},[36,71682,71310],{"class":52042},[36,71684,52179],{"class":49},[36,71686,71687],{"class":998},"50px;\n",[36,71689,71690],{"class":38,"line":17420},[36,71691,2315],{"class":49},[14,71693,71694],{},"思路：",[14,71696,71697],{},[2212,71698],{"alt":31,"src":71699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,71701,71702],{},[2212,71703],{"alt":31,"src":71704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,71706,71707],{},[2212,71708],{"alt":31,"src":71709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[868,71711,71713],{"id":71712},"_3315-重绘回流","3.3.15 重绘回流",[14,71715,71716],{},[2212,71717],{"alt":31,"src":71718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,71720,71721],{},[2212,71722],{"alt":31,"src":71723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,71725,71726],{},[2212,71727],{"alt":31,"src":71728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[21,71730,71732],{"id":71731},"_34-bom","3.4 BOM",[14,71734,71735],{},[2212,71736],{"alt":31,"src":71737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,71739,71740],{},"平时写的document省略了window而已，实际上是window.document",[14,71742,71743],{},"函数也是这样，调用的时候实际为window.fn()",[14,71745,71746],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,71748,71749],{},"window大部分情况下可以省略",[868,71751,71753],{"id":71752},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,71755,71756],{},"只执行一次",[14,71758,71759],{},[2212,71760],{"alt":31,"src":71761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71763,71764],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71766,71767],{},[2212,71768],{"alt":31,"src":71769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[868,71771,71773],{"id":71772},"_342-js执行机制","3.4.2 JS执行机制",[14,71775,71776],{},[2212,71777],{"alt":31,"src":71778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71780,71781],{},"两个的结果都是1111 3333 2222",[14,71783,71784],{},[2212,71785],{"alt":31,"src":71786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71788,71789],{},[2212,71790],{"alt":31,"src":71791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71793,71794],{},[2212,71795],{"alt":31,"src":71796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71798,71799],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71801,71802],{},"工作流程：",[14,71804,71805],{},[2212,71806],{"alt":31,"src":71807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71809,71810],{},[2212,71811],{"alt":31,"src":71812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71814,71815],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71817,71818],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[868,71820,71822],{"id":71821},"_343-location对象","3.4.3 location对象",[14,71824,71825],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71827,71828],{},[2212,71829],{"alt":31,"src":71830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71832,71833],{},"href可以跳转页面",[851,71835,71836],{},[854,71837,71838],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71840,71841],{},"search得到提交信息之后网站后边的地址",[14,71843,71844],{},[2212,71845],{"alt":31,"src":71846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71848,71849],{},[2212,71850],{"alt":31,"src":71851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[851,71853,71854],{"start":46},[854,71855,71856],{},"hash:这个获取单页面应用#后边的地址",[14,71858,71859],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71861,71862],{},[2212,71863],{"alt":31,"src":71864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[26,71866,71868],{"className":53809,"code":71867,"language":53811,"meta":31,"style":31},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[33,71869,71870,71890,71910],{"__ignoreMap":31},[36,71871,71872,71874,71876,71878,71880,71883,71886,71888],{"class":38,"line":39},[36,71873,52886],{"class":49},[36,71875,50],{"class":52042},[36,71877,61799],{"class":2713},[36,71879,54],{"class":49},[36,71881,71882],{"class":998},"\"#\u002Fmy\"",[36,71884,71885],{"class":49},">我的\u003C\u002F",[36,71887,50],{"class":52042},[36,71889,52049],{"class":49},[36,71891,71892,71894,71896,71898,71900,71903,71906,71908],{"class":38,"line":46},[36,71893,52886],{"class":49},[36,71895,50],{"class":52042},[36,71897,61799],{"class":2713},[36,71899,54],{"class":49},[36,71901,71902],{"class":998},"\"#\u002Ffriend\"",[36,71904,71905],{"class":49},">关注\u003C\u002F",[36,71907,50],{"class":52042},[36,71909,52049],{"class":49},[36,71911,71912,71914,71916,71918,71920,71923,71926,71928],{"class":38,"line":78},[36,71913,52886],{"class":49},[36,71915,50],{"class":52042},[36,71917,61799],{"class":2713},[36,71919,54],{"class":49},[36,71921,71922],{"class":998},"\"#\u002Fdownload\"",[36,71924,71925],{"class":49},">下载\u003C\u002F",[36,71927,50],{"class":52042},[36,71929,52049],{"class":49},[14,71931,71932],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[851,71934,71935],{"start":78},[854,71936,71937,71938,71940,71941,71943],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54458,71939],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54458,71942],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[868,71945,71947],{"id":71946},"_345-navigator对象","3.4.5 navigator对象",[14,71949,71950],{},[2212,71951],{"alt":31,"src":71952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[26,71954,71958],{"className":71955,"code":71956,"language":71957,"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,71959,71960,71965,71976,71988,71993,72044,72085,72090,72103,72115,72120],{"__ignoreMap":31},[36,71961,71962],{"class":38,"line":39},[36,71963,71964],{"class":42},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[36,71966,71967,71969,71971,71973],{"class":38,"line":46},[36,71968,1117],{"class":53},[36,71970,901],{"class":49},[36,71972,55191],{"class":53},[36,71974,71975],{"class":49}," () { \n",[36,71977,71978,71980,71983,71985],{"class":38,"line":78},[36,71979,7539],{"class":53},[36,71981,71982],{"class":60}," userAgent",[36,71984,14308],{"class":53},[36,71986,71987],{"class":49}," navigator.userAgent \n",[36,71989,71990],{"class":38,"line":125},[36,71991,71992],{"class":42},"\u002F\u002F 验证是否为Android或iPhone \n",[36,71994,71995,71997,72000,72002,72005,72008,72010,72012,72015,72017,72020,72024,72026,72028,72030,72033,72035,72037,72039,72041],{"class":38,"line":131},[36,71996,7539],{"class":53},[36,71998,71999],{"class":60}," android",[36,72001,14308],{"class":53},[36,72003,72004],{"class":49}," userAgent.",[36,72006,72007],{"class":2713},"match",[36,72009,901],{"class":49},[36,72011,1466],{"class":998},[36,72013,72014],{"class":48719},"(Android);",[36,72016,1865],{"class":53},[36,72018,72019],{"class":60},"[\\s",[36,72021,72023],{"class":72022},"snhLl","\\\u002F",[36,72025,1819],{"class":60},[36,72027,1365],{"class":53},[36,72029,901],{"class":48719},[36,72031,72032],{"class":60},"[\\d.]",[36,72034,1365],{"class":53},[36,72036,1314],{"class":48719},[36,72038,1865],{"class":53},[36,72040,1466],{"class":998},[36,72042,72043],{"class":49},") \n",[36,72045,72046,72048,72051,72053,72055,72057,72059,72061,72064,72067,72070,72072,72074,72077,72079,72081,72083],{"class":38,"line":396},[36,72047,7539],{"class":53},[36,72049,72050],{"class":60}," iphone",[36,72052,14308],{"class":53},[36,72054,72004],{"class":49},[36,72056,72007],{"class":2713},[36,72058,901],{"class":49},[36,72060,1466],{"class":998},[36,72062,72063],{"class":48719},"(iPhone",[36,72065,72066],{"class":60},"\\s",[36,72068,72069],{"class":48719},"OS)",[36,72071,72066],{"class":60},[36,72073,901],{"class":48719},[36,72075,72076],{"class":60},"[\\d_]",[36,72078,1365],{"class":53},[36,72080,1314],{"class":48719},[36,72082,1466],{"class":998},[36,72084,72043],{"class":49},[36,72086,72087],{"class":38,"line":407},[36,72088,72089],{"class":42},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[36,72091,72092,72094,72097,72100],{"class":38,"line":2061},[36,72093,2281],{"class":53},[36,72095,72096],{"class":49}," (android ",[36,72098,72099],{"class":53},"||",[36,72101,72102],{"class":49}," iphone) { \n",[36,72104,72105,72108,72110,72113],{"class":38,"line":2067},[36,72106,72107],{"class":49},"location.href ",[36,72109,54],{"class":53},[36,72111,72112],{"class":998}," 'http:\u002F\u002Fm.itcast.cn'",[36,72114,3423],{"class":49},[36,72116,72117],{"class":38,"line":2079},[36,72118,72119],{"class":49},"} \n",[36,72121,72122],{"class":38,"line":2362},[36,72123,72124],{"class":49},"})()\n",[868,72126,72128],{"id":72127},"_346-histroy对象","3.4.6 histroy对象",[14,72130,72131],{},[2212,72132],{"alt":31,"src":72133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,72135,72136],{},"浏览器地址的前进与后退!!!",[14,72138,72139],{},"history.back() 等效于 history.go(-1)",[14,72141,72142],{},"history.forward() 等效于 history.go(1)",[21,72144,72146],{"id":72145},"_35-本地存储","3.5 本地存储",[851,72148,72149,72152,72155],{},[854,72150,72151],{},"数据存储在用户浏览器中",[854,72153,72154],{},"设置、读取方便、甚至页面刷新不丢失数据",[854,72156,72157],{},"容量较大，sessionStorage和localStorage约 5M 左右",[868,72159,72161],{"id":72160},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,72163,72164],{},"只能存储字符串",[14,72166,72167],{},[2212,72168],{"alt":31,"src":72169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,72171,72172],{},[2212,72173],{"alt":31,"src":72174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,72176,72177],{},"键值对要加引号,不然就会当变量来看了",[14,72179,72180],{},"localStorage.setItem('uname', 'pink')",[14,72182,72183],{},"刷新之后信息不再丢失",[14,72185,72186],{},"操作key,value会跟着变",[14,72188,72189],{},"删除只删除键就可以,即名字",[14,72191,72180],{},[14,72193,72194],{},"改:",[14,72196,72197],{},"localStorage.setItem('uname','red')",[14,72199,72200],{},"有这个键就是改,没有这个键就是改",[14,72202,72203],{},[2212,72204],{"alt":31,"src":72205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,72207,72208],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,72210,72211],{},[2212,72212],{"alt":31,"src":72213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,72215,72216],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[868,72218,72220],{"id":72219},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,72222,72223],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,72225,72226],{},"特性:",[851,72228,72229,72232,72235,72238],{},[854,72230,72231],{},"生命周期为关闭浏览器窗口",[854,72233,72234],{},"在同一个窗口(页面)下数据可以共享",[854,72236,72237],{},"以键值对的形式存储使用",[854,72239,72240],{},"用法跟localStorage 基本相同",[868,72242,72244],{"id":72243},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,72246,72247],{},"本地只能存储字符串,无法直接存储复杂数据类型",[26,72249,72251],{"className":53809,"code":72250,"language":53811,"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,72252,72253,72261,72266,72271,72276,72281,72285,72290,72295],{"__ignoreMap":31},[36,72254,72255,72257,72259],{"class":38,"line":39},[36,72256,1789],{"class":49},[36,72258,52555],{"class":52042},[36,72260,52049],{"class":49},[36,72262,72263],{"class":38,"line":46},[36,72264,72265],{"class":49},"    const obj = {\n",[36,72267,72268],{"class":38,"line":78},[36,72269,72270],{"class":49},"      uname: 'pink老师',\n",[36,72272,72273],{"class":38,"line":125},[36,72274,72275],{"class":49},"      age: 18,\n",[36,72277,72278],{"class":38,"line":131},[36,72279,72280],{"class":49},"      gender: '女'\n",[36,72282,72283],{"class":38,"line":396},[36,72284,2937],{"class":49},[36,72286,72287],{"class":38,"line":407},[36,72288,72289],{"class":49},"    \u002F\u002F 存储复杂数据类型\n",[36,72291,72292],{"class":38,"line":2061},[36,72293,72294],{"class":49},"    localStorage.setItem('obj', obj)\n",[36,72296,72297,72299,72301],{"class":38,"line":2067},[36,72298,53159],{"class":49},[36,72300,52555],{"class":52042},[36,72302,52049],{"class":49},[14,72304,72305],{},[2212,72306],{"alt":31,"src":72307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,72309,72310],{},"如果获取一下数据:",[14,72312,72313],{},"log(localStorage.getItem('obj'))",[14,72315,72316],{},[2212,72317],{"alt":31,"src":72318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,72320,72321],{},"发现直接存对象是使用不了的!!!",[22742,72323,72325],{"id":72324},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,72327,72328],{},[2212,72329],{"alt":31,"src":72330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[26,72332,72334],{"className":51375,"code":72333,"language":51377,"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,72335,72336,72344,72354,72364,72373,72381,72385,72389,72415,72434,72442,72446,72451,72456],{"__ignoreMap":31},[36,72337,72338,72340,72342],{"class":38,"line":39},[36,72339,1789],{"class":49},[36,72341,52555],{"class":52042},[36,72343,52049],{"class":49},[36,72345,72346,72348,72350,72352],{"class":38,"line":46},[36,72347,11966],{"class":53},[36,72349,70713],{"class":60},[36,72351,14308],{"class":53},[36,72353,16316],{"class":49},[36,72355,72356,72359,72362],{"class":38,"line":78},[36,72357,72358],{"class":49},"      uname: ",[36,72360,72361],{"class":998},"'pink老师'",[36,72363,32208],{"class":49},[36,72365,72366,72369,72371],{"class":38,"line":125},[36,72367,72368],{"class":49},"      age: ",[36,72370,1532],{"class":60},[36,72372,32208],{"class":49},[36,72374,72375,72378],{"class":38,"line":131},[36,72376,72377],{"class":49},"      gender: ",[36,72379,72380],{"class":998},"'女'\n",[36,72382,72383],{"class":38,"line":396},[36,72384,2937],{"class":49},[36,72386,72387],{"class":38,"line":407},[36,72388,72289],{"class":42},[36,72390,72391,72394,72397,72399,72402,72404,72407,72409,72412],{"class":38,"line":2061},[36,72392,72393],{"class":49},"  localStorage.",[36,72395,72396],{"class":2713},"setItem",[36,72398,901],{"class":49},[36,72400,72401],{"class":998},"'obj'",[36,72403,154],{"class":49},[36,72405,72406],{"class":60},"JSON",[36,72408,1440],{"class":49},[36,72410,72411],{"class":2713},"stringify",[36,72413,72414],{"class":49},"(obj))\n",[36,72416,72417,72420,72422,72425,72428,72430,72432],{"class":38,"line":2067},[36,72418,72419],{"class":49},"  console.",[36,72421,58989],{"class":2713},[36,72423,72424],{"class":49},"(localStorage.",[36,72426,72427],{"class":2713},"getItem",[36,72429,901],{"class":49},[36,72431,72401],{"class":998},[36,72433,31239],{"class":49},[36,72435,72436,72438,72440],{"class":38,"line":2079},[36,72437,53159],{"class":49},[36,72439,52555],{"class":52042},[36,72441,52049],{"class":49},[36,72443,72444],{"class":38,"line":2362},[36,72445,71363],{"class":49},[36,72447,72448],{"class":38,"line":2367},[36,72449,72450],{"class":49},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[36,72452,72453],{"class":38,"line":2373},[36,72454,72455],{"class":49},"  类型是字符串的\n",[36,72457,72458],{"class":38,"line":2378},[36,72459,72460],{"class":49},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22742,72462,72464],{"id":72463},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,72466,72467],{},[2212,72468],{"alt":31,"src":72469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,72471,72472],{},[2212,72473],{"alt":31,"src":72474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[26,72476,72478],{"className":53809,"code":72477,"language":53811,"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,72479,72480,72488,72492,72496,72500,72504,72508,72513,72518,72523,72528,72533,72538,72543,72548],{"__ignoreMap":31},[36,72481,72482,72484,72486],{"class":38,"line":39},[36,72483,52886],{"class":49},[36,72485,52555],{"class":52042},[36,72487,52049],{"class":49},[36,72489,72490],{"class":38,"line":46},[36,72491,72265],{"class":49},[36,72493,72494],{"class":38,"line":78},[36,72495,72270],{"class":49},[36,72497,72498],{"class":38,"line":125},[36,72499,72275],{"class":49},[36,72501,72502],{"class":38,"line":131},[36,72503,72280],{"class":49},[36,72505,72506],{"class":38,"line":396},[36,72507,2937],{"class":49},[36,72509,72510],{"class":38,"line":407},[36,72511,72512],{"class":49},"    \u002F\u002F 1.存储复杂数据类型\n",[36,72514,72515],{"class":38,"line":2061},[36,72516,72517],{"class":49},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[36,72519,72520],{"class":38,"line":2067},[36,72521,72522],{"class":49},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[36,72524,72525],{"class":38,"line":2079},[36,72526,72527],{"class":49},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[36,72529,72530],{"class":38,"line":2362},[36,72531,72532],{"class":49},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[36,72534,72535],{"class":38,"line":2367},[36,72536,72537],{"class":49},"    \u002F\u002F 取\n",[36,72539,72540],{"class":38,"line":2373},[36,72541,72542],{"class":49},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[36,72544,72545],{"class":38,"line":2378},[36,72546,72547],{"class":49},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[36,72549,72550,72552,72554],{"class":38,"line":2392},[36,72551,53159],{"class":49},[36,72553,52555],{"class":52042},[36,72555,52049],{"class":49},[14,72557,72558],{},[2212,72559],{"alt":31,"src":72560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[868,72562,72564],{"id":72563},"_356-数组map方法","3.5.6 数组map方法",[14,72566,72567],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,72569,72570],{},[2212,72571],{"alt":31,"src":72572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,72574,72575],{},[2212,72576],{"alt":31,"src":72577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,72579,72580,72583],{},[1043,72581,72582],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,72585,72586],{},"map有返回值，但是forEach没有返回值",[14,72588,72589],{},"map是个方法。用的时候要加 ()",[14,72591,72592],{},"map返回的是一个数组",[868,72594,72596],{"id":72595},"_357-数组中join方法","3.5.7 数组中join方法",[14,72598,72599],{},[2212,72600],{"alt":31,"src":72601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,72603,72604],{},"类似于python中拼接字符串一样！",[851,72606,72607,72610,72613],{},[854,72608,72609],{},"小括号为空则逗号分开",[854,72611,72612],{},"小括号为空字符串 ''，则元素之间没有分隔符",[854,72614,72615],{},"小括号用啥符号就用进行分割",[868,72617,72619],{"id":72618},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[851,72621,72622,72625,72628,72631,72634],{},[854,72623,72624],{},"记住本地时间获取快速方式：new Date().toDateString()",[854,72626,72627],{},"尽量减少DOM操作，用好map+join的渲染方式",[854,72629,72630],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[854,72632,72633],{},"return可以实现函数的结束",[854,72635,72636],{},"禁止跳转是 preventDefault() 不要忘记",[26,72638,72640],{"className":51375,"code":72639,"language":51377,"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,72641,72642,72652,72666,72670,72678,72692,72712,72724,72732,72738,72748,72758,72762,72766,72772,72782,72794,72798,72802,72809,72821,72835,72845,72849,72853,72860,72867,72874,72886,72898,72908,72920,72924,72928,72935,72942,72954,72966,72976,72988,73018,73022,73026,73033,73045,73057,73081,73091,73101,73105,73109,73117,73128,73140,73152,73164,73181,73193,73205,73209,73213,73220,73232,73244,73256,73267,73285,73298,73310,73334,73345,73349,73353,73361,73371,73375,73379,73385,73397,73408,73418,73422,73426,73432,73454,73458,73462,73468,73474,73486,73496,73508,73538,73551,73568,73572,73576,73587,73609,73619,73623,73627,73640,73650,73662,73674,73686,73698,73708,73718,73728,73739,73752,73756,73764,73772,73776,73784,73797,73817,73850,73883,73916,73942,73960,73978,73986,74012,74030,74048,74066,74084,74102,74110,74118,74136,74144,74173,74181,74189,74197,74210,74222,74234,74246,74258,74270,74283,74295,74303,74311,74319,74324,74329,74333,74337,74341,74345,74349,74353,74358,74363,74368,74373,74381,74389,74397,74402,74407,74412,74417,74422,74427,74432,74437,74442,74447,74452,74457,74462,74467,74471,74476,74481,74491,74500,74504,74509,74518,74534,74576,74616,74655,74720,74728,74732,74737,74755,74763,74768,74773,74803,74809,74814,74827,74839,74851,74863,74875,74887,74899,74903,74913,74917,74922,74927,74931,74940,74944,74949,74954,74973,74978,74998,75002,75007,75011,75016,75034,75052,75070,75089,75108,75127,75132,75138,75159,75165,75174,75180,75186,75192,75219,75232,75237,75247,75253,75259,75265,75271,75276,75282,75288,75294,75300,75333,75338,75343,75348,75353,75359,75365,75371,75382,75387,75393,75400,75414,75420,75444,75449,75454,75460,75466,75487,75493,75506,75512,75518,75524,75530,75535,75541,75547,75553,75571,75585,75591,75599,75605,75627,75632,75637,75642,75647,75652,75661,75670,75675],{"__ignoreMap":31},[36,72643,72644,72646,72648,72650],{"class":38,"line":39},[36,72645,52039],{"class":49},[36,72647,52043],{"class":52042},[36,72649,52046],{"class":2713},[36,72651,52049],{"class":49},[36,72653,72654,72656,72658,72660,72662,72664],{"class":38,"line":46},[36,72655,1789],{"class":49},[36,72657,51377],{"class":52042},[36,72659,52058],{"class":2713},[36,72661,54],{"class":49},[36,72663,52063],{"class":998},[36,72665,52049],{"class":49},[36,72667,72668],{"class":38,"line":78},[36,72669,194],{"emptyLinePlaceholder":193},[36,72671,72672,72674,72676],{"class":38,"line":125},[36,72673,1789],{"class":49},[36,72675,52076],{"class":52042},[36,72677,52049],{"class":49},[36,72679,72680,72682,72684,72686,72688,72690],{"class":38,"line":131},[36,72681,52886],{"class":49},[36,72683,52086],{"class":52042},[36,72685,52089],{"class":2713},[36,72687,54],{"class":49},[36,72689,52094],{"class":998},[36,72691,52049],{"class":49},[36,72693,72694,72696,72698,72700,72702,72704,72706,72708,72710],{"class":38,"line":396},[36,72695,52886],{"class":49},[36,72697,52086],{"class":52042},[36,72699,15664],{"class":2713},[36,72701,54],{"class":49},[36,72703,52133],{"class":998},[36,72705,52113],{"class":2713},[36,72707,54],{"class":49},[36,72709,52140],{"class":998},[36,72711,52049],{"class":49},[36,72713,72714,72716,72718,72720,72722],{"class":38,"line":407},[36,72715,52886],{"class":49},[36,72717,52149],{"class":52042},[36,72719,52152],{"class":49},[36,72721,52149],{"class":52042},[36,72723,52049],{"class":49},[36,72725,72726,72728,72730],{"class":38,"line":2061},[36,72727,52886],{"class":49},[36,72729,807],{"class":52042},[36,72731,52049],{"class":49},[36,72733,72734,72736],{"class":38,"line":2067},[36,72735,7150],{"class":52042},[36,72737,16316],{"class":49},[36,72739,72740,72742,72744,72746],{"class":38,"line":2079},[36,72741,55437],{"class":60},[36,72743,52179],{"class":49},[36,72745,643],{"class":60},[36,72747,2040],{"class":49},[36,72749,72750,72752,72754,72756],{"class":38,"line":2362},[36,72751,55448],{"class":60},[36,72753,52179],{"class":49},[36,72755,643],{"class":60},[36,72757,2040],{"class":49},[36,72759,72760],{"class":38,"line":2367},[36,72761,2937],{"class":49},[36,72763,72764],{"class":38,"line":2373},[36,72765,194],{"emptyLinePlaceholder":193},[36,72767,72768,72770],{"class":38,"line":2378},[36,72769,58021],{"class":52042},[36,72771,16316],{"class":49},[36,72773,72774,72776,72778,72780],{"class":38,"line":2392},[36,72775,58028],{"class":60},[36,72777,52179],{"class":49},[36,72779,52334],{"class":60},[36,72781,2040],{"class":49},[36,72783,72784,72786,72788,72790,72792],{"class":38,"line":2397},[36,72785,62819],{"class":60},[36,72787,52179],{"class":49},[36,72789,72],{"class":60},[36,72791,52234],{"class":53},[36,72793,2040],{"class":49},[36,72795,72796],{"class":38,"line":2403},[36,72797,2937],{"class":49},[36,72799,72800],{"class":38,"line":2424},[36,72801,194],{"emptyLinePlaceholder":193},[36,72803,72804,72807],{"class":38,"line":2429},[36,72805,72806],{"class":2713},"    .info",[36,72808,16316],{"class":49},[36,72810,72811,72813,72815,72817,72819],{"class":38,"line":2443},[36,72812,55513],{"class":60},[36,72814,52179],{"class":49},[36,72816,52231],{"class":60},[36,72818,52234],{"class":53},[36,72820,2040],{"class":49},[36,72822,72823,72825,72827,72829,72831,72833],{"class":38,"line":2448},[36,72824,55448],{"class":60},[36,72826,52179],{"class":49},[36,72828,332],{"class":60},[36,72830,52234],{"class":53},[36,72832,52298],{"class":60},[36,72834,2040],{"class":49},[36,72836,72837,72839,72841,72843],{"class":38,"line":2477},[36,72838,58028],{"class":60},[36,72840,52179],{"class":49},[36,72842,52334],{"class":60},[36,72844,2040],{"class":49},[36,72846,72847],{"class":38,"line":2482},[36,72848,2937],{"class":49},[36,72850,72851],{"class":38,"line":2499},[36,72852,194],{"emptyLinePlaceholder":193},[36,72854,72855,72858],{"class":38,"line":2504},[36,72856,72857],{"class":2713},"    .uname",[36,72859,32208],{"class":49},[36,72861,72862,72865],{"class":38,"line":2509},[36,72863,72864],{"class":2713},"    .age",[36,72866,32208],{"class":49},[36,72868,72869,72872],{"class":38,"line":2514},[36,72870,72871],{"class":2713},"    .salary",[36,72873,16316],{"class":49},[36,72875,72876,72878,72880,72882,72884],{"class":38,"line":2528},[36,72877,55513],{"class":60},[36,72879,52179],{"class":49},[36,72881,67],{"class":60},[36,72883,52234],{"class":53},[36,72885,2040],{"class":49},[36,72887,72888,72890,72892,72894,72896],{"class":38,"line":2533},[36,72889,55527],{"class":60},[36,72891,52179],{"class":49},[36,72893,72],{"class":60},[36,72895,52234],{"class":53},[36,72897,2040],{"class":49},[36,72899,72900,72902,72904,72906],{"class":38,"line":3326},[36,72901,62522],{"class":60},[36,72903,52179],{"class":49},[36,72905,55479],{"class":60},[36,72907,2040],{"class":49},[36,72909,72910,72912,72914,72916,72918],{"class":38,"line":3340},[36,72911,62492],{"class":60},[36,72913,52179],{"class":49},[36,72915,1457],{"class":60},[36,72917,52234],{"class":53},[36,72919,2040],{"class":49},[36,72921,72922],{"class":38,"line":3348},[36,72923,2937],{"class":49},[36,72925,72926],{"class":38,"line":3353},[36,72927,194],{"emptyLinePlaceholder":193},[36,72929,72930,72933],{"class":38,"line":3359},[36,72931,72932],{"class":2713},"    .gender",[36,72934,32208],{"class":49},[36,72936,72937,72940],{"class":38,"line":3365},[36,72938,72939],{"class":2713},"    .city",[36,72941,16316],{"class":49},[36,72943,72944,72946,72948,72950,72952],{"class":38,"line":3370},[36,72945,55513],{"class":60},[36,72947,52179],{"class":49},[36,72949,67],{"class":60},[36,72951,52234],{"class":53},[36,72953,2040],{"class":49},[36,72955,72956,72958,72960,72962,72964],{"class":38,"line":8695},[36,72957,55527],{"class":60},[36,72959,52179],{"class":49},[36,72961,1705],{"class":60},[36,72963,52234],{"class":53},[36,72965,2040],{"class":49},[36,72967,72968,72970,72972,72974],{"class":38,"line":8719},[36,72969,62522],{"class":60},[36,72971,52179],{"class":49},[36,72973,55479],{"class":60},[36,72975,2040],{"class":49},[36,72977,72978,72980,72982,72984,72986],{"class":38,"line":8724},[36,72979,62492],{"class":60},[36,72981,52179],{"class":49},[36,72983,1457],{"class":60},[36,72985,52234],{"class":53},[36,72987,2040],{"class":49},[36,72989,72990,72992,72994,72996,72998,73000,73003,73005,73007,73009,73012,73014,73016],{"class":38,"line":8730},[36,72991,62719],{"class":60},[36,72993,52179],{"class":49},[36,72995,61],{"class":60},[36,72997,52234],{"class":53},[36,72999,52263],{"class":60},[36,73001,73002],{"class":60}," rgb",[36,73004,901],{"class":49},[36,73006,2472],{"class":60},[36,73008,154],{"class":49},[36,73010,73011],{"class":60},"197",[36,73013,154],{"class":49},[36,73015,73011],{"class":60},[36,73017,3468],{"class":49},[36,73019,73020],{"class":38,"line":8757},[36,73021,2937],{"class":49},[36,73023,73024],{"class":38,"line":8762},[36,73025,194],{"emptyLinePlaceholder":193},[36,73027,73028,73031],{"class":38,"line":8768},[36,73029,73030],{"class":52042},"    button",[36,73032,16316],{"class":49},[36,73034,73035,73037,73039,73041,73043],{"class":38,"line":8780},[36,73036,55527],{"class":60},[36,73038,52179],{"class":49},[36,73040,1705],{"class":60},[36,73042,52234],{"class":53},[36,73044,2040],{"class":49},[36,73046,73047,73049,73051,73053,73055],{"class":38,"line":8792},[36,73048,55513],{"class":60},[36,73050,52179],{"class":49},[36,73052,1368],{"class":60},[36,73054,52234],{"class":53},[36,73056,2040],{"class":49},[36,73058,73059,73061,73063,73066,73068,73070,73072,73075,73077,73079],{"class":38,"line":8804},[36,73060,55626],{"class":60},[36,73062,52179],{"class":49},[36,73064,73065],{"class":60},"rgb",[36,73067,901],{"class":49},[36,73069,1848],{"class":60},[36,73071,154],{"class":49},[36,73073,73074],{"class":60},"187",[36,73076,154],{"class":49},[36,73078,1187],{"class":60},[36,73080,3468],{"class":49},[36,73082,73083,73085,73087,73089],{"class":38,"line":10463},[36,73084,58158],{"class":60},[36,73086,52179],{"class":49},[36,73088,61584],{"class":60},[36,73090,2040],{"class":49},[36,73092,73093,73095,73097,73099],{"class":38,"line":10488},[36,73094,62719],{"class":60},[36,73096,52179],{"class":49},[36,73098,643],{"class":60},[36,73100,2040],{"class":49},[36,73102,73103],{"class":38,"line":10511},[36,73104,2937],{"class":49},[36,73106,73107],{"class":38,"line":10535},[36,73108,194],{"emptyLinePlaceholder":193},[36,73110,73111,73113,73115],{"class":38,"line":10540},[36,73112,73030],{"class":52042},[36,73114,52430],{"class":52042},[36,73116,16316],{"class":49},[36,73118,73119,73121,73123,73126],{"class":38,"line":10545},[36,73120,55751],{"class":60},[36,73122,52179],{"class":49},[36,73124,73125],{"class":60},"inline-block",[36,73127,2040],{"class":49},[36,73129,73130,73132,73134,73136,73138],{"class":38,"line":10550},[36,73131,55513],{"class":60},[36,73133,52179],{"class":49},[36,73135,332],{"class":60},[36,73137,52234],{"class":53},[36,73139,2040],{"class":49},[36,73141,73142,73144,73146,73148,73150],{"class":38,"line":10559},[36,73143,55527],{"class":60},[36,73145,52179],{"class":49},[36,73147,332],{"class":60},[36,73149,52234],{"class":53},[36,73151,2040],{"class":49},[36,73153,73154,73156,73158,73160,73162],{"class":38,"line":10564},[36,73155,58101],{"class":60},[36,73157,52179],{"class":49},[36,73159,1356],{"class":60},[36,73161,52234],{"class":53},[36,73163,2040],{"class":49},[36,73165,73166,73168,73170,73172,73174,73176,73179],{"class":38,"line":10570},[36,73167,62719],{"class":60},[36,73169,52179],{"class":49},[36,73171,61],{"class":60},[36,73173,52234],{"class":53},[36,73175,52263],{"class":60},[36,73177,73178],{"class":60}," #fff",[36,73180,2040],{"class":49},[36,73182,73183,73185,73187,73189,73191],{"class":38,"line":10591},[36,73184,55876],{"class":60},[36,73186,52179],{"class":49},[36,73188,157],{"class":60},[36,73190,52234],{"class":53},[36,73192,2040],{"class":49},[36,73194,73195,73197,73199,73201,73203],{"class":38,"line":10597},[36,73196,62492],{"class":60},[36,73198,52179],{"class":49},[36,73200,61],{"class":60},[36,73202,52234],{"class":53},[36,73204,2040],{"class":49},[36,73206,73207],{"class":38,"line":10611},[36,73208,2937],{"class":49},[36,73210,73211],{"class":38,"line":10617},[36,73212,194],{"emptyLinePlaceholder":193},[36,73214,73215,73218],{"class":38,"line":10644},[36,73216,73217],{"class":2713},"    .total",[36,73219,16316],{"class":49},[36,73221,73222,73224,73226,73228,73230],{"class":38,"line":10653},[36,73223,55513],{"class":60},[36,73225,52179],{"class":49},[36,73227,62371],{"class":60},[36,73229,52234],{"class":53},[36,73231,2040],{"class":49},[36,73233,73234,73236,73238,73240,73242],{"class":38,"line":10659},[36,73235,55527],{"class":60},[36,73237,52179],{"class":49},[36,73239,1286],{"class":60},[36,73241,52234],{"class":53},[36,73243,2040],{"class":49},[36,73245,73246,73248,73250,73252,73254],{"class":38,"line":10667},[36,73247,58101],{"class":60},[36,73249,52179],{"class":49},[36,73251,1286],{"class":60},[36,73253,52234],{"class":53},[36,73255,2040],{"class":49},[36,73257,73258,73260,73262,73265],{"class":38,"line":10672},[36,73259,58028],{"class":60},[36,73261,52179],{"class":49},[36,73263,73264],{"class":60},"right",[36,73266,2040],{"class":49},[36,73268,73269,73271,73273,73275,73277,73279,73281,73283],{"class":38,"line":17348},[36,73270,55448],{"class":60},[36,73272,52179],{"class":49},[36,73274,1286],{"class":60},[36,73276,52234],{"class":53},[36,73278,52298],{"class":60},[36,73280,2788],{"class":60},[36,73282,52234],{"class":53},[36,73284,2040],{"class":49},[36,73286,73287,73290,73292,73294,73296],{"class":38,"line":17354},[36,73288,73289],{"class":60},"      padding-right",[36,73291,52179],{"class":49},[36,73293,332],{"class":60},[36,73295,52234],{"class":53},[36,73297,2040],{"class":49},[36,73299,73300,73302,73304,73306,73308],{"class":38,"line":17377},[36,73301,55664],{"class":60},[36,73303,52179],{"class":49},[36,73305,281],{"class":60},[36,73307,52234],{"class":53},[36,73309,2040],{"class":49},[36,73311,73312,73314,73316,73318,73320,73323,73325,73328,73330,73332],{"class":38,"line":17383},[36,73313,55626],{"class":60},[36,73315,52179],{"class":49},[36,73317,73065],{"class":60},[36,73319,901],{"class":49},[36,73321,73322],{"class":60},"237",[36,73324,154],{"class":49},[36,73326,73327],{"class":60},"235",[36,73329,154],{"class":49},[36,73331,73327],{"class":60},[36,73333,3468],{"class":49},[36,73335,73336,73339,73341,73343],{"class":38,"line":17406},[36,73337,73338],{"class":60},"      box-sizing",[36,73340,52179],{"class":49},[36,73342,61247],{"class":60},[36,73344,2040],{"class":49},[36,73346,73347],{"class":38,"line":17420},[36,73348,2937],{"class":49},[36,73350,73351],{"class":38,"line":17440},[36,73352,194],{"emptyLinePlaceholder":193},[36,73354,73355,73357,73359],{"class":38,"line":17446},[36,73356,73217],{"class":2713},[36,73358,52430],{"class":52042},[36,73360,16316],{"class":49},[36,73362,73363,73365,73367,73369],{"class":38,"line":17457},[36,73364,58158],{"class":60},[36,73366,52179],{"class":49},[36,73368,58163],{"class":60},[36,73370,2040],{"class":49},[36,73372,73373],{"class":38,"line":17480},[36,73374,2937],{"class":49},[36,73376,73377],{"class":38,"line":17502},[36,73378,194],{"emptyLinePlaceholder":193},[36,73380,73381,73383],{"class":38,"line":17507},[36,73382,65765],{"class":52042},[36,73384,16316],{"class":49},[36,73386,73387,73389,73391,73393,73395],{"class":38,"line":17513},[36,73388,55513],{"class":60},[36,73390,52179],{"class":49},[36,73392,62371],{"class":60},[36,73394,52234],{"class":53},[36,73396,2040],{"class":49},[36,73398,73399,73401,73403,73406],{"class":38,"line":17527},[36,73400,55448],{"class":60},[36,73402,52179],{"class":49},[36,73404,73405],{"class":60},"auto",[36,73407,2040],{"class":49},[36,73409,73410,73412,73414,73416],{"class":38,"line":17540},[36,73411,65772],{"class":60},[36,73413,52179],{"class":49},[36,73415,65777],{"class":60},[36,73417,2040],{"class":49},[36,73419,73420],{"class":38,"line":17545},[36,73421,2937],{"class":49},[36,73423,73424],{"class":38,"line":17559},[36,73425,194],{"emptyLinePlaceholder":193},[36,73427,73428,73430],{"class":38,"line":17564},[36,73429,65857],{"class":52042},[36,73431,16316],{"class":49},[36,73433,73434,73436,73438,73440,73442,73444,73446,73448,73450,73452],{"class":38,"line":17570},[36,73435,55626],{"class":60},[36,73437,52179],{"class":49},[36,73439,73065],{"class":60},[36,73441,901],{"class":49},[36,73443,73322],{"class":60},[36,73445,154],{"class":49},[36,73447,73327],{"class":60},[36,73449,154],{"class":49},[36,73451,73327],{"class":60},[36,73453,3468],{"class":49},[36,73455,73456],{"class":38,"line":17575},[36,73457,2937],{"class":49},[36,73459,73460],{"class":38,"line":17589},[36,73461,194],{"emptyLinePlaceholder":193},[36,73463,73464,73466],{"class":38,"line":17594},[36,73465,65857],{"class":52042},[36,73467,32208],{"class":49},[36,73469,73470,73472],{"class":38,"line":17599},[36,73471,65923],{"class":52042},[36,73473,16316],{"class":49},[36,73475,73476,73478,73480,73482,73484],{"class":38,"line":17613},[36,73477,55527],{"class":60},[36,73479,52179],{"class":49},[36,73481,1162],{"class":60},[36,73483,52234],{"class":53},[36,73485,2040],{"class":49},[36,73487,73488,73490,73492,73494],{"class":38,"line":17625},[36,73489,58028],{"class":60},[36,73491,52179],{"class":49},[36,73493,24480],{"class":60},[36,73495,2040],{"class":49},[36,73497,73498,73500,73502,73504,73506],{"class":38,"line":17630},[36,73499,55664],{"class":60},[36,73501,52179],{"class":49},[36,73503,1431],{"class":60},[36,73505,52234],{"class":53},[36,73507,2040],{"class":49},[36,73509,73510,73512,73514,73516,73518,73520,73522,73524,73527,73529,73532,73534,73536],{"class":38,"line":17643},[36,73511,62719],{"class":60},[36,73513,52179],{"class":49},[36,73515,61],{"class":60},[36,73517,52234],{"class":53},[36,73519,52263],{"class":60},[36,73521,73002],{"class":60},[36,73523,901],{"class":49},[36,73525,73526],{"class":60},"228",[36,73528,154],{"class":49},[36,73530,73531],{"class":60},"225",[36,73533,154],{"class":49},[36,73535,73531],{"class":60},[36,73537,3468],{"class":49},[36,73539,73540,73543,73545,73547,73549],{"class":38,"line":17648},[36,73541,73542],{"class":60},"      padding-left",[36,73544,52179],{"class":49},[36,73546,157],{"class":60},[36,73548,52234],{"class":53},[36,73550,2040],{"class":49},[36,73552,73553,73555,73557,73559,73562,73564,73566],{"class":38,"line":17653},[36,73554,62602],{"class":60},[36,73556,52179],{"class":49},[36,73558,28866],{"class":60},[36,73560,73561],{"class":60}," linear",[36,73563,62609],{"class":60},[36,73565,1577],{"class":53},[36,73567,2040],{"class":49},[36,73569,73570],{"class":38,"line":17658},[36,73571,2937],{"class":49},[36,73573,73574],{"class":38,"line":17671},[36,73575,194],{"emptyLinePlaceholder":193},[36,73577,73578,73581,73583,73585],{"class":38,"line":17676},[36,73579,73580],{"class":52042},"    tbody",[36,73582,70886],{"class":52042},[36,73584,61682],{"class":2713},[36,73586,16316],{"class":49},[36,73588,73589,73591,73593,73595,73597,73599,73601,73603,73605,73607],{"class":38,"line":33375},[36,73590,55626],{"class":60},[36,73592,52179],{"class":49},[36,73594,73065],{"class":60},[36,73596,901],{"class":49},[36,73598,73322],{"class":60},[36,73600,154],{"class":49},[36,73602,73327],{"class":60},[36,73604,154],{"class":49},[36,73606,73327],{"class":60},[36,73608,3468],{"class":49},[36,73610,73611,73613,73615,73617],{"class":38,"line":33381},[36,73612,62767],{"class":60},[36,73614,52179],{"class":49},[36,73616,62772],{"class":60},[36,73618,2040],{"class":49},[36,73620,73621],{"class":38,"line":33387},[36,73622,2937],{"class":49},[36,73624,73625],{"class":38,"line":33393},[36,73626,194],{"emptyLinePlaceholder":193},[36,73628,73629,73631,73633,73636,73638],{"class":38,"line":33399},[36,73630,73580],{"class":52042},[36,73632,70886],{"class":52042},[36,73634,73635],{"class":52042}," td",[36,73637,2148],{"class":52042},[36,73639,16316],{"class":49},[36,73641,73642,73644,73646,73648],{"class":38,"line":33410},[36,73643,55751],{"class":60},[36,73645,52179],{"class":49},[36,73647,61611],{"class":60},[36,73649,2040],{"class":49},[36,73651,73652,73654,73656,73658,73660],{"class":38,"line":33416},[36,73653,55513],{"class":60},[36,73655,52179],{"class":49},[36,73657,1786],{"class":60},[36,73659,52234],{"class":53},[36,73661,2040],{"class":49},[36,73663,73664,73666,73668,73670,73672],{"class":38,"line":33436},[36,73665,55527],{"class":60},[36,73667,52179],{"class":49},[36,73669,1705],{"class":60},[36,73671,52234],{"class":53},[36,73673,2040],{"class":49},[36,73675,73676,73678,73680,73682,73684],{"class":38,"line":33442},[36,73677,58101],{"class":60},[36,73679,52179],{"class":49},[36,73681,1705],{"class":60},[36,73683,52234],{"class":53},[36,73685,2040],{"class":49},[36,73687,73688,73690,73692,73694,73696],{"class":38,"line":33453},[36,73689,62819],{"class":60},[36,73691,52179],{"class":49},[36,73693,181],{"class":60},[36,73695,52234],{"class":53},[36,73697,2040],{"class":49},[36,73699,73700,73702,73704,73706],{"class":38,"line":33459},[36,73701,58158],{"class":60},[36,73703,52179],{"class":49},[36,73705,61584],{"class":60},[36,73707,2040],{"class":49},[36,73709,73710,73712,73714,73716],{"class":38,"line":33465},[36,73711,58028],{"class":60},[36,73713,52179],{"class":49},[36,73715,52334],{"class":60},[36,73717,2040],{"class":49},[36,73719,73720,73722,73724,73726],{"class":38,"line":33471},[36,73721,64712],{"class":60},[36,73723,52179],{"class":49},[36,73725,55479],{"class":60},[36,73727,2040],{"class":49},[36,73729,73730,73732,73734,73737],{"class":38,"line":33477},[36,73731,55626],{"class":60},[36,73733,52179],{"class":49},[36,73735,73736],{"class":60},"orange",[36,73738,2040],{"class":49},[36,73740,73741,73743,73745,73748,73750],{"class":38,"line":33483},[36,73742,55876],{"class":60},[36,73744,52179],{"class":49},[36,73746,73747],{"class":60},"12.5",[36,73749,52234],{"class":53},[36,73751,2040],{"class":49},[36,73753,73754],{"class":38,"line":33489},[36,73755,2937],{"class":49},[36,73757,73758,73760,73762],{"class":38,"line":33495},[36,73759,53159],{"class":49},[36,73761,807],{"class":52042},[36,73763,52049],{"class":49},[36,73765,73766,73768,73770],{"class":38,"line":33515},[36,73767,52527],{"class":49},[36,73769,52076],{"class":52042},[36,73771,52049],{"class":49},[36,73773,73774],{"class":38,"line":33521},[36,73775,194],{"emptyLinePlaceholder":193},[36,73777,73778,73780,73782],{"class":38,"line":33537},[36,73779,1789],{"class":49},[36,73781,52542],{"class":52042},[36,73783,52049],{"class":49},[36,73785,73786,73788,73790,73793,73795],{"class":38,"line":33543},[36,73787,52886],{"class":49},[36,73789,21],{"class":52042},[36,73791,73792],{"class":49},">学生就业统计表\u003C\u002F",[36,73794,21],{"class":52042},[36,73796,52049],{"class":49},[36,73798,73799,73801,73803,73805,73807,73809,73811,73813,73815],{"class":38,"line":33557},[36,73800,52886],{"class":49},[36,73802,67367],{"class":52042},[36,73804,54228],{"class":2713},[36,73806,54],{"class":49},[36,73808,63406],{"class":998},[36,73810,69812],{"class":2713},[36,73812,54],{"class":49},[36,73814,32518],{"class":998},[36,73816,52049],{"class":49},[36,73818,73819,73821,73823,73825,73827,73829,73831,73833,73835,73837,73839,73842,73844,73846,73848],{"class":38,"line":33563},[36,73820,52083],{"class":49},[36,73822,54563],{"class":52042},[36,73824,54566],{"class":2713},[36,73826,54],{"class":49},[36,73828,63441],{"class":998},[36,73830,15664],{"class":2713},[36,73832,54],{"class":49},[36,73834,69838],{"class":998},[36,73836,61762],{"class":2713},[36,73838,54],{"class":49},[36,73840,73841],{"class":998},"\"姓名\"",[36,73843,54228],{"class":2713},[36,73845,54],{"class":49},[36,73847,69838],{"class":998},[36,73849,52049],{"class":49},[36,73851,73852,73854,73856,73858,73860,73862,73864,73866,73868,73870,73872,73875,73877,73879,73881],{"class":38,"line":33578},[36,73853,52083],{"class":49},[36,73855,54563],{"class":52042},[36,73857,54566],{"class":2713},[36,73859,54],{"class":49},[36,73861,63441],{"class":998},[36,73863,15664],{"class":2713},[36,73865,54],{"class":49},[36,73867,69866],{"class":998},[36,73869,61762],{"class":2713},[36,73871,54],{"class":49},[36,73873,73874],{"class":998},"\"年龄\"",[36,73876,54228],{"class":2713},[36,73878,54],{"class":49},[36,73880,69866],{"class":998},[36,73882,52049],{"class":49},[36,73884,73885,73887,73889,73891,73893,73895,73897,73899,73901,73903,73905,73908,73910,73912,73914],{"class":38,"line":33584},[36,73886,52083],{"class":49},[36,73888,54563],{"class":52042},[36,73890,54566],{"class":2713},[36,73892,54],{"class":49},[36,73894,63441],{"class":998},[36,73896,15664],{"class":2713},[36,73898,54],{"class":49},[36,73900,69968],{"class":998},[36,73902,61762],{"class":2713},[36,73904,54],{"class":49},[36,73906,73907],{"class":998},"\"薪资\"",[36,73909,54228],{"class":2713},[36,73911,54],{"class":49},[36,73913,69968],{"class":998},[36,73915,52049],{"class":49},[36,73917,73918,73920,73922,73924,73926,73928,73930,73932,73934,73936,73938,73940],{"class":38,"line":33593},[36,73919,52083],{"class":49},[36,73921,69886],{"class":52042},[36,73923,15664],{"class":2713},[36,73925,54],{"class":49},[36,73927,69893],{"class":998},[36,73929,15703],{"class":2713},[36,73931,54],{"class":49},[36,73933,8399],{"class":998},[36,73935,54228],{"class":2713},[36,73937,54],{"class":49},[36,73939,69893],{"class":998},[36,73941,52049],{"class":49},[36,73943,73944,73946,73948,73950,73952,73954,73956,73958],{"class":38,"line":33599},[36,73945,55976],{"class":49},[36,73947,69908],{"class":52042},[36,73949,67393],{"class":2713},[36,73951,54],{"class":49},[36,73953,10708],{"class":998},[36,73955,69917],{"class":49},[36,73957,69908],{"class":52042},[36,73959,52049],{"class":49},[36,73961,73962,73964,73966,73968,73970,73972,73974,73976],{"class":38,"line":33608},[36,73963,55976],{"class":49},[36,73965,69908],{"class":52042},[36,73967,67393],{"class":2713},[36,73969,54],{"class":49},[36,73971,10777],{"class":998},[36,73973,69936],{"class":49},[36,73975,69908],{"class":52042},[36,73977,52049],{"class":49},[36,73979,73980,73982,73984],{"class":38,"line":33614},[36,73981,52518],{"class":49},[36,73983,69886],{"class":52042},[36,73985,52049],{"class":49},[36,73987,73988,73990,73992,73994,73996,73998,74000,74002,74004,74006,74008,74010],{"class":38,"line":33620},[36,73989,52083],{"class":49},[36,73991,69886],{"class":52042},[36,73993,15664],{"class":2713},[36,73995,54],{"class":49},[36,73997,69990],{"class":998},[36,73999,15703],{"class":2713},[36,74001,54],{"class":49},[36,74003,8399],{"class":998},[36,74005,54228],{"class":2713},[36,74007,54],{"class":49},[36,74009,69990],{"class":998},[36,74011,52049],{"class":49},[36,74013,74014,74016,74018,74020,74022,74024,74026,74028],{"class":38,"line":33629},[36,74015,55976],{"class":49},[36,74017,69908],{"class":52042},[36,74019,67393],{"class":2713},[36,74021,54],{"class":49},[36,74023,70011],{"class":998},[36,74025,70014],{"class":49},[36,74027,69908],{"class":52042},[36,74029,52049],{"class":49},[36,74031,74032,74034,74036,74038,74040,74042,74044,74046],{"class":38,"line":33635},[36,74033,55976],{"class":49},[36,74035,69908],{"class":52042},[36,74037,67393],{"class":2713},[36,74039,54],{"class":49},[36,74041,70031],{"class":998},[36,74043,70034],{"class":49},[36,74045,69908],{"class":52042},[36,74047,52049],{"class":49},[36,74049,74050,74052,74054,74056,74058,74060,74062,74064],{"class":38,"line":33646},[36,74051,55976],{"class":49},[36,74053,69908],{"class":52042},[36,74055,67393],{"class":2713},[36,74057,54],{"class":49},[36,74059,70051],{"class":998},[36,74061,70054],{"class":49},[36,74063,69908],{"class":52042},[36,74065,52049],{"class":49},[36,74067,74068,74070,74072,74074,74076,74078,74080,74082],{"class":38,"line":33652},[36,74069,55976],{"class":49},[36,74071,69908],{"class":52042},[36,74073,67393],{"class":2713},[36,74075,54],{"class":49},[36,74077,70071],{"class":998},[36,74079,70074],{"class":49},[36,74081,69908],{"class":52042},[36,74083,52049],{"class":49},[36,74085,74086,74088,74090,74092,74094,74096,74098,74100],{"class":38,"line":33671},[36,74087,55976],{"class":49},[36,74089,69908],{"class":52042},[36,74091,67393],{"class":2713},[36,74093,54],{"class":49},[36,74095,70091],{"class":998},[36,74097,70094],{"class":49},[36,74099,69908],{"class":52042},[36,74101,52049],{"class":49},[36,74103,74104,74106,74108],{"class":38,"line":33677},[36,74105,52518],{"class":49},[36,74107,69886],{"class":52042},[36,74109,52049],{"class":49},[36,74111,74112,74114,74116],{"class":38,"line":33688},[36,74113,52083],{"class":49},[36,74115,54629],{"class":52042},[36,74117,52049],{"class":49},[36,74119,74120,74122,74124,74127,74129,74132,74134],{"class":38,"line":33694},[36,74121,55976],{"class":49},[36,74123,36],{"class":52042},[36,74125,74126],{"class":49},">+\u003C\u002F",[36,74128,36],{"class":52042},[36,74130,74131],{"class":49},">添加\u003C\u002F",[36,74133,54629],{"class":52042},[36,74135,52049],{"class":49},[36,74137,74138,74140,74142],{"class":38,"line":33714},[36,74139,53159],{"class":49},[36,74141,67367],{"class":52042},[36,74143,52049],{"class":49},[36,74145,74146,74148,74150,74152,74154,74156,74159,74161,74164,74166,74169,74171],{"class":38,"line":33730},[36,74147,52886],{"class":49},[36,74149,52353],{"class":52042},[36,74151,54228],{"class":2713},[36,74153,54],{"class":49},[36,74155,63322],{"class":998},[36,74157,74158],{"class":49},">共有数据 \u003C",[36,74160,36],{"class":52042},[36,74162,74163],{"class":49},">0\u003C\u002F",[36,74165,36],{"class":52042},[36,74167,74168],{"class":49},"> 条\u003C\u002F",[36,74170,52353],{"class":52042},[36,74172,52049],{"class":49},[36,74174,74175,74177,74179],{"class":38,"line":33736},[36,74176,52886],{"class":49},[36,74178,1031],{"class":52042},[36,74180,52049],{"class":49},[36,74182,74183,74185,74187],{"class":38,"line":33750},[36,74184,52083],{"class":49},[36,74186,1034],{"class":52042},[36,74188,52049],{"class":49},[36,74190,74191,74193,74195],{"class":38,"line":33756},[36,74192,55976],{"class":49},[36,74194,1037],{"class":52042},[36,74196,52049],{"class":49},[36,74198,74199,74201,74203,74206,74208],{"class":38,"line":33762},[36,74200,56044],{"class":49},[36,74202,1040],{"class":52042},[36,74204,74205],{"class":49},">ID\u003C\u002F",[36,74207,1040],{"class":52042},[36,74209,52049],{"class":49},[36,74211,74212,74214,74216,74218,74220],{"class":38,"line":33773},[36,74213,56044],{"class":49},[36,74215,1040],{"class":52042},[36,74217,70197],{"class":49},[36,74219,1040],{"class":52042},[36,74221,52049],{"class":49},[36,74223,74224,74226,74228,74230,74232],{"class":38,"line":33779},[36,74225,56044],{"class":49},[36,74227,1040],{"class":52042},[36,74229,70210],{"class":49},[36,74231,1040],{"class":52042},[36,74233,52049],{"class":49},[36,74235,74236,74238,74240,74242,74244],{"class":38,"line":33785},[36,74237,56044],{"class":49},[36,74239,1040],{"class":52042},[36,74241,70223],{"class":49},[36,74243,1040],{"class":52042},[36,74245,52049],{"class":49},[36,74247,74248,74250,74252,74254,74256],{"class":38,"line":33795},[36,74249,56044],{"class":49},[36,74251,1040],{"class":52042},[36,74253,70236],{"class":49},[36,74255,1040],{"class":52042},[36,74257,52049],{"class":49},[36,74259,74260,74262,74264,74266,74268],{"class":38,"line":33801},[36,74261,56044],{"class":49},[36,74263,1040],{"class":52042},[36,74265,70249],{"class":49},[36,74267,1040],{"class":52042},[36,74269,52049],{"class":49},[36,74271,74272,74274,74276,74279,74281],{"class":38,"line":33812},[36,74273,56044],{"class":49},[36,74275,1040],{"class":52042},[36,74277,74278],{"class":49},">录入时间\u003C\u002F",[36,74280,1040],{"class":52042},[36,74282,52049],{"class":49},[36,74284,74285,74287,74289,74291,74293],{"class":38,"line":33818},[36,74286,56044],{"class":49},[36,74288,1040],{"class":52042},[36,74290,70262],{"class":49},[36,74292,1040],{"class":52042},[36,74294,52049],{"class":49},[36,74296,74297,74299,74301],{"class":38,"line":33828},[36,74298,56149],{"class":49},[36,74300,1037],{"class":52042},[36,74302,52049],{"class":49},[36,74304,74305,74307,74309],{"class":38,"line":33833},[36,74306,52518],{"class":49},[36,74308,1034],{"class":52042},[36,74310,52049],{"class":49},[36,74312,74313,74315,74317],{"class":38,"line":33839},[36,74314,52083],{"class":49},[36,74316,1078],{"class":52042},[36,74318,52049],{"class":49},[36,74320,74321],{"class":38,"line":33888},[36,74322,74323],{"class":42},"      \u003C!-- \u003Ctr>\n",[36,74325,74326],{"class":38,"line":33935},[36,74327,74328],{"class":42},"        \u003Ctd>1\u003C\u002Ftd>\n",[36,74330,74331],{"class":38,"line":33940},[36,74332,74328],{"class":42},[36,74334,74335],{"class":38,"line":33946},[36,74336,74328],{"class":42},[36,74338,74339],{"class":38,"line":33965},[36,74340,74328],{"class":42},[36,74342,74343],{"class":38,"line":33971},[36,74344,74328],{"class":42},[36,74346,74347],{"class":38,"line":33991},[36,74348,74328],{"class":42},[36,74350,74351],{"class":38,"line":33997},[36,74352,74328],{"class":42},[36,74354,74355],{"class":38,"line":34003},[36,74356,74357],{"class":42},"        \u003Ctd>\n",[36,74359,74360],{"class":38,"line":34013},[36,74361,74362],{"class":42},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[36,74364,74365],{"class":38,"line":34018},[36,74366,74367],{"class":42},"        \u003C\u002Ftd>\n",[36,74369,74370],{"class":38,"line":34024},[36,74371,74372],{"class":42},"      \u003C\u002Ftr> -->\n",[36,74374,74375,74377,74379],{"class":38,"line":34040},[36,74376,52518],{"class":49},[36,74378,1078],{"class":52042},[36,74380,52049],{"class":49},[36,74382,74383,74385,74387],{"class":38,"line":34085},[36,74384,53159],{"class":49},[36,74386,1031],{"class":52042},[36,74388,52049],{"class":49},[36,74390,74391,74393,74395],{"class":38,"line":34091},[36,74392,52886],{"class":49},[36,74394,52555],{"class":52042},[36,74396,52049],{"class":49},[36,74398,74399],{"class":38,"line":34097},[36,74400,74401],{"class":42},"    \u002F\u002F const initData = [{\n",[36,74403,74404],{"class":38,"line":34103},[36,74405,74406],{"class":42},"    \u002F\u002F   unameId: 1,\n",[36,74408,74409],{"class":38,"line":34114},[36,74410,74411],{"class":42},"    \u002F\u002F   uname: '华晨宇',\n",[36,74413,74414],{"class":38,"line":34120},[36,74415,74416],{"class":42},"    \u002F\u002F   age: 22,\n",[36,74418,74419],{"class":38,"line":34126},[36,74420,74421],{"class":42},"    \u002F\u002F   salary: 12000,\n",[36,74423,74424],{"class":38,"line":34132},[36,74425,74426],{"class":42},"    \u002F\u002F   gender: '男',\n",[36,74428,74429],{"class":38,"line":34150},[36,74430,74431],{"class":42},"    \u002F\u002F   city: '北京',\n",[36,74433,74434],{"class":38,"line":34164},[36,74435,74436],{"class":42},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[36,74438,74439],{"class":38,"line":34173},[36,74440,74441],{"class":42},"    \u002F\u002F }]\n",[36,74443,74444],{"class":38,"line":34182},[36,74445,74446],{"class":42},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[36,74448,74449],{"class":38,"line":34191},[36,74450,74451],{"class":42},"    \u002F\u002F 1.渲染业务\n",[36,74453,74454],{"class":38,"line":34200},[36,74455,74456],{"class":42},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[36,74458,74459],{"class":38,"line":34206},[36,74460,74461],{"class":42},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[36,74463,74464],{"class":38,"line":34212},[36,74465,74466],{"class":42},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[36,74468,74469],{"class":38,"line":34220},[36,74470,194],{"emptyLinePlaceholder":193},[36,74472,74473],{"class":38,"line":34225},[36,74474,74475],{"class":42},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[36,74477,74478],{"class":38,"line":34231},[36,74479,74480],{"class":42},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[36,74482,74483,74485,74487,74489],{"class":38,"line":34242},[36,74484,11966],{"class":53},[36,74486,58437],{"class":60},[36,74488,14308],{"class":53},[36,74490,52580],{"class":49},[36,74492,74493,74496,74498],{"class":38,"line":34248},[36,74494,74495],{"class":49},"    console.",[36,74497,58989],{"class":2713},[36,74499,53154],{"class":49},[36,74501,74502],{"class":38,"line":34268},[36,74503,194],{"emptyLinePlaceholder":193},[36,74505,74506],{"class":38,"line":34274},[36,74507,74508],{"class":42},"    \u002F\u002F 时间函数\n",[36,74510,74511,74513,74516],{"class":38,"line":34280},[36,74512,70826],{"class":53},[36,74514,74515],{"class":2713}," getTime",[36,74517,11600],{"class":49},[36,74519,74520,74522,74525,74527,74529,74532],{"class":38,"line":34286},[36,74521,58970],{"class":53},[36,74523,74524],{"class":60}," date",[36,74526,14308],{"class":53},[36,74528,12323],{"class":53},[36,74530,74531],{"class":2713}," Date",[36,74533,2726],{"class":49},[36,74535,74536,74538,74540,74542,74545,74548,74550,74552,74554,74557,74560,74562,74564,74566,74568,74570,74572,74574],{"class":38,"line":34303},[36,74537,58970],{"class":53},[36,74539,16835],{"class":60},[36,74541,14308],{"class":53},[36,74543,74544],{"class":49}," date.",[36,74546,74547],{"class":2713},"getHours",[36,74549,13794],{"class":49},[36,74551,1789],{"class":53},[36,74553,2788],{"class":60},[36,74555,74556],{"class":53}," ?",[36,74558,74559],{"class":998}," '0'",[36,74561,46308],{"class":53},[36,74563,74544],{"class":49},[36,74565,74547],{"class":2713},[36,74567,13794],{"class":49},[36,74569,1738],{"class":53},[36,74571,74544],{"class":49},[36,74573,74547],{"class":2713},[36,74575,2726],{"class":49},[36,74577,74578,74580,74583,74585,74587,74590,74592,74594,74596,74598,74600,74602,74604,74606,74608,74610,74612,74614],{"class":38,"line":34309},[36,74579,58970],{"class":53},[36,74581,74582],{"class":60}," m",[36,74584,14308],{"class":53},[36,74586,74544],{"class":49},[36,74588,74589],{"class":2713},"getMinutes",[36,74591,13794],{"class":49},[36,74593,1789],{"class":53},[36,74595,2788],{"class":60},[36,74597,74556],{"class":53},[36,74599,74559],{"class":998},[36,74601,46308],{"class":53},[36,74603,74544],{"class":49},[36,74605,74589],{"class":2713},[36,74607,13794],{"class":49},[36,74609,1738],{"class":53},[36,74611,74544],{"class":49},[36,74613,74589],{"class":2713},[36,74615,2726],{"class":49},[36,74617,74618,74620,74622,74624,74626,74629,74631,74633,74635,74637,74639,74641,74643,74645,74647,74649,74651,74653],{"class":38,"line":34315},[36,74619,58970],{"class":53},[36,74621,9175],{"class":60},[36,74623,14308],{"class":53},[36,74625,74544],{"class":49},[36,74627,74628],{"class":2713},"getSeconds",[36,74630,13794],{"class":49},[36,74632,1789],{"class":53},[36,74634,2788],{"class":60},[36,74636,74556],{"class":53},[36,74638,74559],{"class":998},[36,74640,46308],{"class":53},[36,74642,74544],{"class":49},[36,74644,74628],{"class":2713},[36,74646,13794],{"class":49},[36,74648,1738],{"class":53},[36,74650,74544],{"class":49},[36,74652,74628],{"class":2713},[36,74654,2726],{"class":49},[36,74656,74657,74659,74662,74664,74666,74669,74671,74674,74676,74679,74681,74683,74686,74688,74690,74692,74694,74696,74698,74701,74703,74706,74708,74711,74713,74715,74717],{"class":38,"line":34321},[36,74658,58970],{"class":53},[36,74660,74661],{"class":60}," str",[36,74663,14308],{"class":53},[36,74665,63645],{"class":998},[36,74667,74668],{"class":49},"date",[36,74670,1440],{"class":998},[36,74672,74673],{"class":2713},"getFullYear",[36,74675,3176],{"class":998},[36,74677,74678],{"class":998},"}\u002F${",[36,74680,74668],{"class":49},[36,74682,1440],{"class":998},[36,74684,74685],{"class":2713},"getMonth",[36,74687,13794],{"class":998},[36,74689,1365],{"class":53},[36,74691,25863],{"class":60},[36,74693,74678],{"class":998},[36,74695,74668],{"class":49},[36,74697,1440],{"class":998},[36,74699,74700],{"class":2713},"getDate",[36,74702,3176],{"class":998},[36,74704,74705],{"class":998},"} ${",[36,74707,1300],{"class":49},[36,74709,74710],{"class":998},"}:${",[36,74712,1426],{"class":49},[36,74714,74710],{"class":998},[36,74716,1577],{"class":49},[36,74718,74719],{"class":998},"}`\n",[36,74721,74722,74725],{"class":38,"line":34327},[36,74723,74724],{"class":53},"      return",[36,74726,74727],{"class":49}," str\n",[36,74729,74730],{"class":38,"line":34333},[36,74731,2937],{"class":49},[36,74733,74734],{"class":38,"line":34360},[36,74735,74736],{"class":42},"    \u002F\u002F 渲染函数\n",[36,74738,74739,74741,74743,74745,74747,74749,74751,74753],{"class":38,"line":34384},[36,74740,11966],{"class":53},[36,74742,70489],{"class":60},[36,74744,14308],{"class":53},[36,74746,55138],{"class":49},[36,74748,55141],{"class":2713},[36,74750,901],{"class":49},[36,74752,70500],{"class":998},[36,74754,75],{"class":49},[36,74756,74757,74759,74761],{"class":38,"line":34390},[36,74758,70826],{"class":53},[36,74760,70829],{"class":2713},[36,74762,11600],{"class":49},[36,74764,74765],{"class":38,"line":34396},[36,74766,74767],{"class":42},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[36,74769,74770],{"class":38,"line":34402},[36,74771,74772],{"class":42},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[36,74774,74775,74777,74780,74782,74784,74787,74789,74791,74793,74796,74798,74801],{"class":38,"line":34413},[36,74776,58970],{"class":53},[36,74778,74779],{"class":60}," trArr",[36,74781,14308],{"class":53},[36,74783,52707],{"class":49},[36,74785,74786],{"class":2713},"map",[36,74788,901],{"class":49},[36,74790,55191],{"class":53},[36,74792,2408],{"class":49},[36,74794,74795],{"class":416},"ele",[36,74797,154],{"class":49},[36,74799,74800],{"class":416},"index",[36,74802,13186],{"class":49},[36,74804,74805,74807],{"class":38,"line":34424},[36,74806,15496],{"class":53},[36,74808,70910],{"class":998},[36,74810,74811],{"class":38,"line":34430},[36,74812,74813],{"class":998},"      \u003Ctr>\n",[36,74815,74816,74818,74820,74822,74825],{"class":38,"line":34447},[36,74817,70915],{"class":998},[36,74819,74795],{"class":49},[36,74821,1440],{"class":998},[36,74823,74824],{"class":49},"unameId",[36,74826,70930],{"class":998},[36,74828,74829,74831,74833,74835,74837],{"class":38,"line":34470},[36,74830,70915],{"class":998},[36,74832,74795],{"class":49},[36,74834,1440],{"class":998},[36,74836,70946],{"class":49},[36,74838,70930],{"class":998},[36,74840,74841,74843,74845,74847,74849],{"class":38,"line":34493},[36,74842,70915],{"class":998},[36,74844,74795],{"class":49},[36,74846,1440],{"class":998},[36,74848,70963],{"class":49},[36,74850,70930],{"class":998},[36,74852,74853,74855,74857,74859,74861],{"class":38,"line":34499},[36,74854,70915],{"class":998},[36,74856,74795],{"class":49},[36,74858,1440],{"class":998},[36,74860,70980],{"class":49},[36,74862,70930],{"class":998},[36,74864,74865,74867,74869,74871,74873],{"class":38,"line":34504},[36,74866,70915],{"class":998},[36,74868,74795],{"class":49},[36,74870,1440],{"class":998},[36,74872,70997],{"class":49},[36,74874,70930],{"class":998},[36,74876,74877,74879,74881,74883,74885],{"class":38,"line":34513},[36,74878,70915],{"class":998},[36,74880,74795],{"class":49},[36,74882,1440],{"class":998},[36,74884,71014],{"class":49},[36,74886,70930],{"class":998},[36,74888,74889,74891,74893,74895,74897],{"class":38,"line":34523},[36,74890,70915],{"class":998},[36,74892,74795],{"class":49},[36,74894,1440],{"class":998},[36,74896,3137],{"class":49},[36,74898,70930],{"class":998},[36,74900,74901],{"class":38,"line":34529},[36,74902,74357],{"class":998},[36,74904,74905,74908,74910],{"class":38,"line":34534},[36,74906,74907],{"class":998},"          \u003Ca href=\"#\" data-id=\"${",[36,74909,74800],{"class":49},[36,74911,74912],{"class":998},"}\">删除\u003C\u002Fa>\n",[36,74914,74915],{"class":38,"line":34540},[36,74916,74367],{"class":998},[36,74918,74919],{"class":38,"line":34553},[36,74920,74921],{"class":998},"      \u003C\u002Ftr>\n",[36,74923,74924],{"class":38,"line":34559},[36,74925,74926],{"class":998},"  `\n",[36,74928,74929],{"class":38,"line":34570},[36,74930,65557],{"class":49},[36,74932,74933,74935,74937],{"class":38,"line":34581},[36,74934,58986],{"class":49},[36,74936,58989],{"class":2713},[36,74938,74939],{"class":49},"(trArr)\n",[36,74941,74942],{"class":38,"line":34600},[36,74943,194],{"emptyLinePlaceholder":193},[36,74945,74946],{"class":38,"line":50260},[36,74947,74948],{"class":42},"      \u002F\u002F (2) 把数组转换为字符串join\n",[36,74950,74951],{"class":38,"line":50265},[36,74952,74953],{"class":42},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[36,74955,74956,74958,74960,74963,74966,74968,74971],{"class":38,"line":50274},[36,74957,70841],{"class":49},[36,74959,54],{"class":53},[36,74961,74962],{"class":49}," trArr.",[36,74964,74965],{"class":2713},"join",[36,74967,901],{"class":49},[36,74969,74970],{"class":998},"''",[36,74972,75],{"class":49},[36,74974,74975],{"class":38,"line":50283},[36,74976,74977],{"class":42},"      \u002F\u002F 显示共有几条\n",[36,74979,74980,74982,74984,74986,74989,74992,74994,74996],{"class":38,"line":50288},[36,74981,56513],{"class":49},[36,74983,55141],{"class":2713},[36,74985,901],{"class":49},[36,74987,74988],{"class":998},"'.total span'",[36,74990,74991],{"class":49},").innerHTML ",[36,74993,54],{"class":53},[36,74995,52707],{"class":49},[36,74997,56573],{"class":60},[36,74999,75000],{"class":38,"line":50293},[36,75001,2937],{"class":49},[36,75003,75004],{"class":38,"line":50298},[36,75005,75006],{"class":42},"    \u002F\u002F render()\n",[36,75008,75009],{"class":38,"line":50311},[36,75010,194],{"emptyLinePlaceholder":193},[36,75012,75013],{"class":38,"line":50316},[36,75014,75015],{"class":42},"    \u002F\u002F 获取DOM对象\n",[36,75017,75018,75020,75022,75024,75026,75028,75030,75032],{"class":38,"line":50325},[36,75019,11966],{"class":53},[36,75021,70563],{"class":60},[36,75023,14308],{"class":53},[36,75025,55138],{"class":49},[36,75027,55141],{"class":2713},[36,75029,901],{"class":49},[36,75031,70574],{"class":998},[36,75033,75],{"class":49},[36,75035,75036,75038,75040,75042,75044,75046,75048,75050],{"class":38,"line":50334},[36,75037,11966],{"class":53},[36,75039,70390],{"class":60},[36,75041,14308],{"class":53},[36,75043,55138],{"class":49},[36,75045,55141],{"class":2713},[36,75047,901],{"class":49},[36,75049,70401],{"class":998},[36,75051,75],{"class":49},[36,75053,75054,75056,75058,75060,75062,75064,75066,75068],{"class":38,"line":50351},[36,75055,11966],{"class":53},[36,75057,16433],{"class":60},[36,75059,14308],{"class":53},[36,75061,55138],{"class":49},[36,75063,55141],{"class":2713},[36,75065,901],{"class":49},[36,75067,70420],{"class":998},[36,75069,75],{"class":49},[36,75071,75073,75075,75077,75079,75081,75083,75085,75087],{"class":38,"line":75072},231,[36,75074,11966],{"class":53},[36,75076,70449],{"class":60},[36,75078,14308],{"class":53},[36,75080,55138],{"class":49},[36,75082,55141],{"class":2713},[36,75084,901],{"class":49},[36,75086,70460],{"class":998},[36,75088,75],{"class":49},[36,75090,75092,75094,75096,75098,75100,75102,75104,75106],{"class":38,"line":75091},232,[36,75093,11966],{"class":53},[36,75095,70429],{"class":60},[36,75097,14308],{"class":53},[36,75099,55138],{"class":49},[36,75101,55141],{"class":2713},[36,75103,901],{"class":49},[36,75105,70440],{"class":998},[36,75107,75],{"class":49},[36,75109,75111,75113,75115,75117,75119,75121,75123,75125],{"class":38,"line":75110},233,[36,75112,11966],{"class":53},[36,75114,70469],{"class":60},[36,75116,14308],{"class":53},[36,75118,55138],{"class":49},[36,75120,55141],{"class":2713},[36,75122,901],{"class":49},[36,75124,70480],{"class":998},[36,75126,75],{"class":49},[36,75128,75130],{"class":38,"line":75129},234,[36,75131,194],{"emptyLinePlaceholder":193},[36,75133,75135],{"class":38,"line":75134},235,[36,75136,75137],{"class":42},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[36,75139,75141,75143,75145,75147,75149,75151,75153,75155,75157],{"class":38,"line":75140},236,[36,75142,70581],{"class":49},[36,75144,58555],{"class":2713},[36,75146,901],{"class":49},[36,75148,70588],{"class":998},[36,75150,154],{"class":49},[36,75152,55191],{"class":53},[36,75154,2408],{"class":49},[36,75156,969],{"class":416},[36,75158,13186],{"class":49},[36,75160,75162],{"class":38,"line":75161},237,[36,75163,75164],{"class":42},"      \u002F\u002F 禁止浏览器跳转\n",[36,75166,75168,75170,75172],{"class":38,"line":75167},238,[36,75169,70608],{"class":49},[36,75171,70611],{"class":2713},[36,75173,2726],{"class":49},[36,75175,75177],{"class":38,"line":75176},239,[36,75178,75179],{"class":42},"      \u002F\u002F 非空判断\n",[36,75181,75183],{"class":38,"line":75182},240,[36,75184,75185],{"class":42},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[36,75187,75189],{"class":38,"line":75188},241,[36,75190,75191],{"class":42},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[36,75193,75195,75197,75199,75201,75204,75206,75209,75212,75214,75216],{"class":38,"line":75194},242,[36,75196,55222],{"class":53},[36,75198,2408],{"class":49},[36,75200,1117],{"class":53},[36,75202,75203],{"class":49},"uname.value ",[36,75205,72099],{"class":53},[36,75207,75208],{"class":53}," !",[36,75210,75211],{"class":49},"age.value ",[36,75213,72099],{"class":53},[36,75215,75208],{"class":53},[36,75217,75218],{"class":49},"salary.value) {\n",[36,75220,75222,75224,75226,75228,75230],{"class":38,"line":75221},243,[36,75223,15496],{"class":53},[36,75225,70682],{"class":2713},[36,75227,901],{"class":49},[36,75229,70687],{"class":998},[36,75231,75],{"class":49},[36,75233,75235],{"class":38,"line":75234},244,[36,75236,53140],{"class":49},[36,75238,75240,75242,75244],{"class":38,"line":75239},245,[36,75241,58749],{"class":49},[36,75243,52626],{"class":2713},[36,75245,75246],{"class":49},"({\n",[36,75248,75250],{"class":38,"line":75249},246,[36,75251,75252],{"class":42},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[36,75254,75256],{"class":38,"line":75255},247,[36,75257,75258],{"class":42},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[36,75260,75262],{"class":38,"line":75261},248,[36,75263,75264],{"class":42},"        \u002F\u002F 对象的序号应为数组长度+1\n",[36,75266,75268],{"class":38,"line":75267},249,[36,75269,75270],{"class":42},"        \u002F\u002F unameId: arr.length + 1,\n",[36,75272,75274],{"class":38,"line":75273},250,[36,75275,194],{"emptyLinePlaceholder":193},[36,75277,75279],{"class":38,"line":75278},251,[36,75280,75281],{"class":42},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[36,75283,75285],{"class":38,"line":75284},252,[36,75286,75287],{"class":42},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[36,75289,75291],{"class":38,"line":75290},253,[36,75292,75293],{"class":42},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[36,75295,75297],{"class":38,"line":75296},254,[36,75298,75299],{"class":42},"        \u002F\u002F 0当假看\n",[36,75301,75303,75306,75308,75310,75313,75315,75317,75319,75322,75324,75326,75329,75331],{"class":38,"line":75302},255,[36,75304,75305],{"class":49},"        unameId: arr.",[36,75307,52710],{"class":60},[36,75309,74556],{"class":53},[36,75311,75312],{"class":49}," arr[arr.",[36,75314,52710],{"class":60},[36,75316,53013],{"class":53},[36,75318,25863],{"class":60},[36,75320,75321],{"class":49},"].unameId ",[36,75323,1365],{"class":53},[36,75325,25863],{"class":60},[36,75327,75328],{"class":53}," :",[36,75330,25863],{"class":60},[36,75332,32208],{"class":49},[36,75334,75336],{"class":38,"line":75335},256,[36,75337,70735],{"class":49},[36,75339,75341],{"class":38,"line":75340},257,[36,75342,70740],{"class":49},[36,75344,75346],{"class":38,"line":75345},258,[36,75347,70750],{"class":49},[36,75349,75351],{"class":38,"line":75350},259,[36,75352,70745],{"class":49},[36,75354,75356],{"class":38,"line":75355},260,[36,75357,75358],{"class":49},"        city: city.value,\n",[36,75360,75362],{"class":38,"line":75361},261,[36,75363,75364],{"class":42},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[36,75366,75368],{"class":38,"line":75367},262,[36,75369,75370],{"class":42},"        \u002F\u002F time: new Date().toDateString()\n",[36,75372,75374,75377,75380],{"class":38,"line":75373},263,[36,75375,75376],{"class":49},"        time: ",[36,75378,75379],{"class":2713},"getTime",[36,75381,2726],{"class":49},[36,75383,75385],{"class":38,"line":75384},264,[36,75386,65557],{"class":49},[36,75388,75390],{"class":38,"line":75389},265,[36,75391,75392],{"class":42},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[36,75394,75396,75398],{"class":38,"line":75395},266,[36,75397,70810],{"class":2713},[36,75399,2726],{"class":49},[36,75401,75403,75405,75407,75409,75411],{"class":38,"line":75402},267,[36,75404,70793],{"class":60},[36,75406,1440],{"class":49},[36,75408,70798],{"class":2713},[36,75410,13794],{"class":49},[36,75412,75413],{"class":42},"\u002F\u002F重置表单\n",[36,75415,75417],{"class":38,"line":75416},268,[36,75418,75419],{"class":42},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[36,75421,75423,75426,75428,75430,75433,75435,75437,75439,75441],{"class":38,"line":75422},269,[36,75424,75425],{"class":49},"      localStorage.",[36,75427,72396],{"class":2713},[36,75429,901],{"class":49},[36,75431,75432],{"class":998},"'data'",[36,75434,154],{"class":49},[36,75436,72406],{"class":60},[36,75438,1440],{"class":49},[36,75440,72411],{"class":2713},[36,75442,75443],{"class":49},"(arr))\n",[36,75445,75447],{"class":38,"line":75446},270,[36,75448,34203],{"class":49},[36,75450,75452],{"class":38,"line":75451},271,[36,75453,194],{"emptyLinePlaceholder":193},[36,75455,75457],{"class":38,"line":75456},272,[36,75458,75459],{"class":42},"    \u002F\u002F 3.删除业务\n",[36,75461,75463],{"class":38,"line":75462},273,[36,75464,75465],{"class":42},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[36,75467,75469,75471,75473,75475,75477,75479,75481,75483,75485],{"class":38,"line":75468},274,[36,75470,71083],{"class":49},[36,75472,58555],{"class":2713},[36,75474,901],{"class":49},[36,75476,58560],{"class":998},[36,75478,154],{"class":49},[36,75480,55191],{"class":53},[36,75482,2408],{"class":49},[36,75484,969],{"class":416},[36,75486,13186],{"class":49},[36,75488,75490],{"class":38,"line":75489},275,[36,75491,75492],{"class":42},"      \u002F\u002F 判断是否点击的是删除按钮\n",[36,75494,75496,75498,75500,75502,75504],{"class":38,"line":75495},276,[36,75497,55222],{"class":53},[36,75499,67776],{"class":49},[36,75501,55228],{"class":53},[36,75503,68998],{"class":998},[36,75505,13186],{"class":49},[36,75507,75509],{"class":38,"line":75508},277,[36,75510,75511],{"class":42},"        \u002F\u002F alert(1)\n",[36,75513,75515],{"class":38,"line":75514},278,[36,75516,75517],{"class":42},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[36,75519,75521],{"class":38,"line":75520},279,[36,75522,75523],{"class":42},"        \u002F\u002F console.log(e.target)\n",[36,75525,75527],{"class":38,"line":75526},280,[36,75528,75529],{"class":42},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[36,75531,75533],{"class":38,"line":75532},281,[36,75534,194],{"emptyLinePlaceholder":193},[36,75536,75538],{"class":38,"line":75537},282,[36,75539,75540],{"class":42},"        \u002F\u002F 确认框，确然是否真的要删除\n",[36,75542,75544],{"class":38,"line":75543},283,[36,75545,75546],{"class":42},"        \u002F\u002F confirm()为确认框\n",[36,75548,75550],{"class":38,"line":75549},284,[36,75551,75552],{"class":42},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[36,75554,75556,75558,75560,75563,75565,75568],{"class":38,"line":75555},285,[36,75557,3246],{"class":53},[36,75559,2408],{"class":49},[36,75561,75562],{"class":2713},"confirm",[36,75564,901],{"class":49},[36,75566,75567],{"class":998},"'您确定要删除这条数据吗？'",[36,75569,75570],{"class":49},")) {\n",[36,75572,75574,75577,75579,75581,75583],{"class":38,"line":75573},286,[36,75575,75576],{"class":49},"          arr.",[36,75578,58752],{"class":2713},[36,75580,71136],{"class":49},[36,75582,61],{"class":60},[36,75584,75],{"class":49},[36,75586,75588],{"class":38,"line":75587},287,[36,75589,75590],{"class":42},"          \u002F\u002F 3.4 重新渲染页面\n",[36,75592,75594,75597],{"class":38,"line":75593},288,[36,75595,75596],{"class":2713},"          render",[36,75598,2726],{"class":49},[36,75600,75602],{"class":38,"line":75601},289,[36,75603,75604],{"class":42},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[36,75606,75608,75611,75613,75615,75617,75619,75621,75623,75625],{"class":38,"line":75607},290,[36,75609,75610],{"class":49},"          localStorage.",[36,75612,72396],{"class":2713},[36,75614,901],{"class":49},[36,75616,75432],{"class":998},[36,75618,154],{"class":49},[36,75620,72406],{"class":60},[36,75622,1440],{"class":49},[36,75624,72411],{"class":2713},[36,75626,75443],{"class":49},[36,75628,75630],{"class":38,"line":75629},291,[36,75631,3278],{"class":49},[36,75633,75635],{"class":38,"line":75634},292,[36,75636,53140],{"class":49},[36,75638,75640],{"class":38,"line":75639},293,[36,75641,194],{"emptyLinePlaceholder":193},[36,75643,75645],{"class":38,"line":75644},294,[36,75646,34203],{"class":49},[36,75648,75650],{"class":38,"line":75649},295,[36,75651,194],{"emptyLinePlaceholder":193},[36,75653,75655,75657,75659],{"class":38,"line":75654},296,[36,75656,53159],{"class":49},[36,75658,52555],{"class":52042},[36,75660,52049],{"class":49},[36,75662,75664,75666,75668],{"class":38,"line":75663},297,[36,75665,52527],{"class":49},[36,75667,52542],{"class":52042},[36,75669,52049],{"class":49},[36,75671,75673],{"class":38,"line":75672},298,[36,75674,194],{"emptyLinePlaceholder":193},[36,75676,75678,75680,75682],{"class":38,"line":75677},299,[36,75679,52527],{"class":49},[36,75681,51377],{"class":52042},[36,75683,52049],{"class":49},[21,75685,75687],{"id":75686},"_36-正则表达式","3.6 正则表达式",[14,75689,75690],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,75692,75693],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,75695,75696],{},"正则表达式的作用：",[1886,75698,75699,75706,75712],{},[854,75700,75701,75702,75705],{},"表单验证（ ",[1043,75703,75704],{},"匹配"," ）",[854,75707,75708,75709,75705],{},"过滤敏感词（ ",[1043,75710,75711],{},"替换",[854,75713,75714,75715,75705],{},"字符串中提取我们想要的部分（ ",[1043,75716,75717],{},"提取",[868,75719,75721],{"id":75720},"_361-语法","3.6.1 语法",[14,75723,75724],{},"正则表达式使用步骤：",[851,75726,75727,75730],{},[854,75728,75729],{},"定义规则",[854,75731,75732],{},"查找是否匹配",[14,75734,75735],{},"正则表达式里边不需要写引号",[14,75737,75738],{},[2212,75739],{"alt":31,"src":75740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,75742,75743],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,75745,75746],{},"reg.test(str)",[14,75748,75749],{},[2212,75750],{"alt":31,"src":75751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,75753,75754],{},[2212,75755],{"alt":31,"src":75756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[868,75758,75760],{"id":75759},"_362-元字符","3.6.2 元字符",[851,75762,75763,75766,75769,75772,75779],{},[854,75764,75765],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[854,75767,75768],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[854,75770,75771],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[854,75773,75774,75775],{},"正则验证工具：",[50,75776,75777],{"href":75777,"rel":75778},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24609],[854,75780,75781],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22742,75783,75785],{"id":75784},"_3621-边界符","3.6.2.1 边界符",[14,75787,75788],{},[2212,75789],{"alt":31,"src":75790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75792,75793],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75795,75796],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75798,75799],{},"只匹配一次",[14,75801,75802],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22742,75804,75806],{"id":75805},"_3622-量词","3.6.2.2 量词",[14,75808,75809],{},[2212,75810],{"alt":31,"src":75811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75813,75814],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22742,75816,75818],{"id":75817},"_3623-元字符","3.6.2.3 元字符",[14,75820,75821],{},[2212,75822],{"alt":31,"src":75823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75825,75826],{},"匹配的是a或b或c []只选一个",[14,75828,75829],{},[2212,75830],{"alt":31,"src":75831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75833,75834],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75836,75837],{},[2212,75838],{"alt":31,"src":75839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75841,75842],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75844,75845],{},[2212,75846],{"alt":31,"src":75847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[26,75849,75851],{"className":51375,"code":75850,"language":51377,"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,75852,75853,75863,75877,75881,75889,75903,75923,75935,75943,75947,75955,75963,75968,75999,76026,76054,76058,76063,76091,76122,76127,76132,76163,76195,76227,76231,76236,76267,76297,76327,76331,76336,76367,76398,76428,76458,76462,76467,76500,76504,76509,76540,76571,76575,76580,76611,76641,76672,76676,76681,76713,76744,76775,76802,76833,76865,76898,76929,76960,76992,77023,77031,77039,77043],{"__ignoreMap":31},[36,75854,75855,75857,75859,75861],{"class":38,"line":39},[36,75856,52039],{"class":49},[36,75858,52043],{"class":52042},[36,75860,52046],{"class":2713},[36,75862,52049],{"class":49},[36,75864,75865,75867,75869,75871,75873,75875],{"class":38,"line":46},[36,75866,1789],{"class":49},[36,75868,51377],{"class":52042},[36,75870,52058],{"class":2713},[36,75872,54],{"class":49},[36,75874,52063],{"class":998},[36,75876,52049],{"class":49},[36,75878,75879],{"class":38,"line":78},[36,75880,194],{"emptyLinePlaceholder":193},[36,75882,75883,75885,75887],{"class":38,"line":125},[36,75884,1789],{"class":49},[36,75886,52076],{"class":52042},[36,75888,52049],{"class":49},[36,75890,75891,75893,75895,75897,75899,75901],{"class":38,"line":131},[36,75892,52886],{"class":49},[36,75894,52086],{"class":52042},[36,75896,52089],{"class":2713},[36,75898,54],{"class":49},[36,75900,52094],{"class":998},[36,75902,52049],{"class":49},[36,75904,75905,75907,75909,75911,75913,75915,75917,75919,75921],{"class":38,"line":396},[36,75906,52886],{"class":49},[36,75908,52086],{"class":52042},[36,75910,15664],{"class":2713},[36,75912,54],{"class":49},[36,75914,52133],{"class":998},[36,75916,52113],{"class":2713},[36,75918,54],{"class":49},[36,75920,52140],{"class":998},[36,75922,52049],{"class":49},[36,75924,75925,75927,75929,75931,75933],{"class":38,"line":407},[36,75926,52886],{"class":49},[36,75928,52149],{"class":52042},[36,75930,52152],{"class":49},[36,75932,52149],{"class":52042},[36,75934,52049],{"class":49},[36,75936,75937,75939,75941],{"class":38,"line":2061},[36,75938,52527],{"class":49},[36,75940,52076],{"class":52042},[36,75942,52049],{"class":49},[36,75944,75945],{"class":38,"line":2067},[36,75946,194],{"emptyLinePlaceholder":193},[36,75948,75949,75951,75953],{"class":38,"line":2079},[36,75950,1789],{"class":49},[36,75952,52542],{"class":52042},[36,75954,52049],{"class":49},[36,75956,75957,75959,75961],{"class":38,"line":2362},[36,75958,52886],{"class":49},[36,75960,52555],{"class":52042},[36,75962,52049],{"class":49},[36,75964,75965],{"class":38,"line":2367},[36,75966,75967],{"class":42},"    \u002F\u002F 元字符中\n",[36,75969,75970,75972,75974,75976,75978,75981,75983,75985,75988,75990,75993,75996],{"class":38,"line":2373},[36,75971,74495],{"class":49},[36,75973,58989],{"class":2713},[36,75975,901],{"class":49},[36,75977,1466],{"class":998},[36,75979,75980],{"class":48719},"哈",[36,75982,1466],{"class":998},[36,75984,1440],{"class":49},[36,75986,75987],{"class":2713},"test",[36,75989,901],{"class":49},[36,75991,75992],{"class":998},"'哈'",[36,75994,75995],{"class":49},"))  ",[36,75997,75998],{"class":42},"\u002F\u002Ftrue\n",[36,76000,76001,76003,76005,76007,76009,76011,76013,76015,76017,76019,76022,76024],{"class":38,"line":2378},[36,76002,74495],{"class":49},[36,76004,58989],{"class":2713},[36,76006,901],{"class":49},[36,76008,1466],{"class":998},[36,76010,75980],{"class":48719},[36,76012,1466],{"class":998},[36,76014,1440],{"class":49},[36,76016,75987],{"class":2713},[36,76018,901],{"class":49},[36,76020,76021],{"class":998},"'哈哈'",[36,76023,75995],{"class":49},[36,76025,75998],{"class":42},[36,76027,76028,76030,76032,76034,76036,76038,76040,76042,76044,76046,76049,76052],{"class":38,"line":2392},[36,76029,74495],{"class":49},[36,76031,58989],{"class":2713},[36,76033,901],{"class":49},[36,76035,1466],{"class":998},[36,76037,75980],{"class":48719},[36,76039,1466],{"class":998},[36,76041,1440],{"class":49},[36,76043,75987],{"class":2713},[36,76045,901],{"class":49},[36,76047,76048],{"class":998},"'二哈'",[36,76050,76051],{"class":49},"))   ",[36,76053,75998],{"class":42},[36,76055,76056],{"class":38,"line":2397},[36,76057,194],{"emptyLinePlaceholder":193},[36,76059,76060],{"class":38,"line":2403},[36,76061,76062],{"class":42},"    \u002F\u002F 1.边界符\n",[36,76064,76065,76067,76069,76071,76073,76075,76077,76079,76081,76083,76085,76087,76089],{"class":38,"line":2424},[36,76066,74495],{"class":49},[36,76068,58989],{"class":2713},[36,76070,901],{"class":49},[36,76072,1466],{"class":998},[36,76074,1845],{"class":53},[36,76076,75980],{"class":48719},[36,76078,1466],{"class":998},[36,76080,1440],{"class":49},[36,76082,75987],{"class":2713},[36,76084,901],{"class":49},[36,76086,75992],{"class":998},[36,76088,75995],{"class":49},[36,76090,75998],{"class":42},[36,76092,76093,76095,76097,76099,76101,76103,76105,76107,76109,76111,76113,76115,76117,76119],{"class":38,"line":2429},[36,76094,74495],{"class":49},[36,76096,58989],{"class":2713},[36,76098,901],{"class":49},[36,76100,1466],{"class":998},[36,76102,1845],{"class":53},[36,76104,75980],{"class":48719},[36,76106,1190],{"class":53},[36,76108,1466],{"class":998},[36,76110,1440],{"class":49},[36,76112,75987],{"class":2713},[36,76114,901],{"class":49},[36,76116,76021],{"class":998},[36,76118,75995],{"class":49},[36,76120,76121],{"class":42},"\u002F\u002Ffalse\n",[36,76123,76124],{"class":38,"line":2443},[36,76125,76126],{"class":42},"    \u002F\u002F 2.量词\n",[36,76128,76129],{"class":38,"line":2448},[36,76130,76131],{"class":42},"    \u002F\u002F 量词 * 类似于 >= 0\n",[36,76133,76134,76136,76138,76140,76142,76144,76146,76149,76151,76153,76155,76157,76159,76161],{"class":38,"line":2477},[36,76135,74495],{"class":49},[36,76137,58989],{"class":2713},[36,76139,901],{"class":49},[36,76141,1466],{"class":998},[36,76143,1845],{"class":53},[36,76145,75980],{"class":48719},[36,76147,76148],{"class":53},"*$",[36,76150,1466],{"class":998},[36,76152,1440],{"class":49},[36,76154,75987],{"class":2713},[36,76156,901],{"class":49},[36,76158,76021],{"class":998},[36,76160,75995],{"class":49},[36,76162,75998],{"class":42},[36,76164,76165,76167,76169,76171,76173,76175,76177,76179,76181,76183,76185,76187,76190,76192],{"class":38,"line":2482},[36,76166,74495],{"class":49},[36,76168,58989],{"class":2713},[36,76170,901],{"class":49},[36,76172,1466],{"class":998},[36,76174,1845],{"class":53},[36,76176,75980],{"class":48719},[36,76178,76148],{"class":53},[36,76180,1466],{"class":998},[36,76182,1440],{"class":49},[36,76184,75987],{"class":2713},[36,76186,901],{"class":49},[36,76188,76189],{"class":998},"'二哈好傻'",[36,76191,75995],{"class":49},[36,76193,76194],{"class":42},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[36,76196,76197,76199,76201,76203,76205,76207,76209,76211,76213,76215,76217,76219,76222,76224],{"class":38,"line":2499},[36,76198,74495],{"class":49},[36,76200,58989],{"class":2713},[36,76202,901],{"class":49},[36,76204,1466],{"class":998},[36,76206,1845],{"class":53},[36,76208,75980],{"class":48719},[36,76210,76148],{"class":53},[36,76212,1466],{"class":998},[36,76214,1440],{"class":49},[36,76216,75987],{"class":2713},[36,76218,901],{"class":49},[36,76220,76221],{"class":998},"'哈好哈'",[36,76223,76051],{"class":49},[36,76225,76226],{"class":42},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[36,76228,76229],{"class":38,"line":2504},[36,76230,194],{"emptyLinePlaceholder":193},[36,76232,76233],{"class":38,"line":2509},[36,76234,76235],{"class":42},"    \u002F\u002F +类似于>=1\n",[36,76237,76238,76240,76242,76244,76246,76248,76250,76253,76255,76257,76259,76261,76263,76265],{"class":38,"line":2514},[36,76239,74495],{"class":49},[36,76241,58989],{"class":2713},[36,76243,901],{"class":49},[36,76245,1466],{"class":998},[36,76247,1845],{"class":53},[36,76249,75980],{"class":48719},[36,76251,76252],{"class":53},"+$",[36,76254,1466],{"class":998},[36,76256,1440],{"class":49},[36,76258,75987],{"class":2713},[36,76260,901],{"class":49},[36,76262,76021],{"class":998},[36,76264,75995],{"class":49},[36,76266,75998],{"class":42},[36,76268,76269,76271,76273,76275,76277,76279,76281,76283,76285,76287,76289,76291,76293,76295],{"class":38,"line":2528},[36,76270,74495],{"class":49},[36,76272,58989],{"class":2713},[36,76274,901],{"class":49},[36,76276,1466],{"class":998},[36,76278,1845],{"class":53},[36,76280,75980],{"class":48719},[36,76282,76252],{"class":53},[36,76284,1466],{"class":998},[36,76286,1440],{"class":49},[36,76288,75987],{"class":2713},[36,76290,901],{"class":49},[36,76292,76189],{"class":998},[36,76294,75995],{"class":49},[36,76296,76194],{"class":42},[36,76298,76299,76301,76303,76305,76307,76309,76311,76313,76315,76317,76319,76321,76323,76325],{"class":38,"line":2533},[36,76300,74495],{"class":49},[36,76302,58989],{"class":2713},[36,76304,901],{"class":49},[36,76306,1466],{"class":998},[36,76308,1845],{"class":53},[36,76310,75980],{"class":48719},[36,76312,76252],{"class":53},[36,76314,1466],{"class":998},[36,76316,1440],{"class":49},[36,76318,75987],{"class":2713},[36,76320,901],{"class":49},[36,76322,76221],{"class":998},[36,76324,76051],{"class":49},[36,76326,76121],{"class":42},[36,76328,76329],{"class":38,"line":3326},[36,76330,194],{"emptyLinePlaceholder":193},[36,76332,76333],{"class":38,"line":3340},[36,76334,76335],{"class":42},"    \u002F\u002F ?类似于0次或一次\n",[36,76337,76338,76340,76342,76344,76346,76348,76351,76353,76355,76357,76359,76361,76363,76365],{"class":38,"line":3348},[36,76339,74495],{"class":49},[36,76341,58989],{"class":2713},[36,76343,901],{"class":49},[36,76345,1466],{"class":998},[36,76347,1845],{"class":53},[36,76349,76350],{"class":48719},"哈？",[36,76352,1190],{"class":53},[36,76354,1466],{"class":998},[36,76356,1440],{"class":49},[36,76358,75987],{"class":2713},[36,76360,901],{"class":49},[36,76362,74970],{"class":998},[36,76364,76051],{"class":49},[36,76366,75998],{"class":42},[36,76368,76369,76371,76373,76375,76377,76379,76381,76384,76386,76388,76390,76392,76394,76396],{"class":38,"line":3353},[36,76370,74495],{"class":49},[36,76372,58989],{"class":2713},[36,76374,901],{"class":49},[36,76376,1466],{"class":998},[36,76378,1845],{"class":53},[36,76380,75980],{"class":48719},[36,76382,76383],{"class":53},"?$",[36,76385,1466],{"class":998},[36,76387,1440],{"class":49},[36,76389,75987],{"class":2713},[36,76391,901],{"class":49},[36,76393,76021],{"class":998},[36,76395,75995],{"class":49},[36,76397,76121],{"class":42},[36,76399,76400,76402,76404,76406,76408,76410,76412,76414,76416,76418,76420,76422,76424,76426],{"class":38,"line":3359},[36,76401,74495],{"class":49},[36,76403,58989],{"class":2713},[36,76405,901],{"class":49},[36,76407,1466],{"class":998},[36,76409,1845],{"class":53},[36,76411,75980],{"class":48719},[36,76413,76383],{"class":53},[36,76415,1466],{"class":998},[36,76417,1440],{"class":49},[36,76419,75987],{"class":2713},[36,76421,901],{"class":49},[36,76423,76189],{"class":998},[36,76425,75995],{"class":49},[36,76427,76194],{"class":42},[36,76429,76430,76432,76434,76436,76438,76440,76442,76444,76446,76448,76450,76452,76454,76456],{"class":38,"line":3365},[36,76431,74495],{"class":49},[36,76433,58989],{"class":2713},[36,76435,901],{"class":49},[36,76437,1466],{"class":998},[36,76439,1845],{"class":53},[36,76441,75980],{"class":48719},[36,76443,76383],{"class":53},[36,76445,1466],{"class":998},[36,76447,1440],{"class":49},[36,76449,75987],{"class":2713},[36,76451,901],{"class":49},[36,76453,76221],{"class":998},[36,76455,75995],{"class":49},[36,76457,76121],{"class":42},[36,76459,76460],{"class":38,"line":3370},[36,76461,194],{"emptyLinePlaceholder":193},[36,76463,76464],{"class":38,"line":8695},[36,76465,76466],{"class":42},"    \u002F\u002F {n}写几，就必须出现几次\n",[36,76468,76469,76471,76473,76475,76477,76479,76481,76484,76486,76488,76490,76492,76495,76498],{"class":38,"line":8719},[36,76470,74495],{"class":49},[36,76472,58989],{"class":2713},[36,76474,901],{"class":49},[36,76476,1466],{"class":998},[36,76478,1845],{"class":53},[36,76480,75980],{"class":48719},[36,76482,76483],{"class":53},"{4}$",[36,76485,1466],{"class":998},[36,76487,1440],{"class":49},[36,76489,75987],{"class":2713},[36,76491,901],{"class":49},[36,76493,76494],{"class":998},"'哈哈哈哈'",[36,76496,76497],{"class":49},")) ",[36,76499,75998],{"class":42},[36,76501,76502],{"class":38,"line":8724},[36,76503,194],{"emptyLinePlaceholder":193},[36,76505,76506],{"class":38,"line":8730},[36,76507,76508],{"class":42},"    \u002F\u002F {n,}大于等于n次\n",[36,76510,76511,76513,76515,76517,76519,76521,76523,76526,76528,76530,76532,76534,76536,76538],{"class":38,"line":8757},[36,76512,74495],{"class":49},[36,76514,58989],{"class":2713},[36,76516,901],{"class":49},[36,76518,1466],{"class":998},[36,76520,1845],{"class":53},[36,76522,75980],{"class":48719},[36,76524,76525],{"class":53},"{4,}$",[36,76527,1466],{"class":998},[36,76529,1440],{"class":49},[36,76531,75987],{"class":2713},[36,76533,901],{"class":49},[36,76535,76494],{"class":998},[36,76537,76497],{"class":49},[36,76539,75998],{"class":42},[36,76541,76542,76544,76546,76548,76550,76552,76554,76556,76558,76560,76562,76564,76567,76569],{"class":38,"line":8762},[36,76543,74495],{"class":49},[36,76545,58989],{"class":2713},[36,76547,901],{"class":49},[36,76549,1466],{"class":998},[36,76551,1845],{"class":53},[36,76553,75980],{"class":48719},[36,76555,76525],{"class":53},[36,76557,1466],{"class":998},[36,76559,1440],{"class":49},[36,76561,75987],{"class":2713},[36,76563,901],{"class":49},[36,76565,76566],{"class":998},"'哈哈哈哈哈'",[36,76568,76497],{"class":49},[36,76570,75998],{"class":42},[36,76572,76573],{"class":38,"line":8768},[36,76574,194],{"emptyLinePlaceholder":193},[36,76576,76577],{"class":38,"line":8780},[36,76578,76579],{"class":42},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[36,76581,76582,76584,76586,76588,76590,76592,76594,76597,76599,76601,76603,76605,76607,76609],{"class":38,"line":8792},[36,76583,74495],{"class":49},[36,76585,58989],{"class":2713},[36,76587,901],{"class":49},[36,76589,1466],{"class":998},[36,76591,1845],{"class":53},[36,76593,75980],{"class":48719},[36,76595,76596],{"class":53},"{4,6}$",[36,76598,1466],{"class":998},[36,76600,1440],{"class":49},[36,76602,75987],{"class":2713},[36,76604,901],{"class":49},[36,76606,76494],{"class":998},[36,76608,76497],{"class":49},[36,76610,75998],{"class":42},[36,76612,76613,76615,76617,76619,76621,76623,76625,76627,76629,76631,76633,76635,76637,76639],{"class":38,"line":8804},[36,76614,74495],{"class":49},[36,76616,58989],{"class":2713},[36,76618,901],{"class":49},[36,76620,1466],{"class":998},[36,76622,1845],{"class":53},[36,76624,75980],{"class":48719},[36,76626,76596],{"class":53},[36,76628,1466],{"class":998},[36,76630,1440],{"class":49},[36,76632,75987],{"class":2713},[36,76634,901],{"class":49},[36,76636,76566],{"class":998},[36,76638,76497],{"class":49},[36,76640,75998],{"class":42},[36,76642,76643,76645,76647,76649,76651,76653,76655,76657,76659,76661,76663,76665,76668,76670],{"class":38,"line":10463},[36,76644,74495],{"class":49},[36,76646,58989],{"class":2713},[36,76648,901],{"class":49},[36,76650,1466],{"class":998},[36,76652,1845],{"class":53},[36,76654,75980],{"class":48719},[36,76656,76596],{"class":53},[36,76658,1466],{"class":998},[36,76660,1440],{"class":49},[36,76662,75987],{"class":2713},[36,76664,901],{"class":49},[36,76666,76667],{"class":998},"'哈哈哈哈哈哈哈'",[36,76669,76497],{"class":49},[36,76671,76121],{"class":42},[36,76673,76674],{"class":38,"line":10488},[36,76675,194],{"emptyLinePlaceholder":193},[36,76677,76678],{"class":38,"line":10511},[36,76679,76680],{"class":42},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[36,76682,76683,76685,76687,76689,76691,76693,76696,76698,76700,76702,76704,76706,76709,76711],{"class":38,"line":10535},[36,76684,74495],{"class":49},[36,76686,58989],{"class":2713},[36,76688,901],{"class":49},[36,76690,1466],{"class":998},[36,76692,1845],{"class":53},[36,76694,76695],{"class":60},"[abc]",[36,76697,1190],{"class":53},[36,76699,1466],{"class":998},[36,76701,1440],{"class":49},[36,76703,75987],{"class":2713},[36,76705,901],{"class":49},[36,76707,76708],{"class":998},"'a'",[36,76710,75995],{"class":49},[36,76712,75998],{"class":42},[36,76714,76715,76717,76719,76721,76723,76725,76727,76729,76731,76733,76735,76737,76740,76742],{"class":38,"line":10540},[36,76716,74495],{"class":49},[36,76718,58989],{"class":2713},[36,76720,901],{"class":49},[36,76722,1466],{"class":998},[36,76724,1845],{"class":53},[36,76726,76695],{"class":60},[36,76728,1190],{"class":53},[36,76730,1466],{"class":998},[36,76732,1440],{"class":49},[36,76734,75987],{"class":2713},[36,76736,901],{"class":49},[36,76738,76739],{"class":998},"'b'",[36,76741,75995],{"class":49},[36,76743,75998],{"class":42},[36,76745,76746,76748,76750,76752,76754,76756,76758,76760,76762,76764,76766,76768,76771,76773],{"class":38,"line":10545},[36,76747,74495],{"class":49},[36,76749,58989],{"class":2713},[36,76751,901],{"class":49},[36,76753,1466],{"class":998},[36,76755,1845],{"class":53},[36,76757,76695],{"class":60},[36,76759,1190],{"class":53},[36,76761,1466],{"class":998},[36,76763,1440],{"class":49},[36,76765,75987],{"class":2713},[36,76767,901],{"class":49},[36,76769,76770],{"class":998},"'c'",[36,76772,75995],{"class":49},[36,76774,75998],{"class":42},[36,76776,76777,76779,76781,76783,76785,76787,76789,76791,76793,76795,76798,76800],{"class":38,"line":10550},[36,76778,74495],{"class":49},[36,76780,58989],{"class":2713},[36,76782,901],{"class":49},[36,76784,1466],{"class":998},[36,76786,76695],{"class":60},[36,76788,1466],{"class":998},[36,76790,1440],{"class":49},[36,76792,75987],{"class":2713},[36,76794,901],{"class":49},[36,76796,76797],{"class":998},"'ab'",[36,76799,75995],{"class":49},[36,76801,75998],{"class":42},[36,76803,76804,76806,76808,76810,76812,76814,76816,76818,76820,76822,76824,76826,76828,76830],{"class":38,"line":10559},[36,76805,74495],{"class":49},[36,76807,58989],{"class":2713},[36,76809,901],{"class":49},[36,76811,1466],{"class":998},[36,76813,1845],{"class":53},[36,76815,76695],{"class":60},[36,76817,1190],{"class":53},[36,76819,1466],{"class":998},[36,76821,1440],{"class":49},[36,76823,75987],{"class":2713},[36,76825,901],{"class":49},[36,76827,76797],{"class":998},[36,76829,75995],{"class":49},[36,76831,76832],{"class":42},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[36,76834,76835,76837,76839,76841,76843,76845,76847,76850,76852,76854,76856,76858,76860,76862],{"class":38,"line":10564},[36,76836,74495],{"class":49},[36,76838,58989],{"class":2713},[36,76840,901],{"class":49},[36,76842,1466],{"class":998},[36,76844,1845],{"class":53},[36,76846,76695],{"class":60},[36,76848,76849],{"class":53},"{2}$",[36,76851,1466],{"class":998},[36,76853,1440],{"class":49},[36,76855,75987],{"class":2713},[36,76857,901],{"class":49},[36,76859,76797],{"class":998},[36,76861,75995],{"class":49},[36,76863,76864],{"class":42},"\u002F\u002Ftrue   可以选两个\n",[36,76866,76867,76869,76871,76873,76875,76877,76880,76882,76884,76886,76888,76890,76893,76895],{"class":38,"line":10570},[36,76868,74495],{"class":49},[36,76870,58989],{"class":2713},[36,76872,901],{"class":49},[36,76874,1466],{"class":998},[36,76876,1845],{"class":53},[36,76878,76879],{"class":60},"[a-z]",[36,76881,1190],{"class":53},[36,76883,1466],{"class":998},[36,76885,1440],{"class":49},[36,76887,75987],{"class":2713},[36,76889,901],{"class":49},[36,76891,76892],{"class":998},"'p'",[36,76894,76051],{"class":49},[36,76896,76897],{"class":42},"\u002F\u002Ftrue   依然只能选一个\n",[36,76899,76900,76902,76904,76906,76908,76910,76913,76915,76917,76919,76921,76923,76925,76927],{"class":38,"line":10591},[36,76901,74495],{"class":49},[36,76903,58989],{"class":2713},[36,76905,901],{"class":49},[36,76907,1466],{"class":998},[36,76909,1845],{"class":53},[36,76911,76912],{"class":60},"[A-Z]",[36,76914,1190],{"class":53},[36,76916,1466],{"class":998},[36,76918,1440],{"class":49},[36,76920,75987],{"class":2713},[36,76922,901],{"class":49},[36,76924,76892],{"class":998},[36,76926,76051],{"class":49},[36,76928,76121],{"class":42},[36,76930,76931,76933,76935,76937,76939,76941,76943,76945,76947,76949,76951,76953,76956,76958],{"class":38,"line":10597},[36,76932,74495],{"class":49},[36,76934,58989],{"class":2713},[36,76936,901],{"class":49},[36,76938,1466],{"class":998},[36,76940,1845],{"class":53},[36,76942,76912],{"class":60},[36,76944,1190],{"class":53},[36,76946,1466],{"class":998},[36,76948,1440],{"class":49},[36,76950,75987],{"class":2713},[36,76952,901],{"class":49},[36,76954,76955],{"class":998},"'P'",[36,76957,76051],{"class":49},[36,76959,75998],{"class":42},[36,76961,76962,76964,76966,76968,76970,76972,76975,76977,76979,76981,76983,76985,76988,76990],{"class":38,"line":10611},[36,76963,74495],{"class":49},[36,76965,58989],{"class":2713},[36,76967,901],{"class":49},[36,76969,1466],{"class":998},[36,76971,1845],{"class":53},[36,76973,76974],{"class":60},"[0-9]",[36,76976,1190],{"class":53},[36,76978,1466],{"class":998},[36,76980,1440],{"class":49},[36,76982,75987],{"class":2713},[36,76984,901],{"class":49},[36,76986,76987],{"class":998},"'0'",[36,76989,76051],{"class":49},[36,76991,75998],{"class":42},[36,76993,76994,76996,76998,77000,77002,77004,77007,77009,77011,77013,77015,77017,77019,77021],{"class":38,"line":10617},[36,76995,74495],{"class":49},[36,76997,58989],{"class":2713},[36,76999,901],{"class":49},[36,77001,1466],{"class":998},[36,77003,1845],{"class":53},[36,77005,77006],{"class":60},"[a-zA-Z0-9]",[36,77008,1190],{"class":53},[36,77010,1466],{"class":998},[36,77012,1440],{"class":49},[36,77014,75987],{"class":2713},[36,77016,901],{"class":49},[36,77018,76892],{"class":998},[36,77020,75995],{"class":49},[36,77022,75998],{"class":42},[36,77024,77025,77027,77029],{"class":38,"line":10644},[36,77026,53159],{"class":49},[36,77028,52555],{"class":52042},[36,77030,52049],{"class":49},[36,77032,77033,77035,77037],{"class":38,"line":10653},[36,77034,52527],{"class":49},[36,77036,52542],{"class":52042},[36,77038,52049],{"class":49},[36,77040,77041],{"class":38,"line":10659},[36,77042,194],{"emptyLinePlaceholder":193},[36,77044,77045,77047,77049],{"class":38,"line":10667},[36,77046,52527],{"class":49},[36,77048,51377],{"class":52042},[36,77050,52049],{"class":49},[22742,77052,77054],{"id":77053},"_3624-修饰符","3.6.2.4 修饰符",[14,77056,77057],{},[2212,77058],{"alt":31,"src":77059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,77061,77062],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,77064,77065],{},[2212,77066],{"alt":31,"src":77067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[26,77069,77071],{"className":51375,"code":77070,"language":51377,"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,77072,77073,77083,77097,77105,77119,77139,77151,77159,77167,77175,77207,77238,77243,77275,77286,77319,77328,77336,77344],{"__ignoreMap":31},[36,77074,77075,77077,77079,77081],{"class":38,"line":39},[36,77076,52039],{"class":49},[36,77078,52043],{"class":52042},[36,77080,52046],{"class":2713},[36,77082,52049],{"class":49},[36,77084,77085,77087,77089,77091,77093,77095],{"class":38,"line":46},[36,77086,1789],{"class":49},[36,77088,51377],{"class":52042},[36,77090,52058],{"class":2713},[36,77092,54],{"class":49},[36,77094,52063],{"class":998},[36,77096,52049],{"class":49},[36,77098,77099,77101,77103],{"class":38,"line":78},[36,77100,1789],{"class":49},[36,77102,52076],{"class":52042},[36,77104,52049],{"class":49},[36,77106,77107,77109,77111,77113,77115,77117],{"class":38,"line":125},[36,77108,52886],{"class":49},[36,77110,52086],{"class":52042},[36,77112,52089],{"class":2713},[36,77114,54],{"class":49},[36,77116,52094],{"class":998},[36,77118,52049],{"class":49},[36,77120,77121,77123,77125,77127,77129,77131,77133,77135,77137],{"class":38,"line":131},[36,77122,52886],{"class":49},[36,77124,52086],{"class":52042},[36,77126,15664],{"class":2713},[36,77128,54],{"class":49},[36,77130,52133],{"class":998},[36,77132,52113],{"class":2713},[36,77134,54],{"class":49},[36,77136,52140],{"class":998},[36,77138,52049],{"class":49},[36,77140,77141,77143,77145,77147,77149],{"class":38,"line":396},[36,77142,52886],{"class":49},[36,77144,52149],{"class":52042},[36,77146,52152],{"class":49},[36,77148,52149],{"class":52042},[36,77150,52049],{"class":49},[36,77152,77153,77155,77157],{"class":38,"line":407},[36,77154,52527],{"class":49},[36,77156,52076],{"class":52042},[36,77158,52049],{"class":49},[36,77160,77161,77163,77165],{"class":38,"line":2061},[36,77162,1789],{"class":49},[36,77164,52542],{"class":52042},[36,77166,52049],{"class":49},[36,77168,77169,77171,77173],{"class":38,"line":2067},[36,77170,52886],{"class":49},[36,77172,52555],{"class":52042},[36,77174,52049],{"class":49},[36,77176,77177,77179,77181,77183,77185,77187,77190,77192,77194,77196,77198,77200,77203,77205],{"class":38,"line":2079},[36,77178,74495],{"class":49},[36,77180,58989],{"class":2713},[36,77182,901],{"class":49},[36,77184,1466],{"class":998},[36,77186,1845],{"class":53},[36,77188,77189],{"class":48719},"java",[36,77191,1190],{"class":53},[36,77193,1466],{"class":998},[36,77195,1440],{"class":49},[36,77197,75987],{"class":2713},[36,77199,901],{"class":49},[36,77201,77202],{"class":998},"'java'",[36,77204,76497],{"class":49},[36,77206,75998],{"class":42},[36,77208,77209,77211,77213,77215,77217,77219,77221,77223,77225,77227,77229,77231,77234,77236],{"class":38,"line":2362},[36,77210,74495],{"class":49},[36,77212,58989],{"class":2713},[36,77214,901],{"class":49},[36,77216,1466],{"class":998},[36,77218,1845],{"class":53},[36,77220,77189],{"class":48719},[36,77222,1190],{"class":53},[36,77224,1466],{"class":998},[36,77226,1440],{"class":49},[36,77228,75987],{"class":2713},[36,77230,901],{"class":49},[36,77232,77233],{"class":998},"'Java'",[36,77235,76497],{"class":49},[36,77237,76121],{"class":42},[36,77239,77240],{"class":38,"line":2367},[36,77241,77242],{"class":42},"    \u002F\u002F 不区分大小写、\n",[36,77244,77245,77247,77249,77251,77253,77255,77257,77259,77261,77263,77265,77267,77269,77271,77273],{"class":38,"line":2373},[36,77246,74495],{"class":49},[36,77248,58989],{"class":2713},[36,77250,901],{"class":49},[36,77252,1466],{"class":998},[36,77254,1845],{"class":53},[36,77256,77189],{"class":48719},[36,77258,1190],{"class":53},[36,77260,1466],{"class":998},[36,77262,1326],{"class":53},[36,77264,1440],{"class":49},[36,77266,75987],{"class":2713},[36,77268,901],{"class":49},[36,77270,77233],{"class":998},[36,77272,76497],{"class":49},[36,77274,75998],{"class":42},[36,77276,77277,77279,77281,77283],{"class":38,"line":2378},[36,77278,11966],{"class":53},[36,77280,74661],{"class":60},[36,77282,14308],{"class":53},[36,77284,77285],{"class":998}," 'java是一门编程语言，学完java工资很高'\n",[36,77287,77288,77290,77293,77295,77298,77301,77303,77305,77307,77309,77312,77314,77317],{"class":38,"line":2392},[36,77289,11966],{"class":53},[36,77291,77292],{"class":60}," result",[36,77294,14308],{"class":53},[36,77296,77297],{"class":49}," str.",[36,77299,77300],{"class":2713},"replace",[36,77302,901],{"class":49},[36,77304,1466],{"class":998},[36,77306,77189],{"class":48719},[36,77308,1466],{"class":998},[36,77310,77311],{"class":53},"ig",[36,77313,154],{"class":49},[36,77315,77316],{"class":998},"'前端'",[36,77318,75],{"class":49},[36,77320,77321,77323,77325],{"class":38,"line":2397},[36,77322,74495],{"class":49},[36,77324,58989],{"class":2713},[36,77326,77327],{"class":49},"(result)\n",[36,77329,77330,77332,77334],{"class":38,"line":2403},[36,77331,53159],{"class":49},[36,77333,52555],{"class":52042},[36,77335,52049],{"class":49},[36,77337,77338,77340,77342],{"class":38,"line":2424},[36,77339,52527],{"class":49},[36,77341,52542],{"class":52042},[36,77343,52049],{"class":49},[36,77345,77346,77348,77350],{"class":38,"line":2429},[36,77347,52527],{"class":49},[36,77349,51377],{"class":52042},[36,77351,52049],{"class":49},[807,77353,77354],{},"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":46,"depth":46,"links":77356},[77357,77367,77379,77396,77403,77411],{"id":54102,"depth":46,"text":54103,"children":77358},[77359,77360,77361,77362,77363,77364,77365,77366],{"id":54106,"depth":78,"text":54107},{"id":54139,"depth":78,"text":54140},{"id":54178,"depth":78,"text":54179},{"id":54336,"depth":78,"text":54337},{"id":54384,"depth":78,"text":54385},{"id":54521,"depth":78,"text":54522},{"id":54843,"depth":78,"text":54844},{"id":57831,"depth":78,"text":57832},{"id":57859,"depth":46,"text":57860,"children":77368},[77369,77370,77371,77372,77373,77374,77375,77376,77377,77378],{"id":57863,"depth":78,"text":57864},{"id":57886,"depth":78,"text":57887},{"id":58801,"depth":78,"text":58802},{"id":59491,"depth":78,"text":59492},{"id":59773,"depth":78,"text":59774},{"id":63934,"depth":78,"text":63935},{"id":64104,"depth":78,"text":64105},{"id":64232,"depth":78,"text":64233},{"id":64257,"depth":78,"text":64258},{"id":65646,"depth":78,"text":65647},{"id":66799,"depth":46,"text":66800,"children":77380},[77381,77382,77383,77384,77385,77386,77387,77388,77389,77390,77391,77392,77393,77394,77395],{"id":66803,"depth":78,"text":66804},{"id":67457,"depth":78,"text":67458},{"id":69152,"depth":78,"text":69153},{"id":69193,"depth":78,"text":69194},{"id":69235,"depth":78,"text":69236},{"id":69249,"depth":78,"text":69250},{"id":69298,"depth":78,"text":69299},{"id":69310,"depth":78,"text":69311},{"id":69325,"depth":78,"text":69326},{"id":69361,"depth":78,"text":69362},{"id":69442,"depth":78,"text":69443},{"id":69570,"depth":78,"text":69571},{"id":69582,"depth":78,"text":69583},{"id":69601,"depth":78,"text":69602},{"id":71712,"depth":78,"text":71713},{"id":71731,"depth":46,"text":71732,"children":77397},[77398,77399,77400,77401,77402],{"id":71752,"depth":78,"text":71753},{"id":71772,"depth":78,"text":71773},{"id":71821,"depth":78,"text":71822},{"id":71946,"depth":78,"text":71947},{"id":72127,"depth":78,"text":72128},{"id":72145,"depth":46,"text":72146,"children":77404},[77405,77406,77407,77408,77409,77410],{"id":72160,"depth":78,"text":72161},{"id":72219,"depth":78,"text":72220},{"id":72243,"depth":78,"text":72244},{"id":72563,"depth":78,"text":72564},{"id":72595,"depth":78,"text":72596},{"id":72618,"depth":78,"text":72619},{"id":75686,"depth":46,"text":75687,"children":77412},[77413,77414],{"id":75720,"depth":78,"text":75721},{"id":75759,"depth":78,"text":75760},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":54074,"description":823},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77421,"title":77422,"body":77423,"description":823,"extension":824,"meta":93560,"navigation":193,"path":93561,"seo":93562,"stem":93563,"__hash__":93564},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77424,"toc":93496},[77425,77428,77431,77435,77439,77444,77449,77460,77464,77469,77472,77476,77479,77484,77488,77492,77495,77500,77503,77507,77510,77518,77521,77525,77530,77535,77538,77542,77547,77552,77555,77559,77564,77567,77572,77575,77580,77583,77588,77593,77596,77599,77603,77608,77613,77616,77620,77624,77627,77630,77633,77637,77641,77646,77651,77654,77658,77663,77668,77671,77674,77677,77680,77683,77686,77689,77692,77695,77700,77704,77709,77714,77717,77720,77723,77726,77729,77732,77735,77738,77742,77746,77749,77752,77755,77760,77762,77765,77768,77771,77774,77777,77780,77783,77786,77789,77792,77795,77798,77801,77806,77811,77816,77819,77823,77826,77831,77835,77837,77848,77853,77954,77957,77960,77963,77966,77969,77972,77975,77978,77980,77983,77986,77989,77992,77995,77997,78000,78003,78006,78009,78012,78015,78017,78020,78022,78024,78027,78031,78035,78038,78041,78044,78047,78050,78053,78056,78059,78062,78067,78187,78190,78193,78198,78201,78204,78207,78210,78215,78218,78221,78224,78227,78232,78235,78335,78400,78474,78478,78481,78484,78488,78491,78505,78534,78537,78540,78543,78546,78549,78552,78555,78557,78560,78563,78566,78569,78573,78578,78582,78587,78662,78665,78848,78851,78854,78857,78860,78863,78865,78868,78871,78874,78877,78880,78883,78885,78889,78892,78897,78900,78903,78906,78909,78911,78916,78919,78922,78925,78928,78930,78935,78938,78941,78943,78945,78948,78952,78955,78958,78963,78966,78969,78972,79022,79027,79031,79036,79039,79108,79111,79120,79124,79129,79132,79135,79143,79146,79163,80965,80969,80973,80978,80981,80985,80991,80997,81149,81154,81159,81162,81165,81168,81171,81174,81177,81180,81183,81186,81189,81192,81195,81200,81204,81207,81218,81222,81227,81230,81233,81236,81239,81242,81244,81247,81250,81253,81256,81258,81275,81278,81282,81285,81290,81295,81298,81301,81305,81308,81311,81320,81323,81327,81330,81335,81340,81407,81411,81414,81417,81422,81427,81513,81518,81522,81525,81528,81543,81546,81551,81555,81560,81669,81672,81683,81833,81837,81842,81951,81955,81960,81965,81970,81973,81980,82000,82036,82200,82205,82208,82213,82220,82223,82226,82229,82288,82344,82400,82404,82409,82724,82727,82731,82734,82739,82848,82853,82857,82862,82866,82937,82941,82943,82946,82949,82987,83263,83267,83284,83350,83384,83388,83391,83396,83425,83432,83441,83446,83461,83466,83475,83478,83615,83619,83681,83685,83690,83935,83939,83944,83947,83950,83953,83956,83960,83965,85546,85550,85554,85560,85563,85568,85572,85575,85580,85583,85594,85598,85603,85607,85612,85617,85620,85625,85629,85633,85636,85641,85646,85649,85652,85655,85777,85782,85884,85887,85890,85894,85899,86071,86076,86080,86083,86088,86154,86159,86162,86293,86296,86301,86304,86307,86398,86403,86406,86409,86412,86415,86420,86425,86428,86433,86438,86443,86447,86450,86453,86458,86463,86468,86473,86527,86530,86533,86538,86541,86544,86549,86554,86559,86563,86568,86582,86587,86590,86595,86599,86604,86609,86614,86619,86624,86629,86634,86639,86642,86646,86651,86654,86657,86660,86665,86670,86673,86676,86680,86683,86686,86691,86696,86701,86706,86709,86714,86719,86780,86785,86788,86793,88034,88039,88043,88047,88052,88055,88060,88065,88068,88073,88075,88080,88084,88087,88090,88101,88105,88110,88115,88170,88175,88180,88185,88396,88401,88405,88410,88413,88415,88418,88421,88868,88873,88880,88886,88889,88892,89156,89161,89165,89430,89435,89439,89444,89449,89454,89459,89790,89793,89798,89803,89806,89810,89814,89819,89824,89829,89834,89839,89844,89848,89851,89856,89861,89864,89938,89943,89948,89953,89955,89958,90328,90333,90338,90343,90346,90349,90451,90456,90461,90564,90568,90573,90577,90581,90586,90591,90594,90599,90602,90605,90998,91003,91006,91009,91012,91015,91535,91539,91544,91549,91554,91557,91562,91565,91568,91950,91955,91957,91959,91962,91965,92477,92481,92542,92545,92548,92551,92555,92558,92563,92568,93493],[10,77426,77422],{"id":77427},"_4js进阶",[14,77429,77430],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[21,77432,77434],{"id":77433},"_41-作用域","4.1 作用域",[868,77436,77438],{"id":77437},"_411-局部作用域","4.1.1 局部作用域",[14,77440,77441],{},[2212,77442],{"alt":31,"src":77443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,77445,77446],{},[2212,77447],{"alt":31,"src":77448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1886,77450,77451,77454,77457],{},[854,77452,77453],{},"函数作用域在函数内部",[854,77455,77456],{},"块级作用域在{}",[854,77458,77459],{},"对象的那个{}不是作用域，不是块作用域",[868,77461,77463],{"id":77462},"_412-全局作用域","4.1.2 全局作用域",[14,77465,77466],{},[2212,77467],{"alt":31,"src":77468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,77470,77471],{},"window.a=10不要这样写",[868,77473,77475],{"id":77474},"_413-作用域链","4.1.3 作用域链",[14,77477,77478],{},"变量查找机制",[14,77480,77481],{},[2212,77482],{"alt":31,"src":77483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[21,77485,77487],{"id":77486},"_42-垃圾回收机制","4.2 垃圾回收机制",[868,77489,77491],{"id":77490},"_421-大体介绍","4.2.1 大体介绍",[14,77493,77494],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,77496,77497],{},[2212,77498],{"alt":31,"src":77499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,77501,77502],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[868,77504,77506],{"id":77505},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,77508,77509],{},"堆栈空间分配区别：",[851,77511,77512,77515],{},[854,77513,77514],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[854,77516,77517],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,77519,77520],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22742,77522,77524],{"id":77523},"_4221-引用计数","4.2.2.1 引用计数",[14,77526,77527],{},[2212,77528],{"alt":31,"src":77529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,77531,77532],{},[2212,77533],{"alt":31,"src":77534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,77536,77537],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22742,77539,77541],{"id":77540},"_4222-标记清除法","4.2.2.2 标记清除法",[14,77543,77544],{},[2212,77545],{"alt":31,"src":77546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,77548,77549],{},[2212,77550],{"alt":31,"src":77551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,77553,77554],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[21,77556,77558],{"id":77557},"_43-闭包","4.3 闭包",[14,77560,77561],{},[2212,77562],{"alt":31,"src":77563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,77565,77566],{},"闭包：内层函数+外层函数的变量",[14,77568,77569],{},[2212,77570],{"alt":31,"src":77571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,77573,77574],{},"closure就是闭包",[14,77576,77577],{},[2212,77578],{"alt":31,"src":77579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,77581,77582],{},"内层函数必须包含外层函数的变量才是闭包",[14,77584,77585],{},[2212,77586],{"alt":31,"src":77587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,77589,77590],{},[2212,77591],{"alt":31,"src":77592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,77594,77595],{},"闭包可能会引起内存泄漏",[14,77597,77598],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[21,77600,77602],{"id":77601},"_44-变量提升","4.4 变量提升",[14,77604,77605],{},[2212,77606],{"alt":31,"src":77607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,77609,77610],{},[2212,77611],{"alt":31,"src":77612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,77614,77615],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[21,77617,77619],{"id":77618},"_45-函数进阶","4.5 函数进阶",[868,77621,77623],{"id":77622},"_451-函数提升","4.5.1 函数提升",[14,77625,77626],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,77628,77629],{},"只提升函数声明，不提升函数调用",[52555,77631,77632],{},"\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",[868,77634,77636],{"id":77635},"_452-函数参数","4.5.2 函数参数",[22742,77638,77640],{"id":77639},"_4521-动态参数","4.5.2.1 动态参数",[14,77642,77643],{},[2212,77644],{"alt":31,"src":77645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,77647,77648],{},[2212,77649],{"alt":31,"src":77650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,77652,77653],{},"箭头函数里边没有arguments",[22742,77655,77657],{"id":77656},"_4522-剩余参数","4.5.2.2 剩余参数",[14,77659,77660],{},[2212,77661],{"alt":31,"src":77662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,77664,77665],{},[2212,77666],{"alt":31,"src":77667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,77669,77670],{},"剩余参数使用的时候不需要写...",[14,77672,77673],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,77675,77676],{},"  function getSum(a,b,...arr) {",[14,77678,77679],{},"  console.log(11)",[14,77681,77682],{},"  }",[14,77684,77685],{},"  getSum(1,2,3,4)",[14,77687,77688],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,77690,77691],{},"  getSum(1,2)",[14,77693,77694],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,77696,77697],{},[2212,77698],{"alt":31,"src":77699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22742,77701,77703],{"id":77702},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,77705,77706],{},[2212,77707],{"alt":31,"src":77708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,77710,77711],{},[2212,77712],{"alt":31,"src":77713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,77715,77716],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,77718,77719],{},"展开运算符可以用于数组之间的合并：",[14,77721,77722],{},"const arr1 = [1, 2, 3]",[14,77724,77725],{},"const arr2 = [3, 4, 5]",[14,77727,77728],{},"const arr = [...arr1, ...arr2]",[14,77730,77731],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,77733,77734],{},"剩余参数：函数参数使用，得到真数组",[14,77736,77737],{},"展开运算符：数组中使用，数组展开",[868,77739,77741],{"id":77740},"_453-箭头函数","4.5.3 箭头函数",[22742,77743,77745],{"id":77744},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,77747,77748],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,77750,77751],{},"它不是万能的！！！",[14,77753,77754],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,77756,77757],{},[2212,77758],{"alt":31,"src":77759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,77761,929],{},[14,77763,77764],{},"① 只有一个形参的时候，可以省略小括号：",[14,77766,77767],{},"const fn=x=>{console.log(x)}",[14,77769,77770],{},"② 只有一行代码时可以省略大括号：",[14,77772,77773],{},"const fn=x=>console.log(11)",[14,77775,77776],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77778,77779],{},"const fn=x=>x+x",[14,77781,77782],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77784,77785],{},"⑤ 阻止表单默认提交：",[14,77787,77788],{},"const form = document.querySelector('form')",[14,77790,77791],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77793,77794],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77796,77797],{},"const fn=uname=>({uname:uname})",[14,77799,77800],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77802,77803],{},[2212,77804],{"alt":31,"src":77805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77807,77808],{},[2212,77809],{"alt":31,"src":77810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77812,77813],{},[2212,77814],{"alt":31,"src":77815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77817,77818],{},"一定不要忘记用()，有()就理解为自带return",[22742,77820,77822],{"id":77821},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77824,77825],{},"箭头函数是没有动态参数的arguments",[14,77827,77828],{},[2212,77829],{"alt":31,"src":77830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22742,77832,77834],{"id":77833},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77836,12077],{},[851,77838,77839,77842,77845],{},[854,77840,77841],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[854,77843,77844],{},"事件回调函数使用箭头函数时，this 为全局的 window",[854,77846,77847],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77849,77850],{},[2212,77851],{"alt":31,"src":77852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[26,77854,77856],{"className":53809,"code":77855,"language":53811,"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,77857,77858,77866,77871,77876,77881,77886,77891,77895,77900,77904,77908,77913,77918,77923,77927,77931,77936,77941,77946],{"__ignoreMap":31},[36,77859,77860,77862,77864],{"class":38,"line":39},[36,77861,52886],{"class":49},[36,77863,52555],{"class":52042},[36,77865,52049],{"class":49},[36,77867,77868],{"class":38,"line":46},[36,77869,77870],{"class":49},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[36,77872,77873],{"class":38,"line":78},[36,77874,77875],{"class":49},"    console.log(this) \u002F\u002F指向window\n",[36,77877,77878],{"class":38,"line":125},[36,77879,77880],{"class":49},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[36,77882,77883],{"class":38,"line":131},[36,77884,77885],{"class":49},"    function fn() {\n",[36,77887,77888],{"class":38,"line":396},[36,77889,77890],{"class":49},"      console.log(this)  \u002F\u002F指向window\n",[36,77892,77893],{"class":38,"line":407},[36,77894,2937],{"class":49},[36,77896,77897],{"class":38,"line":2061},[36,77898,77899],{"class":49},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[36,77901,77902],{"class":38,"line":2067},[36,77903,194],{"emptyLinePlaceholder":193},[36,77905,77906],{"class":38,"line":2079},[36,77907,72265],{"class":49},[36,77909,77910],{"class":38,"line":2362},[36,77911,77912],{"class":49},"      name: 'andy',\n",[36,77914,77915],{"class":38,"line":2367},[36,77916,77917],{"class":49},"      sayHai: function () {\n",[36,77919,77920],{"class":38,"line":2373},[36,77921,77922],{"class":49},"        console.log(this)\n",[36,77924,77925],{"class":38,"line":2378},[36,77926,53140],{"class":49},[36,77928,77929],{"class":38,"line":2392},[36,77930,2937],{"class":49},[36,77932,77933],{"class":38,"line":2397},[36,77934,77935],{"class":49},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[36,77937,77938],{"class":38,"line":2403},[36,77939,77940],{"class":49},"    \u002F\u002F 2.箭头函数的this\n",[36,77942,77943],{"class":38,"line":2424},[36,77944,77945],{"class":49},"    const fn = () => console.log(this)\n",[36,77947,77948,77950,77952],{"class":38,"line":2429},[36,77949,53159],{"class":49},[36,77951,52555],{"class":52042},[36,77953,52049],{"class":49},[14,77955,77956],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77958,77959],{},"const fn = () => console.log(this)",[14,77961,77962],{},"fn() \u002F\u002F指向window",[14,77964,77965],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77967,77968],{},"①",[14,77970,77971],{},"const obj = {",[14,77973,77974],{},"uname: 'pink老师',",[14,77976,77977],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77979,1825],{},[14,77981,77982],{},"调用对象里边的函数",[14,77984,77985],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77987,77988],{},"obj.sayHai()",[14,77990,77991],{},"②",[14,77993,77994],{},"const obj1 = {",[14,77996,77974],{},[14,77998,77999],{},"sayHai: function () {",[14,78001,78002],{},"let i = 10",[14,78004,78005],{},"const count = () => {",[14,78007,78008],{},"console.log(this)",[14,78010,78011],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,78013,78014],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,78016,1825],{},[14,78018,78019],{},"count()",[14,78021,1825],{},[14,78023,1825],{},[14,78025,78026],{},"obj1.sayHai()",[21,78028,78030],{"id":78029},"_46-解构赋值","4.6 解构赋值",[868,78032,78034],{"id":78033},"_461-数组解构","4.6.1 数组解构",[14,78036,78037],{},"以前要是使用数组中的值的话：",[14,78039,78040],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,78042,78043],{},"const arr=[100,60,80]",[14,78045,78046],{},"const max=arr[0]",[14,78048,78049],{},"const min=arr[1]",[14,78051,78052],{},"const avg=arr[2]",[14,78054,78055],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,78057,78058],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,78060,78061],{},"这个写法就类似于上边的那种用很多const的方法",[14,78063,78064],{},[2212,78065],{"alt":31,"src":78066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[26,78068,78070],{"className":51375,"code":78069,"language":51377,"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,78071,78072,78077,78082,78087,78092,78097,78101,78105,78110,78114,78119,78124,78128,78133,78138,78149,78159,78164,78169,78174,78178,78182],{"__ignoreMap":31},[36,78073,78074],{"class":38,"line":39},[36,78075,78076],{"class":49},"①变量之间交换值:\n",[36,78078,78079],{"class":38,"line":46},[36,78080,78081],{"class":49},"let a=1\n",[36,78083,78084],{"class":38,"line":78},[36,78085,78086],{"class":49},"let b=2;\n",[36,78088,78089],{"class":38,"line":125},[36,78090,78091],{"class":49},"必须加这行代码，不然就会报错\n",[36,78093,78094],{"class":38,"line":131},[36,78095,78096],{"class":49},"[b,a]=[a,b]\n",[36,78098,78099],{"class":38,"line":396},[36,78100,194],{"emptyLinePlaceholder":193},[36,78102,78103],{"class":38,"line":407},[36,78104,194],{"emptyLinePlaceholder":193},[36,78106,78107],{"class":38,"line":2061},[36,78108,78109],{"class":49},"可以写成下面的方式：\n",[36,78111,78112],{"class":38,"line":2067},[36,78113,78081],{"class":49},[36,78115,78116],{"class":38,"line":2079},[36,78117,78118],{"class":49},"let b=2\n",[36,78120,78121],{"class":38,"line":2362},[36,78122,78123],{"class":49},";[b,a]=[a,b]\n",[36,78125,78126],{"class":38,"line":2367},[36,78127,194],{"emptyLinePlaceholder":193},[36,78129,78130],{"class":38,"line":2373},[36,78131,78132],{"class":49},"②排序\n",[36,78134,78135],{"class":38,"line":2378},[36,78136,78137],{"class":49},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[36,78139,78140,78143,78146],{"class":38,"line":2392},[36,78141,78142],{"class":49},"for (let i = 0; i ",[36,78144,1789],{"class":78145},"s7hpK",[36,78147,78148],{"class":49}," arr1.length; i++) {\n",[36,78150,78151,78154,78156],{"class":38,"line":2397},[36,78152,78153],{"class":49},"   for (let j = 0; j ",[36,78155,1789],{"class":78145},[36,78157,78158],{"class":49}," arr1.length - 1; j++) {\n",[36,78160,78161],{"class":38,"line":2403},[36,78162,78163],{"class":49},"      if (arr1[j] > arr1[j + 1]) {\n",[36,78165,78166],{"class":38,"line":2424},[36,78167,78168],{"class":49},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[36,78170,78171],{"class":38,"line":2429},[36,78172,78173],{"class":49},"       }\n",[36,78175,78176],{"class":38,"line":2443},[36,78177,5058],{"class":49},[36,78179,78180],{"class":38,"line":2448},[36,78181,2315],{"class":49},[36,78183,78184],{"class":38,"line":2477},[36,78185,78186],{"class":49},"console.log(arr1)\n",[14,78188,78189],{},"数组解构的细节：",[14,78191,78192],{},"①变量多，单元值少",[14,78194,78195],{},[2212,78196],{"alt":31,"src":78197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,78199,78200],{},"防止出现undefined的方法：",[14,78202,78203],{},"const [a=0,b=0] =[1]",[14,78205,78206],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,78208,78209],{},"②变量少，单元值多",[14,78211,78212],{},[2212,78213],{"alt":31,"src":78214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,78216,78217],{},"此时可以使用剩余参数来接收多余的值",[14,78219,78220],{},"const [a,b,...c]=[1,2,3,4]",[14,78222,78223],{},"console.log(c) 输出[3,4]",[14,78225,78226],{},"③可以按需导入，忽略某些返回值",[14,78228,78229],{},[2212,78230],{"alt":31,"src":78231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,78233,78234],{},"④支持多维数组的结构",[26,78236,78240],{"className":78237,"code":78238,"language":78239,"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,78241,78242,78270,78286,78301,78316],{"__ignoreMap":31},[36,78243,78244,78246,78248,78250,78252,78254,78256,78258,78261,78263,78265,78267],{"class":38,"line":39},[36,78245,7539],{"class":53},[36,78247,52575],{"class":49},[36,78249,54],{"class":53},[36,78251,52968],{"class":49},[36,78253,61],{"class":60},[36,78255,154],{"class":49},[36,78257,181],{"class":60},[36,78259,78260],{"class":49},", [",[36,78262,162],{"class":60},[36,78264,154],{"class":49},[36,78266,186],{"class":60},[36,78268,78269],{"class":49},"]]\n",[36,78271,78272,78275,78277,78279,78281,78283],{"class":38,"line":46},[36,78273,78274],{"class":49},"console.",[36,78276,58989],{"class":2713},[36,78278,4600],{"class":49},[36,78280,643],{"class":60},[36,78282,4965],{"class":49},[36,78284,78285],{"class":42},"  \u002F\u002F1\n",[36,78287,78288,78290,78292,78294,78296,78298],{"class":38,"line":78},[36,78289,78274],{"class":49},[36,78291,58989],{"class":2713},[36,78293,4600],{"class":49},[36,78295,61],{"class":60},[36,78297,4965],{"class":49},[36,78299,78300],{"class":42},"  \u002F\u002F2\n",[36,78302,78303,78305,78307,78309,78311,78313],{"class":38,"line":125},[36,78304,78274],{"class":49},[36,78306,58989],{"class":2713},[36,78308,4600],{"class":49},[36,78310,181],{"class":60},[36,78312,4965],{"class":49},[36,78314,78315],{"class":42},"  \u002F\u002F[3,4]\n",[36,78317,78318,78320,78322,78324,78326,78328,78330,78332],{"class":38,"line":131},[36,78319,78274],{"class":49},[36,78321,58989],{"class":2713},[36,78323,4600],{"class":49},[36,78325,181],{"class":60},[36,78327,5649],{"class":49},[36,78329,643],{"class":60},[36,78331,4965],{"class":49},[36,78333,78334],{"class":42},"  \u002F\u002F3\n",[26,78336,78338],{"className":78237,"code":78337,"language":78239,"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,78339,78340,78367,78378,78389],{"__ignoreMap":31},[36,78341,78342,78344,78347,78349,78351,78353,78355,78357,78359,78361,78363,78365],{"class":38,"line":39},[36,78343,7539],{"class":53},[36,78345,78346],{"class":49}," [a, b, c] ",[36,78348,54],{"class":53},[36,78350,52968],{"class":49},[36,78352,61],{"class":60},[36,78354,154],{"class":49},[36,78356,181],{"class":60},[36,78358,78260],{"class":49},[36,78360,162],{"class":60},[36,78362,154],{"class":49},[36,78364,186],{"class":60},[36,78366,78269],{"class":49},[36,78368,78369,78371,78373,78376],{"class":38,"line":46},[36,78370,78274],{"class":49},[36,78372,58989],{"class":2713},[36,78374,78375],{"class":49},"(a)",[36,78377,78285],{"class":42},[36,78379,78380,78382,78384,78387],{"class":38,"line":78},[36,78381,78274],{"class":49},[36,78383,58989],{"class":2713},[36,78385,78386],{"class":49},"(b)",[36,78388,78300],{"class":42},[36,78390,78391,78393,78395,78398],{"class":38,"line":125},[36,78392,78274],{"class":49},[36,78394,58989],{"class":2713},[36,78396,78397],{"class":49},"(c)",[36,78399,78315],{"class":42},[26,78401,78403],{"className":78237,"code":78402,"language":78239,"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,78404,78405,78432,78442,78452,78462],{"__ignoreMap":31},[36,78406,78407,78409,78412,78414,78416,78418,78420,78422,78424,78426,78428,78430],{"class":38,"line":39},[36,78408,7539],{"class":53},[36,78410,78411],{"class":49}," [a, b, [c, d]] ",[36,78413,54],{"class":53},[36,78415,52968],{"class":49},[36,78417,61],{"class":60},[36,78419,154],{"class":49},[36,78421,181],{"class":60},[36,78423,78260],{"class":49},[36,78425,162],{"class":60},[36,78427,154],{"class":49},[36,78429,186],{"class":60},[36,78431,78269],{"class":49},[36,78433,78434,78436,78438,78440],{"class":38,"line":46},[36,78435,78274],{"class":49},[36,78437,58989],{"class":2713},[36,78439,78375],{"class":49},[36,78441,78285],{"class":42},[36,78443,78444,78446,78448,78450],{"class":38,"line":78},[36,78445,78274],{"class":49},[36,78447,58989],{"class":2713},[36,78449,78386],{"class":49},[36,78451,78300],{"class":42},[36,78453,78454,78456,78458,78460],{"class":38,"line":125},[36,78455,78274],{"class":49},[36,78457,58989],{"class":2713},[36,78459,78397],{"class":49},[36,78461,78334],{"class":42},[36,78463,78464,78466,78468,78471],{"class":38,"line":131},[36,78465,78274],{"class":49},[36,78467,58989],{"class":2713},[36,78469,78470],{"class":49},"(d)",[36,78472,78473],{"class":42},"  \u002F\u002F4\n",[868,78475,78477],{"id":78476},"_462-对象解构","4.6.2 对象解构",[14,78479,78480],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,78482,78483],{},"用的非常非常多！！！！！！",[22742,78485,78487],{"id":78486},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,78489,78490],{},"基本语法：",[851,78492,78493,78496,78499,78502],{},[854,78494,78495],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[854,78497,78498],{},"对象属性的值将被赋值给与属性名相同的变量",[854,78500,78501],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[854,78503,78504],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[26,78506,78508],{"className":51375,"code":78507,"language":51377,"meta":31,"style":31},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[33,78509,78510,78515,78520,78525,78529],{"__ignoreMap":31},[36,78511,78512],{"class":38,"line":39},[36,78513,78514],{"class":49},"const obj = {\n",[36,78516,78517],{"class":38,"line":46},[36,78518,78519],{"class":49},"   uname: 'pink老师',\n",[36,78521,78522],{"class":38,"line":78},[36,78523,78524],{"class":49},"   age: 18,\n",[36,78526,78527],{"class":38,"line":125},[36,78528,2315],{"class":49},[36,78530,78531],{"class":38,"line":131},[36,78532,78533],{"class":49},"const { uname, age } = obj\n",[14,78535,78536],{},"上方代码这样写等价于：",[14,78538,78539],{},"const uname等价于obj.uname",[14,78541,78542],{},"变量名可以重新改名：",[14,78544,78545],{},"const uname='red老师'",[14,78547,78548],{},"const user={",[14,78550,78551],{},"  uname:'pink老师',",[14,78553,78554],{},"  age:18",[14,78556,1825],{},[14,78558,78559],{},"const {uname,age}=user",[14,78561,78562],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,78564,78565],{},"const {旧变量名：新变量名}=对象",[14,78567,78568],{},"const {uname:username,age}=user",[22742,78570,78572],{"id":78571},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,78574,78575],{},[2212,78576],{"alt":31,"src":78577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22742,78579,78581],{"id":78580},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,78583,78584],{},[2212,78585],{"alt":31,"src":78586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[26,78588,78590],{"className":53809,"code":78589,"language":53811,"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,78591,78592,78600,78605,78610,78615,78620,78625,78630,78635,78640,78644,78649,78654],{"__ignoreMap":31},[36,78593,78594,78596,78598],{"class":38,"line":39},[36,78595,52886],{"class":49},[36,78597,52555],{"class":52042},[36,78599,52049],{"class":49},[36,78601,78602],{"class":38,"line":46},[36,78603,78604],{"class":49},"    const pig = {\n",[36,78606,78607],{"class":38,"line":78},[36,78608,78609],{"class":49},"      name: '佩奇',\n",[36,78611,78612],{"class":38,"line":125},[36,78613,78614],{"class":49},"      family: {\n",[36,78616,78617],{"class":38,"line":131},[36,78618,78619],{"class":49},"        mother: '猪妈妈',\n",[36,78621,78622],{"class":38,"line":396},[36,78623,78624],{"class":49},"        father: '猪爸爸',\n",[36,78626,78627],{"class":38,"line":407},[36,78628,78629],{"class":49},"        sister: '乔治'\n",[36,78631,78632],{"class":38,"line":2061},[36,78633,78634],{"class":49},"      },\n",[36,78636,78637],{"class":38,"line":2067},[36,78638,78639],{"class":49},"      age: 6\n",[36,78641,78642],{"class":38,"line":2079},[36,78643,2937],{"class":49},[36,78645,78646],{"class":38,"line":2362},[36,78647,78648],{"class":49},"    \u002F\u002F 多级对象解构\n",[36,78650,78651],{"class":38,"line":2367},[36,78652,78653],{"class":49},"    const { name, family: { mother, father, sister }, age } = pig\n",[36,78655,78656,78658,78660],{"class":38,"line":2373},[36,78657,53159],{"class":49},[36,78659,52555],{"class":52042},[36,78661,52049],{"class":49},[14,78663,78664],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[26,78666,78669],{"className":78667,"code":78668,"language":77189,"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,78670,78671,78676,78687,78699,78711,78720,78724,78735,78747,78757,78762,78766,78776,78787,78796,78800,78804,78815,78826,78835,78839,78844],{"__ignoreMap":31},[36,78672,78673],{"class":38,"line":39},[36,78674,78675],{"class":42},"    \u002F\u002F 这是后台传递过来的数据\n",[36,78677,78678,78680,78683,78685],{"class":38,"line":46},[36,78679,11966],{"class":53},[36,78681,78682],{"class":49}," msg ",[36,78684,54],{"class":53},[36,78686,16316],{"class":49},[36,78688,78689,78692,78694,78697],{"class":38,"line":78},[36,78690,78691],{"class":998},"      \"code\"",[36,78693,1738],{"class":53},[36,78695,78696],{"class":60}," 200",[36,78698,32208],{"class":49},[36,78700,78701,78704,78706,78709],{"class":38,"line":125},[36,78702,78703],{"class":998},"      \"msg\"",[36,78705,1738],{"class":53},[36,78707,78708],{"class":998}," \"获取新闻列表成功\"",[36,78710,32208],{"class":49},[36,78712,78713,78716,78718],{"class":38,"line":131},[36,78714,78715],{"class":998},"      \"data\"",[36,78717,1738],{"class":53},[36,78719,56189],{"class":49},[36,78721,78722],{"class":38,"line":396},[36,78723,3259],{"class":49},[36,78725,78726,78729,78731,78733],{"class":38,"line":407},[36,78727,78728],{"class":998},"          \"id\"",[36,78730,1738],{"class":53},[36,78732,25863],{"class":60},[36,78734,32208],{"class":49},[36,78736,78737,78740,78742,78745],{"class":38,"line":2061},[36,78738,78739],{"class":998},"          \"title\"",[36,78741,1738],{"class":53},[36,78743,78744],{"class":998}," \"5G商用自己，三大运用商收入下降\"",[36,78746,32208],{"class":49},[36,78748,78749,78752,78754],{"class":38,"line":2067},[36,78750,78751],{"class":998},"          \"count\"",[36,78753,1738],{"class":53},[36,78755,78756],{"class":60}," 58\n",[36,78758,78759],{"class":38,"line":2079},[36,78760,78761],{"class":49},"        },\n",[36,78763,78764],{"class":38,"line":2362},[36,78765,3259],{"class":49},[36,78767,78768,78770,78772,78774],{"class":38,"line":2367},[36,78769,78728],{"class":998},[36,78771,1738],{"class":53},[36,78773,15499],{"class":60},[36,78775,32208],{"class":49},[36,78777,78778,78780,78782,78785],{"class":38,"line":2373},[36,78779,78739],{"class":998},[36,78781,1738],{"class":53},[36,78783,78784],{"class":998}," \"国际媒体头条速览\"",[36,78786,32208],{"class":49},[36,78788,78789,78791,78793],{"class":38,"line":2378},[36,78790,78751],{"class":998},[36,78792,1738],{"class":53},[36,78794,78795],{"class":60}," 56\n",[36,78797,78798],{"class":38,"line":2392},[36,78799,78761],{"class":49},[36,78801,78802],{"class":38,"line":2397},[36,78803,3259],{"class":49},[36,78805,78806,78808,78810,78813],{"class":38,"line":2403},[36,78807,78728],{"class":998},[36,78809,1738],{"class":53},[36,78811,78812],{"class":60}," 3",[36,78814,32208],{"class":49},[36,78816,78817,78819,78821,78824],{"class":38,"line":2424},[36,78818,78739],{"class":998},[36,78820,1738],{"class":53},[36,78822,78823],{"class":998}," \"乌克兰和俄罗斯持续冲突\"",[36,78825,32208],{"class":49},[36,78827,78828,78830,78832],{"class":38,"line":2429},[36,78829,78751],{"class":998},[36,78831,1738],{"class":53},[36,78833,78834],{"class":60}," 1669\n",[36,78836,78837],{"class":38,"line":2443},[36,78838,78761],{"class":49},[36,78840,78841],{"class":38,"line":2448},[36,78842,78843],{"class":49},"      ]\n",[36,78845,78846],{"class":38,"line":2477},[36,78847,2937],{"class":49},[14,78849,78850],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78852,78853],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78855,78856],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[14,78858,78859],{},"function({data}) {",[14,78861,78862],{},"console.log(data)",[14,78864,1825],{},[14,78866,78867],{},"render(msg)",[14,78869,78870],{},"实参传递给形参的时候解构了",[14,78872,78873],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78875,78876],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78878,78879],{},"function render({data:mydata}) {",[14,78881,78882],{},"  console.log(data)",[14,78884,1825],{},[868,78886,78888],{"id":78887},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78890,78891],{},"有两种情况：一个是数组结构，一个是立即执行函数",[851,78893,78894],{},[854,78895,78896],{},"如果对一个数组进行遍历，有两种方式：",[14,78898,78899],{},"①法1",[14,78901,78902],{},"const arr=[1,2,3]",[14,78904,78905],{},"arr.map(function(item,index) {",[14,78907,78908],{},"  console.log(item)",[14,78910,53206],{},[14,78912,78913],{},[2212,78914],{"alt":31,"src":78915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78917,78918],{},"②法2",[14,78920,78921],{},"const str='pink'",[14,78923,78924],{},"[1,2,3].map(function(item,index) {",[14,78926,78927],{},"console.log(item)",[14,78929,53206],{},[14,78931,78932],{},[2212,78933],{"alt":31,"src":78934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78936,78937],{},"此时会报错",[14,78939,78940],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78942,78927],{},[14,78944,53206],{},[14,78946,78947],{},"内部会当成这样处理，所以我们用分号进行隔开",[21,78949,78951],{"id":78950},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78953,78954],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78956,78957],{},"可以理解为加强版的for循环",[14,78959,78960],{},[2212,78961],{"alt":31,"src":78962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78964,78965],{},"里边不写return，不返回数组，只遍历不返回",[14,78967,78968],{},"map是返回数组",[14,78970,78971],{},"forEach主要用于遍历数组对象",[26,78973,78975],{"className":53809,"code":78974,"language":53811,"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,78976,78977,78985,78990,78995,79000,79005,79009,79014],{"__ignoreMap":31},[36,78978,78979,78981,78983],{"class":38,"line":39},[36,78980,52886],{"class":49},[36,78982,52555],{"class":52042},[36,78984,52049],{"class":49},[36,78986,78987],{"class":38,"line":46},[36,78988,78989],{"class":49},"    const arr = ['red', 'green', 'pink']\n",[36,78991,78992],{"class":38,"line":78},[36,78993,78994],{"class":49},"    const result = arr.forEach(function (item, index) {\n",[36,78996,78997],{"class":38,"line":125},[36,78998,78999],{"class":49},"      console.log(item)\n",[36,79001,79002],{"class":38,"line":131},[36,79003,79004],{"class":49},"      console.log(index)\n",[36,79006,79007],{"class":38,"line":396},[36,79008,34203],{"class":49},[36,79010,79011],{"class":38,"line":407},[36,79012,79013],{"class":49},"    console.log(result)\n",[36,79015,79016,79018,79020],{"class":38,"line":2061},[36,79017,53159],{"class":49},[36,79019,52555],{"class":52042},[36,79021,52049],{"class":49},[14,79023,79024],{},[2212,79025],{"alt":31,"src":79026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[21,79028,79030],{"id":79029},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,79032,79033],{},[2212,79034],{"alt":31,"src":79035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,79037,79038],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[26,79040,79042],{"className":53809,"code":79041,"language":53811,"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,79043,79044,79052,79060,79065,79070,79074,79078,79083,79087,79092,79100],{"__ignoreMap":31},[36,79045,79046,79048,79050],{"class":38,"line":39},[36,79047,1789],{"class":49},[36,79049,52542],{"class":52042},[36,79051,52049],{"class":49},[36,79053,79054,79056,79058],{"class":38,"line":46},[36,79055,52886],{"class":49},[36,79057,52555],{"class":52042},[36,79059,52049],{"class":49},[36,79061,79062],{"class":38,"line":78},[36,79063,79064],{"class":49},"    const arr = [10, 20, 30]\n",[36,79066,79067],{"class":38,"line":125},[36,79068,79069],{"class":49},"    const newArr = arr.filter(function (item, index) {\n",[36,79071,79072],{"class":38,"line":131},[36,79073,78999],{"class":49},[36,79075,79076],{"class":38,"line":396},[36,79077,79004],{"class":49},[36,79079,79080],{"class":38,"line":407},[36,79081,79082],{"class":49},"      return item >= 20\n",[36,79084,79085],{"class":38,"line":2061},[36,79086,34203],{"class":49},[36,79088,79089],{"class":38,"line":2067},[36,79090,79091],{"class":49},"    console.log(newArr)\n",[36,79093,79094,79096,79098],{"class":38,"line":2079},[36,79095,53159],{"class":49},[36,79097,52555],{"class":52042},[36,79099,52049],{"class":49},[36,79101,79102,79104,79106],{"class":38,"line":2362},[36,79103,52527],{"class":49},[36,79105,52542],{"class":52042},[36,79107,52049],{"class":49},[14,79109,79110],{},"这个也可以写成箭头函数：",[26,79112,79114],{"className":51375,"code":79113,"language":51377,"meta":31,"style":31},"const newArr = arr.filter(item => item >= 20)\n",[33,79115,79116],{"__ignoreMap":31},[36,79117,79118],{"class":38,"line":39},[36,79119,79113],{"class":49},[21,79121,79123],{"id":79122},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,79125,79126],{},[2212,79127],{"alt":31,"src":79128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,79130,79131],{},"步骤：",[14,79133,79134],{},"①：渲染页面模块",[1886,79136,79137,79140],{},[854,79138,79139],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[854,79141,79142],{},"用forEach+字符串的形式",[14,79144,79145],{},"②：点击不同需求，显示不同页面内容",[1886,79147,79148,79151,79154,79157,79160],{},[854,79149,79150],{},"点击采取事件委托方式 .filter",[854,79152,79153],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[854,79155,79156],{},"筛选条件是根据点击的 data-index 来判断",[854,79158,79159],{},"可以使用对象解构，把事件对象解构",[854,79161,79162],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[26,79164,79166],{"className":51375,"code":79165,"language":51377,"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,79167,79168,79178,79192,79196,79204,79218,79238,79250,79258,79264,79274,79284,79294,79298,79302,79308,79321,79333,79343,79355,79359,79363,79370,79383,79395,79412,79430,79443,79447,79451,79463,79473,79477,79481,79488,79529,79556,79566,79570,79574,79582,79594,79598,79602,79610,79622,79634,79645,79649,79653,79662,79674,79685,79689,79693,79702,79714,79726,79730,79734,79741,79751,79763,79775,79790,79794,79798,79806,79822,79832,79842,79852,79864,79868,79872,79882,79893,79903,79907,79915,79923,79927,79935,79950,79976,80001,80026,80045,80053,80067,80072,80077,80082,80087,80092,80100,80108,80113,80124,80129,80139,80149,80159,80169,80173,80177,80186,80195,80204,80213,80217,80221,80230,80239,80248,80257,80261,80265,80274,80283,80292,80301,80305,80309,80318,80327,80336,80345,80349,80353,80362,80371,80380,80389,80393,80397,80406,80415,80424,80433,80437,80441,80450,80459,80467,80476,80480,80484,80488,80493,80505,80510,80522,80526,80543,80571,80580,80585,80595,80605,80614,80619,80624,80628,80633,80650,80654,80659,80667,80672,80699,80704,80724,80729,80741,80746,80751,80756,80767,80781,80818,80836,80869,80886,80910,80914,80919,80925,80929,80933,80937,80945,80953,80957],{"__ignoreMap":31},[36,79169,79170,79172,79174,79176],{"class":38,"line":39},[36,79171,52039],{"class":49},[36,79173,52043],{"class":52042},[36,79175,52046],{"class":2713},[36,79177,52049],{"class":49},[36,79179,79180,79182,79184,79186,79188,79190],{"class":38,"line":46},[36,79181,1789],{"class":49},[36,79183,51377],{"class":52042},[36,79185,52058],{"class":2713},[36,79187,54],{"class":49},[36,79189,52063],{"class":998},[36,79191,52049],{"class":49},[36,79193,79194],{"class":38,"line":78},[36,79195,194],{"emptyLinePlaceholder":193},[36,79197,79198,79200,79202],{"class":38,"line":125},[36,79199,1789],{"class":49},[36,79201,52076],{"class":52042},[36,79203,52049],{"class":49},[36,79205,79206,79208,79210,79212,79214,79216],{"class":38,"line":131},[36,79207,52886],{"class":49},[36,79209,52086],{"class":52042},[36,79211,52089],{"class":2713},[36,79213,54],{"class":49},[36,79215,52094],{"class":998},[36,79217,52049],{"class":49},[36,79219,79220,79222,79224,79226,79228,79230,79232,79234,79236],{"class":38,"line":396},[36,79221,52886],{"class":49},[36,79223,52086],{"class":52042},[36,79225,15664],{"class":2713},[36,79227,54],{"class":49},[36,79229,52133],{"class":998},[36,79231,52113],{"class":2713},[36,79233,54],{"class":49},[36,79235,52140],{"class":998},[36,79237,52049],{"class":49},[36,79239,79240,79242,79244,79246,79248],{"class":38,"line":407},[36,79241,52886],{"class":49},[36,79243,52149],{"class":52042},[36,79245,52152],{"class":49},[36,79247,52149],{"class":52042},[36,79249,52049],{"class":49},[36,79251,79252,79254,79256],{"class":38,"line":2061},[36,79253,52886],{"class":49},[36,79255,807],{"class":52042},[36,79257,52049],{"class":49},[36,79259,79260,79262],{"class":38,"line":2067},[36,79261,7150],{"class":52042},[36,79263,16316],{"class":49},[36,79265,79266,79268,79270,79272],{"class":38,"line":2079},[36,79267,55437],{"class":60},[36,79269,52179],{"class":49},[36,79271,643],{"class":60},[36,79273,2040],{"class":49},[36,79275,79276,79278,79280,79282],{"class":38,"line":2362},[36,79277,55448],{"class":60},[36,79279,52179],{"class":49},[36,79281,643],{"class":60},[36,79283,2040],{"class":49},[36,79285,79286,79288,79290,79292],{"class":38,"line":2367},[36,79287,73338],{"class":60},[36,79289,52179],{"class":49},[36,79291,61247],{"class":60},[36,79293,2040],{"class":49},[36,79295,79296],{"class":38,"line":2373},[36,79297,2937],{"class":49},[36,79299,79300],{"class":38,"line":2378},[36,79301,194],{"emptyLinePlaceholder":193},[36,79303,79304,79306],{"class":38,"line":2392},[36,79305,62865],{"class":2713},[36,79307,16316],{"class":49},[36,79309,79310,79312,79314,79317,79319],{"class":38,"line":2397},[36,79311,55513],{"class":60},[36,79313,52179],{"class":49},[36,79315,79316],{"class":60},"990",[36,79318,52234],{"class":53},[36,79320,2040],{"class":49},[36,79322,79323,79325,79327,79329,79331],{"class":38,"line":2403},[36,79324,55448],{"class":60},[36,79326,52179],{"class":49},[36,79328,643],{"class":60},[36,79330,52298],{"class":60},[36,79332,2040],{"class":49},[36,79334,79335,79337,79339,79341],{"class":38,"line":2424},[36,79336,55751],{"class":60},[36,79338,52179],{"class":49},[36,79340,52219],{"class":60},[36,79342,2040],{"class":49},[36,79344,79345,79348,79350,79353],{"class":38,"line":2429},[36,79346,79347],{"class":60},"      flex-wrap",[36,79349,52179],{"class":49},[36,79351,79352],{"class":60},"wrap",[36,79354,2040],{"class":49},[36,79356,79357],{"class":38,"line":2443},[36,79358,2937],{"class":49},[36,79360,79361],{"class":38,"line":2448},[36,79362,194],{"emptyLinePlaceholder":193},[36,79364,79365,79368],{"class":38,"line":2477},[36,79366,79367],{"class":2713},"    .item",[36,79369,16316],{"class":49},[36,79371,79372,79374,79376,79379,79381],{"class":38,"line":2482},[36,79373,55513],{"class":60},[36,79375,52179],{"class":49},[36,79377,79378],{"class":60},"240",[36,79380,52234],{"class":53},[36,79382,2040],{"class":49},[36,79384,79385,79387,79389,79391,79393],{"class":38,"line":2499},[36,79386,62742],{"class":60},[36,79388,52179],{"class":49},[36,79390,332],{"class":60},[36,79392,52234],{"class":53},[36,79394,2040],{"class":49},[36,79396,79397,79399,79401,79403,79405,79408,79410],{"class":38,"line":2504},[36,79398,55437],{"class":60},[36,79400,52179],{"class":49},[36,79402,72],{"class":60},[36,79404,52234],{"class":53},[36,79406,79407],{"class":60}," 30",[36,79409,52234],{"class":53},[36,79411,2040],{"class":49},[36,79413,79414,79416,79418,79420,79423,79426,79428],{"class":38,"line":2509},[36,79415,62602],{"class":60},[36,79417,52179],{"class":49},[36,79419,28866],{"class":60},[36,79421,79422],{"class":60}," ease",[36,79424,79425],{"class":60}," .5",[36,79427,1577],{"class":53},[36,79429,2040],{"class":49},[36,79431,79432,79435,79437,79439,79441],{"class":38,"line":2514},[36,79433,79434],{"class":60},"      margin-bottom",[36,79436,52179],{"class":49},[36,79438,72],{"class":60},[36,79440,52234],{"class":53},[36,79442,2040],{"class":49},[36,79444,79445],{"class":38,"line":2528},[36,79446,2937],{"class":49},[36,79448,79449],{"class":38,"line":2533},[36,79450,194],{"emptyLinePlaceholder":193},[36,79452,79453,79456,79458,79461],{"class":38,"line":3326},[36,79454,79455],{"class":2713},"    .item:nth-child",[36,79457,901],{"class":49},[36,79459,79460],{"class":60},"4n",[36,79462,13186],{"class":49},[36,79464,79465,79467,79469,79471],{"class":38,"line":3340},[36,79466,62742],{"class":60},[36,79468,52179],{"class":49},[36,79470,643],{"class":60},[36,79472,2040],{"class":49},[36,79474,79475],{"class":38,"line":3348},[36,79476,2937],{"class":49},[36,79478,79479],{"class":38,"line":3353},[36,79480,194],{"emptyLinePlaceholder":193},[36,79482,79483,79486],{"class":38,"line":3359},[36,79484,79485],{"class":2713},"    .item:hover",[36,79487,16316],{"class":49},[36,79489,79490,79493,79495,79497,79499,79501,79503,79505,79507,79510,79512,79514,79516,79518,79520,79522,79524,79527],{"class":38,"line":3365},[36,79491,79492],{"class":60},"      box-shadow",[36,79494,52179],{"class":49},[36,79496,643],{"class":60},[36,79498,52234],{"class":53},[36,79500,4842],{"class":60},[36,79502,52234],{"class":53},[36,79504,2898],{"class":60},[36,79506,52234],{"class":53},[36,79508,79509],{"class":60}," rgba",[36,79511,901],{"class":49},[36,79513,643],{"class":60},[36,79515,154],{"class":49},[36,79517,643],{"class":60},[36,79519,154],{"class":49},[36,79521,643],{"class":60},[36,79523,154],{"class":49},[36,79525,79526],{"class":60},".2",[36,79528,3468],{"class":49},[36,79530,79531,79534,79536,79539,79541,79543,79545,79548,79550,79552,79554],{"class":38,"line":3370},[36,79532,79533],{"class":60},"      transform",[36,79535,52179],{"class":49},[36,79537,79538],{"class":60},"translate3d",[36,79540,901],{"class":49},[36,79542,643],{"class":60},[36,79544,154],{"class":49},[36,79546,79547],{"class":60},"-4",[36,79549,52234],{"class":53},[36,79551,154],{"class":49},[36,79553,643],{"class":60},[36,79555,3468],{"class":49},[36,79557,79558,79560,79562,79564],{"class":38,"line":8695},[36,79559,62767],{"class":60},[36,79561,52179],{"class":49},[36,79563,62772],{"class":60},[36,79565,2040],{"class":49},[36,79567,79568],{"class":38,"line":8719},[36,79569,2937],{"class":49},[36,79571,79572],{"class":38,"line":8724},[36,79573,194],{"emptyLinePlaceholder":193},[36,79575,79576,79578,79580],{"class":38,"line":8730},[36,79577,79367],{"class":2713},[36,79579,56357],{"class":52042},[36,79581,16316],{"class":49},[36,79583,79584,79586,79588,79590,79592],{"class":38,"line":8757},[36,79585,55513],{"class":60},[36,79587,52179],{"class":49},[36,79589,67],{"class":60},[36,79591,1214],{"class":53},[36,79593,2040],{"class":49},[36,79595,79596],{"class":38,"line":8762},[36,79597,2937],{"class":49},[36,79599,79600],{"class":38,"line":8768},[36,79601,194],{"emptyLinePlaceholder":193},[36,79603,79604,79606,79608],{"class":38,"line":8780},[36,79605,79367],{"class":2713},[36,79607,63046],{"class":2713},[36,79609,16316],{"class":49},[36,79611,79612,79614,79616,79618,79620],{"class":38,"line":8792},[36,79613,55664],{"class":60},[36,79615,52179],{"class":49},[36,79617,1532],{"class":60},[36,79619,52234],{"class":53},[36,79621,2040],{"class":49},[36,79623,79624,79626,79628,79630,79632],{"class":38,"line":8804},[36,79625,79434],{"class":60},[36,79627,52179],{"class":49},[36,79629,332],{"class":60},[36,79631,52234],{"class":53},[36,79633,2040],{"class":49},[36,79635,79636,79638,79640,79643],{"class":38,"line":10463},[36,79637,58158],{"class":60},[36,79639,52179],{"class":49},[36,79641,79642],{"class":60},"#666",[36,79644,2040],{"class":49},[36,79646,79647],{"class":38,"line":10488},[36,79648,2937],{"class":49},[36,79650,79651],{"class":38,"line":10511},[36,79652,194],{"emptyLinePlaceholder":193},[36,79654,79655,79657,79660],{"class":38,"line":10535},[36,79656,79367],{"class":2713},[36,79658,79659],{"class":2713}," .price",[36,79661,16316],{"class":49},[36,79663,79664,79666,79668,79670,79672],{"class":38,"line":10540},[36,79665,55664],{"class":60},[36,79667,52179],{"class":49},[36,79669,1631],{"class":60},[36,79671,52234],{"class":53},[36,79673,2040],{"class":49},[36,79675,79676,79678,79680,79683],{"class":38,"line":10545},[36,79677,58158],{"class":60},[36,79679,52179],{"class":49},[36,79681,79682],{"class":60},"firebrick",[36,79684,2040],{"class":49},[36,79686,79687],{"class":38,"line":10550},[36,79688,2937],{"class":49},[36,79690,79691],{"class":38,"line":10559},[36,79692,194],{"emptyLinePlaceholder":193},[36,79694,79695,79697,79700],{"class":38,"line":10564},[36,79696,79367],{"class":2713},[36,79698,79699],{"class":2713}," .price::before",[36,79701,16316],{"class":49},[36,79703,79704,79707,79709,79712],{"class":38,"line":10570},[36,79705,79706],{"class":60},"      content",[36,79708,52179],{"class":49},[36,79710,79711],{"class":998},"'￥'",[36,79713,2040],{"class":49},[36,79715,79716,79718,79720,79722,79724],{"class":38,"line":10591},[36,79717,55664],{"class":60},[36,79719,52179],{"class":49},[36,79721,1431],{"class":60},[36,79723,52234],{"class":53},[36,79725,2040],{"class":49},[36,79727,79728],{"class":38,"line":10597},[36,79729,2937],{"class":49},[36,79731,79732],{"class":38,"line":10611},[36,79733,194],{"emptyLinePlaceholder":193},[36,79735,79736,79739],{"class":38,"line":10617},[36,79737,79738],{"class":2713},"    .filter",[36,79740,16316],{"class":49},[36,79742,79743,79745,79747,79749],{"class":38,"line":10644},[36,79744,55751],{"class":60},[36,79746,52179],{"class":49},[36,79748,52219],{"class":60},[36,79750,2040],{"class":49},[36,79752,79753,79755,79757,79759,79761],{"class":38,"line":10653},[36,79754,55513],{"class":60},[36,79756,52179],{"class":49},[36,79758,79316],{"class":60},[36,79760,52234],{"class":53},[36,79762,2040],{"class":49},[36,79764,79765,79767,79769,79771,79773],{"class":38,"line":10659},[36,79766,55448],{"class":60},[36,79768,52179],{"class":49},[36,79770,643],{"class":60},[36,79772,52298],{"class":60},[36,79774,2040],{"class":49},[36,79776,79777,79779,79781,79783,79785,79787],{"class":38,"line":10667},[36,79778,55437],{"class":60},[36,79780,52179],{"class":49},[36,79782,1538],{"class":60},[36,79784,52234],{"class":53},[36,79786,79407],{"class":60},[36,79788,79789],{"class":53},"px\n",[36,79791,79792],{"class":38,"line":10672},[36,79793,2937],{"class":49},[36,79795,79796],{"class":38,"line":17348},[36,79797,194],{"emptyLinePlaceholder":193},[36,79799,79800,79802,79804],{"class":38,"line":17354},[36,79801,79738],{"class":2713},[36,79803,2148],{"class":52042},[36,79805,16316],{"class":49},[36,79807,79808,79810,79812,79814,79816,79818,79820],{"class":38,"line":17377},[36,79809,55437],{"class":60},[36,79811,52179],{"class":49},[36,79813,332],{"class":60},[36,79815,52234],{"class":53},[36,79817,9697],{"class":60},[36,79819,52234],{"class":53},[36,79821,2040],{"class":49},[36,79823,79824,79826,79828,79830],{"class":38,"line":17383},[36,79825,62463],{"class":60},[36,79827,52179],{"class":49},[36,79829,62560],{"class":60},[36,79831,2040],{"class":49},[36,79833,79834,79836,79838,79840],{"class":38,"line":17406},[36,79835,58158],{"class":60},[36,79837,52179],{"class":49},[36,79839,79642],{"class":60},[36,79841,2040],{"class":49},[36,79843,79844,79846,79848,79850],{"class":38,"line":17420},[36,79845,64712],{"class":60},[36,79847,52179],{"class":49},[36,79849,55479],{"class":60},[36,79851,2040],{"class":49},[36,79853,79854,79856,79858,79860,79862],{"class":38,"line":17440},[36,79855,62492],{"class":60},[36,79857,52179],{"class":49},[36,79859,72],{"class":60},[36,79861,52234],{"class":53},[36,79863,2040],{"class":49},[36,79865,79866],{"class":38,"line":17446},[36,79867,2937],{"class":49},[36,79869,79870],{"class":38,"line":17457},[36,79871,194],{"emptyLinePlaceholder":193},[36,79873,79874,79876,79878,79880],{"class":38,"line":17480},[36,79875,79738],{"class":2713},[36,79877,2148],{"class":52042},[36,79879,62642],{"class":2713},[36,79881,16316],{"class":49},[36,79883,79884,79886,79888,79891],{"class":38,"line":17502},[36,79885,55626],{"class":60},[36,79887,52179],{"class":49},[36,79889,79890],{"class":60},"#05943c",[36,79892,2040],{"class":49},[36,79894,79895,79897,79899,79901],{"class":38,"line":17507},[36,79896,58158],{"class":60},[36,79898,52179],{"class":49},[36,79900,61584],{"class":60},[36,79902,2040],{"class":49},[36,79904,79905],{"class":38,"line":17513},[36,79906,2937],{"class":49},[36,79908,79909,79911,79913],{"class":38,"line":17527},[36,79910,53159],{"class":49},[36,79912,807],{"class":52042},[36,79914,52049],{"class":49},[36,79916,79917,79919,79921],{"class":38,"line":17540},[36,79918,52527],{"class":49},[36,79920,52076],{"class":52042},[36,79922,52049],{"class":49},[36,79924,79925],{"class":38,"line":17545},[36,79926,194],{"emptyLinePlaceholder":193},[36,79928,79929,79931,79933],{"class":38,"line":17559},[36,79930,1789],{"class":49},[36,79932,52542],{"class":52042},[36,79934,52049],{"class":49},[36,79936,79937,79939,79941,79943,79945,79948],{"class":38,"line":17564},[36,79938,52886],{"class":49},[36,79940,52353],{"class":52042},[36,79942,54228],{"class":2713},[36,79944,54],{"class":49},[36,79946,79947],{"class":998},"\"filter\"",[36,79949,52049],{"class":49},[36,79951,79952,79954,79956,79958,79960,79962,79965,79967,79969,79972,79974],{"class":38,"line":17570},[36,79953,52083],{"class":49},[36,79955,50],{"class":52042},[36,79957,61799],{"class":2713},[36,79959,54],{"class":49},[36,79961,61804],{"class":998},[36,79963,79964],{"class":2713}," data-index",[36,79966,54],{"class":49},[36,79968,4427],{"class":998},[36,79970,79971],{"class":49},">0-100元\u003C\u002F",[36,79973,50],{"class":52042},[36,79975,52049],{"class":49},[36,79977,79978,79980,79982,79984,79986,79988,79990,79992,79994,79997,79999],{"class":38,"line":17575},[36,79979,52083],{"class":49},[36,79981,50],{"class":52042},[36,79983,61799],{"class":2713},[36,79985,54],{"class":49},[36,79987,61804],{"class":998},[36,79989,79964],{"class":2713},[36,79991,54],{"class":49},[36,79993,4450],{"class":998},[36,79995,79996],{"class":49},">100-300元\u003C\u002F",[36,79998,50],{"class":52042},[36,80000,52049],{"class":49},[36,80002,80003,80005,80007,80009,80011,80013,80015,80017,80019,80022,80024],{"class":38,"line":17589},[36,80004,52083],{"class":49},[36,80006,50],{"class":52042},[36,80008,61799],{"class":2713},[36,80010,54],{"class":49},[36,80012,61804],{"class":998},[36,80014,79964],{"class":2713},[36,80016,54],{"class":49},[36,80018,4463],{"class":998},[36,80020,80021],{"class":49},">300元以上\u003C\u002F",[36,80023,50],{"class":52042},[36,80025,52049],{"class":49},[36,80027,80028,80030,80032,80034,80036,80038,80041,80043],{"class":38,"line":17594},[36,80029,52083],{"class":49},[36,80031,50],{"class":52042},[36,80033,61799],{"class":2713},[36,80035,54],{"class":49},[36,80037,61804],{"class":998},[36,80039,80040],{"class":49},">全部区间\u003C\u002F",[36,80042,50],{"class":52042},[36,80044,52049],{"class":49},[36,80046,80047,80049,80051],{"class":38,"line":17599},[36,80048,53159],{"class":49},[36,80050,52353],{"class":52042},[36,80052,52049],{"class":49},[36,80054,80055,80057,80059,80061,80063,80065],{"class":38,"line":17613},[36,80056,52886],{"class":49},[36,80058,52353],{"class":52042},[36,80060,54228],{"class":2713},[36,80062,54],{"class":49},[36,80064,63350],{"class":998},[36,80066,52049],{"class":49},[36,80068,80069],{"class":38,"line":17625},[36,80070,80071],{"class":42},"    \u003C!-- \u003Cdiv class=\"item\">\n",[36,80073,80074],{"class":38,"line":17630},[36,80075,80076],{"class":42},"      \u003Cimg src=\"\" alt=\"\">\n",[36,80078,80079],{"class":38,"line":17643},[36,80080,80081],{"class":42},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[36,80083,80084],{"class":38,"line":17648},[36,80085,80086],{"class":42},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[36,80088,80089],{"class":38,"line":17653},[36,80090,80091],{"class":42},"    \u003C\u002Fdiv> -->\n",[36,80093,80094,80096,80098],{"class":38,"line":17658},[36,80095,53159],{"class":49},[36,80097,52353],{"class":52042},[36,80099,52049],{"class":49},[36,80101,80102,80104,80106],{"class":38,"line":17671},[36,80103,52886],{"class":49},[36,80105,52555],{"class":52042},[36,80107,52049],{"class":49},[36,80109,80110],{"class":38,"line":17676},[36,80111,80112],{"class":42},"    \u002F\u002F 2. 初始化数据\n",[36,80114,80115,80117,80120,80122],{"class":38,"line":33375},[36,80116,11966],{"class":53},[36,80118,80119],{"class":60}," goodsList",[36,80121,14308],{"class":53},[36,80123,56189],{"class":49},[36,80125,80126],{"class":38,"line":33381},[36,80127,80128],{"class":49},"      {\n",[36,80130,80131,80134,80137],{"class":38,"line":33387},[36,80132,80133],{"class":49},"        id: ",[36,80135,80136],{"class":998},"'4001172'",[36,80138,32208],{"class":49},[36,80140,80141,80144,80147],{"class":38,"line":33393},[36,80142,80143],{"class":49},"        name: ",[36,80145,80146],{"class":998},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[36,80148,32208],{"class":49},[36,80150,80151,80154,80157],{"class":38,"line":33399},[36,80152,80153],{"class":49},"        price: ",[36,80155,80156],{"class":998},"'289.00'",[36,80158,32208],{"class":49},[36,80160,80161,80164,80167],{"class":38,"line":33410},[36,80162,80163],{"class":49},"        picture: ",[36,80165,80166],{"class":998},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[36,80168,32208],{"class":49},[36,80170,80171],{"class":38,"line":33416},[36,80172,78634],{"class":49},[36,80174,80175],{"class":38,"line":33436},[36,80176,80128],{"class":49},[36,80178,80179,80181,80184],{"class":38,"line":33442},[36,80180,80133],{"class":49},[36,80182,80183],{"class":998},"'4001594'",[36,80185,32208],{"class":49},[36,80187,80188,80190,80193],{"class":38,"line":33453},[36,80189,80143],{"class":49},[36,80191,80192],{"class":998},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[36,80194,32208],{"class":49},[36,80196,80197,80199,80202],{"class":38,"line":33459},[36,80198,80153],{"class":49},[36,80200,80201],{"class":998},"'288.00'",[36,80203,32208],{"class":49},[36,80205,80206,80208,80211],{"class":38,"line":33465},[36,80207,80163],{"class":49},[36,80209,80210],{"class":998},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[36,80212,32208],{"class":49},[36,80214,80215],{"class":38,"line":33471},[36,80216,78634],{"class":49},[36,80218,80219],{"class":38,"line":33477},[36,80220,80128],{"class":49},[36,80222,80223,80225,80228],{"class":38,"line":33483},[36,80224,80133],{"class":49},[36,80226,80227],{"class":998},"'4001009'",[36,80229,32208],{"class":49},[36,80231,80232,80234,80237],{"class":38,"line":33489},[36,80233,80143],{"class":49},[36,80235,80236],{"class":998},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[36,80238,32208],{"class":49},[36,80240,80241,80243,80246],{"class":38,"line":33495},[36,80242,80153],{"class":49},[36,80244,80245],{"class":998},"'109.00'",[36,80247,32208],{"class":49},[36,80249,80250,80252,80255],{"class":38,"line":33515},[36,80251,80163],{"class":49},[36,80253,80254],{"class":998},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[36,80256,32208],{"class":49},[36,80258,80259],{"class":38,"line":33521},[36,80260,78634],{"class":49},[36,80262,80263],{"class":38,"line":33537},[36,80264,80128],{"class":49},[36,80266,80267,80269,80272],{"class":38,"line":33543},[36,80268,80133],{"class":49},[36,80270,80271],{"class":998},"'4001874'",[36,80273,32208],{"class":49},[36,80275,80276,80278,80281],{"class":38,"line":33557},[36,80277,80143],{"class":49},[36,80279,80280],{"class":998},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[36,80282,32208],{"class":49},[36,80284,80285,80287,80290],{"class":38,"line":33563},[36,80286,80153],{"class":49},[36,80288,80289],{"class":998},"'488.00'",[36,80291,32208],{"class":49},[36,80293,80294,80296,80299],{"class":38,"line":33578},[36,80295,80163],{"class":49},[36,80297,80298],{"class":998},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[36,80300,32208],{"class":49},[36,80302,80303],{"class":38,"line":33584},[36,80304,78634],{"class":49},[36,80306,80307],{"class":38,"line":33593},[36,80308,80128],{"class":49},[36,80310,80311,80313,80316],{"class":38,"line":33599},[36,80312,80133],{"class":49},[36,80314,80315],{"class":998},"'4001649'",[36,80317,32208],{"class":49},[36,80319,80320,80322,80325],{"class":38,"line":33608},[36,80321,80143],{"class":49},[36,80323,80324],{"class":998},"'大师监制龙泉青瓷茶叶罐'",[36,80326,32208],{"class":49},[36,80328,80329,80331,80334],{"class":38,"line":33614},[36,80330,80153],{"class":49},[36,80332,80333],{"class":998},"'139.00'",[36,80335,32208],{"class":49},[36,80337,80338,80340,80343],{"class":38,"line":33620},[36,80339,80163],{"class":49},[36,80341,80342],{"class":998},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[36,80344,32208],{"class":49},[36,80346,80347],{"class":38,"line":33629},[36,80348,78634],{"class":49},[36,80350,80351],{"class":38,"line":33635},[36,80352,80128],{"class":49},[36,80354,80355,80357,80360],{"class":38,"line":33646},[36,80356,80133],{"class":49},[36,80358,80359],{"class":998},"'3997185'",[36,80361,32208],{"class":49},[36,80363,80364,80366,80369],{"class":38,"line":33652},[36,80365,80143],{"class":49},[36,80367,80368],{"class":998},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[36,80370,32208],{"class":49},[36,80372,80373,80375,80378],{"class":38,"line":33671},[36,80374,80153],{"class":49},[36,80376,80377],{"class":998},"'108.00'",[36,80379,32208],{"class":49},[36,80381,80382,80384,80387],{"class":38,"line":33677},[36,80383,80163],{"class":49},[36,80385,80386],{"class":998},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[36,80388,32208],{"class":49},[36,80390,80391],{"class":38,"line":33688},[36,80392,78634],{"class":49},[36,80394,80395],{"class":38,"line":33694},[36,80396,80128],{"class":49},[36,80398,80399,80401,80404],{"class":38,"line":33714},[36,80400,80133],{"class":49},[36,80402,80403],{"class":998},"'3997403'",[36,80405,32208],{"class":49},[36,80407,80408,80410,80413],{"class":38,"line":33730},[36,80409,80143],{"class":49},[36,80411,80412],{"class":998},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[36,80414,32208],{"class":49},[36,80416,80417,80419,80422],{"class":38,"line":33736},[36,80418,80153],{"class":49},[36,80420,80421],{"class":998},"'100.00'",[36,80423,32208],{"class":49},[36,80425,80426,80428,80431],{"class":38,"line":33750},[36,80427,80163],{"class":49},[36,80429,80430],{"class":998},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[36,80432,32208],{"class":49},[36,80434,80435],{"class":38,"line":33756},[36,80436,78634],{"class":49},[36,80438,80439],{"class":38,"line":33762},[36,80440,80128],{"class":49},[36,80442,80443,80445,80448],{"class":38,"line":33773},[36,80444,80133],{"class":49},[36,80446,80447],{"class":998},"'3998274'",[36,80449,32208],{"class":49},[36,80451,80452,80454,80457],{"class":38,"line":33779},[36,80453,80143],{"class":49},[36,80455,80456],{"class":998},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[36,80458,32208],{"class":49},[36,80460,80461,80463,80465],{"class":38,"line":33785},[36,80462,80153],{"class":49},[36,80464,80333],{"class":998},[36,80466,32208],{"class":49},[36,80468,80469,80471,80474],{"class":38,"line":33795},[36,80470,80163],{"class":49},[36,80472,80473],{"class":998},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[36,80475,32208],{"class":49},[36,80477,80478],{"class":38,"line":33801},[36,80479,78634],{"class":49},[36,80481,80482],{"class":38,"line":33812},[36,80483,53851],{"class":49},[36,80485,80486],{"class":38,"line":33818},[36,80487,194],{"emptyLinePlaceholder":193},[36,80489,80490],{"class":38,"line":33828},[36,80491,80492],{"class":42},"    \u002F\u002F 1.渲染函数\n",[36,80494,80495,80497,80499,80501,80503],{"class":38,"line":33833},[36,80496,70826],{"class":53},[36,80498,70829],{"class":2713},[36,80500,901],{"class":49},[36,80502,4629],{"class":416},[36,80504,13186],{"class":49},[36,80506,80507],{"class":38,"line":33839},[36,80508,80509],{"class":42},"      \u002F\u002F 声明空字符串\n",[36,80511,80512,80515,80518,80520],{"class":38,"line":33888},[36,80513,80514],{"class":53},"      let",[36,80516,80517],{"class":49}," str ",[36,80519,54],{"class":53},[36,80521,70846],{"class":998},[36,80523,80524],{"class":38,"line":33935},[36,80525,70851],{"class":42},[36,80527,80528,80530,80533,80535,80538,80541],{"class":38,"line":33940},[36,80529,58749],{"class":49},[36,80531,80532],{"class":2713},"forEach",[36,80534,901],{"class":49},[36,80536,80537],{"class":416},"item",[36,80539,80540],{"class":53}," =>",[36,80542,16316],{"class":49},[36,80544,80545,80547,80550,80553,80555,80558,80560,80563,80566,80568],{"class":38,"line":33946},[36,80546,62012],{"class":53},[36,80548,80549],{"class":49}," { ",[36,80551,80552],{"class":60},"name",[36,80554,154],{"class":49},[36,80556,80557],{"class":60},"price",[36,80559,154],{"class":49},[36,80561,80562],{"class":60},"picture",[36,80564,80565],{"class":49}," } ",[36,80567,54],{"class":53},[36,80569,80570],{"class":49}," item\n",[36,80572,80573,80576,80578],{"class":38,"line":33965},[36,80574,80575],{"class":49},"        str ",[36,80577,10224],{"class":53},[36,80579,70910],{"class":998},[36,80581,80582],{"class":38,"line":33971},[36,80583,80584],{"class":998},"          \u003Cdiv class=\"item\">\n",[36,80586,80587,80590,80592],{"class":38,"line":33991},[36,80588,80589],{"class":998},"            \u003Cimg src=\"${",[36,80591,80562],{"class":49},[36,80593,80594],{"class":998},"}\" alt=\"\">\n",[36,80596,80597,80600,80602],{"class":38,"line":33997},[36,80598,80599],{"class":998},"            \u003Cp class=\"name\">${",[36,80601,80552],{"class":49},[36,80603,80604],{"class":998},"}\u003C\u002Fp>\n",[36,80606,80607,80610,80612],{"class":38,"line":34003},[36,80608,80609],{"class":998},"            \u003Cp class=\"price\">${",[36,80611,80557],{"class":49},[36,80613,80604],{"class":998},[36,80615,80616],{"class":38,"line":34013},[36,80617,80618],{"class":998},"          \u003C\u002Fdiv>\n",[36,80620,80621],{"class":38,"line":34018},[36,80622,80623],{"class":998},"        `\n",[36,80625,80626],{"class":38,"line":34024},[36,80627,65557],{"class":49},[36,80629,80630],{"class":38,"line":34040},[36,80631,80632],{"class":42},"      \u002F\u002F 追加给List\n",[36,80634,80635,80637,80639,80641,80644,80646,80648],{"class":38,"line":34085},[36,80636,56513],{"class":49},[36,80638,55141],{"class":2713},[36,80640,901],{"class":49},[36,80642,80643],{"class":998},"'.list'",[36,80645,74991],{"class":49},[36,80647,54],{"class":53},[36,80649,74727],{"class":49},[36,80651,80652],{"class":38,"line":34091},[36,80653,2937],{"class":49},[36,80655,80656],{"class":38,"line":34097},[36,80657,80658],{"class":42},"    \u002F\u002F 页面一打开就需要渲染\n",[36,80660,80661,80664],{"class":38,"line":34103},[36,80662,80663],{"class":2713},"    render",[36,80665,80666],{"class":49},"(goodsList)\n",[36,80668,80669],{"class":38,"line":34114},[36,80670,80671],{"class":42},"    \u002F\u002F 2.过滤筛选\n",[36,80673,80674,80676,80678,80680,80683,80685,80687,80689,80691,80693,80695,80697],{"class":38,"line":34120},[36,80675,53149],{"class":49},[36,80677,55141],{"class":2713},[36,80679,901],{"class":49},[36,80681,80682],{"class":998},"'.filter'",[36,80684,31568],{"class":49},[36,80686,58555],{"class":2713},[36,80688,901],{"class":49},[36,80690,58560],{"class":998},[36,80692,154],{"class":49},[36,80694,969],{"class":416},[36,80696,80540],{"class":53},[36,80698,16316],{"class":49},[36,80700,80701],{"class":38,"line":34126},[36,80702,80703],{"class":42},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[36,80705,80706,80708,80710,80713,80715,80717,80719,80721],{"class":38,"line":34132},[36,80707,58970],{"class":53},[36,80709,80549],{"class":49},[36,80711,80712],{"class":60},"tagName",[36,80714,154],{"class":49},[36,80716,32279],{"class":60},[36,80718,80565],{"class":49},[36,80720,54],{"class":53},[36,80722,80723],{"class":49}," e.target\n",[36,80725,80726],{"class":38,"line":34150},[36,80727,80728],{"class":42},"      \u002F\u002F 判断\n",[36,80730,80731,80733,80735,80737,80739],{"class":38,"line":34164},[36,80732,55222],{"class":53},[36,80734,67776],{"class":49},[36,80736,55228],{"class":53},[36,80738,68998],{"class":998},[36,80740,13186],{"class":49},[36,80742,80743],{"class":38,"line":34173},[36,80744,80745],{"class":42},"        \u002F\u002F console.log(11)\n",[36,80747,80748],{"class":38,"line":34182},[36,80749,80750],{"class":42},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[36,80752,80753],{"class":38,"line":34191},[36,80754,80755],{"class":42},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[36,80757,80758,80760,80762,80764],{"class":38,"line":34200},[36,80759,52572],{"class":53},[36,80761,52575],{"class":49},[36,80763,54],{"class":53},[36,80765,80766],{"class":49}," goodsList\n",[36,80768,80769,80771,80774,80776,80779],{"class":38,"line":34206},[36,80770,3246],{"class":53},[36,80772,80773],{"class":49}," (dataset.index ",[36,80775,55228],{"class":53},[36,80777,80778],{"class":998}," '1'",[36,80780,13186],{"class":49},[36,80782,80783,80786,80788,80791,80794,80796,80798,80800,80803,80805,80807,80810,80812,80814,80816],{"class":38,"line":34212},[36,80784,80785],{"class":49},"          arr ",[36,80787,54],{"class":53},[36,80789,80790],{"class":49}," goodsList.",[36,80792,80793],{"class":2713},"filter",[36,80795,901],{"class":49},[36,80797,80537],{"class":416},[36,80799,80540],{"class":53},[36,80801,80802],{"class":49}," item.price ",[36,80804,2460],{"class":53},[36,80806,4842],{"class":60},[36,80808,80809],{"class":53}," &&",[36,80811,80802],{"class":49},[36,80813,2338],{"class":53},[36,80815,6501],{"class":60},[36,80817,75],{"class":49},[36,80819,80820,80823,80825,80827,80829,80831,80834],{"class":38,"line":34220},[36,80821,80822],{"class":49},"        } ",[36,80824,2451],{"class":53},[36,80826,2454],{"class":53},[36,80828,80773],{"class":49},[36,80830,55228],{"class":53},[36,80832,80833],{"class":998}," '2'",[36,80835,13186],{"class":49},[36,80837,80838,80840,80842,80844,80846,80848,80850,80852,80854,80856,80858,80860,80862,80864,80867],{"class":38,"line":34225},[36,80839,80785],{"class":49},[36,80841,54],{"class":53},[36,80843,80790],{"class":49},[36,80845,80793],{"class":2713},[36,80847,901],{"class":49},[36,80849,80537],{"class":416},[36,80851,80540],{"class":53},[36,80853,80802],{"class":49},[36,80855,2460],{"class":53},[36,80857,6501],{"class":60},[36,80859,80809],{"class":53},[36,80861,80802],{"class":49},[36,80863,2338],{"class":53},[36,80865,80866],{"class":60}," 300",[36,80868,75],{"class":49},[36,80870,80871,80873,80875,80877,80879,80881,80884],{"class":38,"line":34231},[36,80872,80822],{"class":49},[36,80874,2451],{"class":53},[36,80876,2454],{"class":53},[36,80878,80773],{"class":49},[36,80880,55228],{"class":53},[36,80882,80883],{"class":998}," '3'",[36,80885,13186],{"class":49},[36,80887,80888,80890,80892,80894,80896,80898,80900,80902,80904,80906,80908],{"class":38,"line":34242},[36,80889,80785],{"class":49},[36,80891,54],{"class":53},[36,80893,80790],{"class":49},[36,80895,80793],{"class":2713},[36,80897,901],{"class":49},[36,80899,80537],{"class":416},[36,80901,80540],{"class":53},[36,80903,80802],{"class":49},[36,80905,2460],{"class":53},[36,80907,80866],{"class":60},[36,80909,75],{"class":49},[36,80911,80912],{"class":38,"line":34248},[36,80913,3278],{"class":49},[36,80915,80916],{"class":38,"line":34268},[36,80917,80918],{"class":42},"        \u002F\u002F 渲染函数\n",[36,80920,80921,80923],{"class":38,"line":34274},[36,80922,71150],{"class":2713},[36,80924,53154],{"class":49},[36,80926,80927],{"class":38,"line":34280},[36,80928,53140],{"class":49},[36,80930,80931],{"class":38,"line":34286},[36,80932,194],{"emptyLinePlaceholder":193},[36,80934,80935],{"class":38,"line":34303},[36,80936,34203],{"class":49},[36,80938,80939,80941,80943],{"class":38,"line":34309},[36,80940,53159],{"class":49},[36,80942,52555],{"class":52042},[36,80944,52049],{"class":49},[36,80946,80947,80949,80951],{"class":38,"line":34315},[36,80948,52527],{"class":49},[36,80950,52542],{"class":52042},[36,80952,52049],{"class":49},[36,80954,80955],{"class":38,"line":34321},[36,80956,194],{"emptyLinePlaceholder":193},[36,80958,80959,80961,80963],{"class":38,"line":34327},[36,80960,52527],{"class":49},[36,80962,51377],{"class":52042},[36,80964,52049],{"class":49},[21,80966,80968],{"id":80967},"_410-深入了解对象","4.10 深入了解对象",[868,80970,80972],{"id":80971},"_4101-创建对象","4.10.1 创建对象",[14,80974,80975],{},[2212,80976],{"alt":31,"src":80977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80979,80980],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[868,80982,80984],{"id":80983},"_4102-构造函数","4.10.2 构造函数",[14,80986,80987,80990],{},[1043,80988,80989],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80992,80993,80996],{},[1043,80994,80995],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[26,80998,81000],{"className":51375,"code":80999,"language":51377,"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,81001,81002,81010,81015,81036,81049,81061,81073,81077,81082,81109,81114,81141],{"__ignoreMap":31},[36,81003,81004,81006,81008],{"class":38,"line":39},[36,81005,1789],{"class":49},[36,81007,52555],{"class":52042},[36,81009,52049],{"class":49},[36,81011,81012],{"class":38,"line":46},[36,81013,81014],{"class":42},"\u002F\u002F例：\n",[36,81016,81017,81019,81022,81024,81026,81028,81030,81032,81034],{"class":38,"line":78},[36,81018,55191],{"class":53},[36,81020,81021],{"class":2713}," Pig",[36,81023,901],{"class":49},[36,81025,80552],{"class":416},[36,81027,64],{"class":49},[36,81029,70963],{"class":416},[36,81031,64],{"class":49},[36,81033,70980],{"class":416},[36,81035,13186],{"class":49},[36,81037,81038,81041,81044,81046],{"class":38,"line":125},[36,81039,81040],{"class":60},"    this",[36,81042,81043],{"class":49},".name",[36,81045,54],{"class":53},[36,81047,81048],{"class":49},"name\n",[36,81050,81051,81053,81056,81058],{"class":38,"line":131},[36,81052,81040],{"class":60},[36,81054,81055],{"class":49},".age",[36,81057,54],{"class":53},[36,81059,81060],{"class":49},"age\n",[36,81062,81063,81065,81068,81070],{"class":38,"line":396},[36,81064,81040],{"class":60},[36,81066,81067],{"class":49},".gender",[36,81069,54],{"class":53},[36,81071,81072],{"class":49},"gender    \n",[36,81074,81075],{"class":38,"line":407},[36,81076,2315],{"class":49},[36,81078,81079],{"class":38,"line":2061},[36,81080,81081],{"class":42},"\u002F\u002F创建佩奇对象\n",[36,81083,81084,81086,81089,81091,81093,81095,81098,81100,81102,81104,81107],{"class":38,"line":2067},[36,81085,7539],{"class":53},[36,81087,81088],{"class":60}," Peppa",[36,81090,12462],{"class":53},[36,81092,81021],{"class":2713},[36,81094,901],{"class":49},[36,81096,81097],{"class":998},"'佩奇'",[36,81099,64],{"class":49},[36,81101,1230],{"class":60},[36,81103,64],{"class":49},[36,81105,81106],{"class":998},"'女'",[36,81108,75],{"class":49},[36,81110,81111],{"class":38,"line":2079},[36,81112,81113],{"class":42},"\u002F\u002F创建乔治对象\n",[36,81115,81116,81118,81121,81123,81125,81127,81130,81132,81134,81136,81139],{"class":38,"line":2362},[36,81117,7539],{"class":53},[36,81119,81120],{"class":60}," George",[36,81122,12462],{"class":53},[36,81124,81021],{"class":2713},[36,81126,901],{"class":49},[36,81128,81129],{"class":998},"'乔治'",[36,81131,64],{"class":49},[36,81133,162],{"class":60},[36,81135,64],{"class":49},[36,81137,81138],{"class":998},"'男'",[36,81140,75],{"class":49},[36,81142,81143,81145,81147],{"class":38,"line":2367},[36,81144,52527],{"class":49},[36,81146,52555],{"class":52042},[36,81148,52049],{"class":49},[14,81150,81151],{},[2212,81152],{"alt":31,"src":81153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,81155,81156],{},[2212,81157],{"alt":31,"src":81158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,81160,81161],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,81163,81164],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,81166,81167],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,81169,81170],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,81172,81173],{},"这里用等号是因为：对象.属性=值",[14,81175,81176],{},"①利用对象字面量创建对象",[14,81178,81179],{},"const o={",[14,81181,81182],{},"name:'pink'",[14,81184,81185],{},"} ②利用new Object创建对象",[14,81187,81188],{},"const o=new Object({name:'pink'})",[14,81190,81191],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,81193,81194],{},"构造函数创建对象的执行过程：",[14,81196,81197],{},[2212,81198],{"alt":31,"src":81199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[868,81201,81203],{"id":81202},"_4103-实例成员","4.10.3 实例成员",[14,81205,81206],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[851,81208,81209,81212,81215],{},[854,81210,81211],{},"实例对象的属性和方法即为实例成员",[854,81213,81214],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[854,81216,81217],{},"构造函数创建的实例对象彼此独立互不影响",[868,81219,81221],{"id":81220},"_4104-静态成员","4.10.4 静态成员",[14,81223,81224],{},[2212,81225],{"alt":31,"src":81226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,81228,81229],{},"静态成员有Date.now() Math.PI Math.random()",[14,81231,81232],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,81234,81235],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,81237,81238],{},"function Pig(name) n {",[14,81240,81241],{},"this.name=name",[14,81243,1825],{},[14,81245,81246],{},"Pig.eyes=2",[14,81248,81249],{},"Pig.sayHai=function () { console.log(this) }",[14,81251,81252],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,81254,81255],{},"console.log(Pig.eyes) \u002F\u002F2",[14,81257,12077],{},[851,81259,81260,81263,81266,81269,81272],{},[854,81261,81262],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[854,81264,81265],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[854,81267,81268],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[854,81270,81271],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[854,81273,81274],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,81276,81277],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[868,81279,81281],{"id":81280},"_4105-内置构造函数","4.10.5 内置构造函数",[14,81283,81284],{},"内置构造函数包含：",[14,81286,81287],{},[2212,81288],{"alt":31,"src":81289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,81291,81292],{},[2212,81293],{"alt":31,"src":81294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,81296,81297],{},"这些基本数据类型，js对他们进行了包装",[52555,81299,81300],{},"\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",[22742,81302,81304],{"id":81303},"_41051-object","4.10.5.1 Object",[14,81306,81307],{},"Object 是内置的构造函数，用于创建普通对象",[14,81309,81310],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[26,81312,81314],{"className":51375,"code":81313,"language":51377,"meta":31,"style":31},"const user=new Object({name:'小明',age:15})\n",[33,81315,81316],{"__ignoreMap":31},[36,81317,81318],{"class":38,"line":39},[36,81319,81313],{"class":49},[14,81321,81322],{},"三个常用的静态方法：",[23654,81324,81326],{"id":81325},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,81328,81329],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,81331,81332],{},[2212,81333],{"alt":31,"src":81334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,81336,81337],{},[2212,81338],{"alt":31,"src":81339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[26,81341,81343],{"className":53809,"code":81342,"language":53811,"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,81344,81345,81353,81361,81366,81371,81376,81381,81386,81391,81399],{"__ignoreMap":31},[36,81346,81347,81349,81351],{"class":38,"line":39},[36,81348,1789],{"class":49},[36,81350,52542],{"class":52042},[36,81352,52049],{"class":49},[36,81354,81355,81357,81359],{"class":38,"line":46},[36,81356,52886],{"class":49},[36,81358,52555],{"class":52042},[36,81360,52049],{"class":49},[36,81362,81363],{"class":38,"line":78},[36,81364,81365],{"class":49},"    const o = { name: 'pink', age: 6 }\n",[36,81367,81368],{"class":38,"line":125},[36,81369,81370],{"class":49},"    \u002F\u002F 获得所有属性名\n",[36,81372,81373],{"class":38,"line":131},[36,81374,81375],{"class":49},"    const arr = Object.keys(o)\n",[36,81377,81378],{"class":38,"line":396},[36,81379,81380],{"class":49},"    console.log(arr)\n",[36,81382,81383],{"class":38,"line":407},[36,81384,81385],{"class":49},"    \u002F\u002F 获得所有属性值\n",[36,81387,81388],{"class":38,"line":2061},[36,81389,81390],{"class":49},"    console.log(Object.values(o))\n",[36,81392,81393,81395,81397],{"class":38,"line":2067},[36,81394,53159],{"class":49},[36,81396,52555],{"class":52042},[36,81398,52049],{"class":49},[36,81400,81401,81403,81405],{"class":38,"line":2079},[36,81402,52527],{"class":49},[36,81404,52542],{"class":52042},[36,81406,52049],{"class":49},[23654,81408,81410],{"id":81409},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,81412,81413],{},"Object.assign(oo,o)",[14,81415,81416],{},"后的东西添加给前 是追加",[14,81418,81419],{},[2212,81420],{"alt":31,"src":81421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,81423,81424],{},[2212,81425],{"alt":31,"src":81426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[26,81428,81430],{"className":53809,"code":81429,"language":53811,"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,81431,81432,81440,81448,81452,81456,81460,81464,81468,81472,81477,81482,81487,81492,81497,81505],{"__ignoreMap":31},[36,81433,81434,81436,81438],{"class":38,"line":39},[36,81435,1789],{"class":49},[36,81437,52542],{"class":52042},[36,81439,52049],{"class":49},[36,81441,81442,81444,81446],{"class":38,"line":46},[36,81443,52886],{"class":49},[36,81445,52555],{"class":52042},[36,81447,52049],{"class":49},[36,81449,81450],{"class":38,"line":78},[36,81451,81365],{"class":49},[36,81453,81454],{"class":38,"line":125},[36,81455,81370],{"class":49},[36,81457,81458],{"class":38,"line":131},[36,81459,81375],{"class":49},[36,81461,81462],{"class":38,"line":396},[36,81463,81380],{"class":49},[36,81465,81466],{"class":38,"line":407},[36,81467,81385],{"class":49},[36,81469,81470],{"class":38,"line":2061},[36,81471,81390],{"class":49},[36,81473,81474],{"class":38,"line":2067},[36,81475,81476],{"class":49},"    const oo = {}\n",[36,81478,81479],{"class":38,"line":2079},[36,81480,81481],{"class":49},"    Object.assign(oo, o)\n",[36,81483,81484],{"class":38,"line":2362},[36,81485,81486],{"class":49},"    console.log(oo)\n",[36,81488,81489],{"class":38,"line":2367},[36,81490,81491],{"class":49},"    Object.assign(o, { gender: '女' })\n",[36,81493,81494],{"class":38,"line":2373},[36,81495,81496],{"class":49},"    console.log(o)\n",[36,81498,81499,81501,81503],{"class":38,"line":2378},[36,81500,53159],{"class":49},[36,81502,52555],{"class":52042},[36,81504,52049],{"class":49},[36,81506,81507,81509,81511],{"class":38,"line":2392},[36,81508,52527],{"class":49},[36,81510,52542],{"class":52042},[36,81512,52049],{"class":49},[14,81514,81515],{},[2212,81516],{"alt":31,"src":81517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22742,81519,81521],{"id":81520},"_41052-array","4.10.5.2 Array",[14,81523,81524],{},"Array 是内置的构造函数，用于创建数组",[14,81526,81527],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[26,81529,81531],{"className":51375,"code":81530,"language":51377,"meta":31,"style":31},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[33,81532,81533,81538],{"__ignoreMap":31},[36,81534,81535],{"class":38,"line":39},[36,81536,81537],{"class":49},"const arr=new Array(3,5)\n",[36,81539,81540],{"class":38,"line":46},[36,81541,81542],{"class":49},"console.log(arr)  \u002F\u002F[3,5]\n",[14,81544,81545],{},"Array的实例方法，这个方法是实例成员",[14,81547,81548],{},[2212,81549],{"alt":31,"src":81550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23654,81552,81554],{"id":81553},"_410521-reduce","4.10.5.2.1 reduce",[14,81556,81557],{},[2212,81558],{"alt":31,"src":81559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[26,81561,81563],{"className":53809,"code":81562,"language":53811,"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,81564,81565,81573,81581,81586,81591,81596,81601,81605,81610,81615,81620,81624,81629,81634,81638,81643,81648,81653,81661],{"__ignoreMap":31},[36,81566,81567,81569,81571],{"class":38,"line":39},[36,81568,1789],{"class":49},[36,81570,52542],{"class":52042},[36,81572,52049],{"class":49},[36,81574,81575,81577,81579],{"class":38,"line":46},[36,81576,52886],{"class":49},[36,81578,52555],{"class":52042},[36,81580,52049],{"class":49},[36,81582,81583],{"class":38,"line":78},[36,81584,81585],{"class":49},"    const arr = [1, 5, 8]\n",[36,81587,81588],{"class":38,"line":125},[36,81589,81590],{"class":49},"    \u002F\u002F 1.没有初始值\n",[36,81592,81593],{"class":38,"line":131},[36,81594,81595],{"class":49},"    const total = arr.reduce(function (prev, current) {\n",[36,81597,81598],{"class":38,"line":396},[36,81599,81600],{"class":49},"      return prev + current\n",[36,81602,81603],{"class":38,"line":407},[36,81604,34203],{"class":49},[36,81606,81607],{"class":38,"line":2061},[36,81608,81609],{"class":49},"    console.log(total)   \u002F\u002F14\n",[36,81611,81612],{"class":38,"line":2067},[36,81613,81614],{"class":49},"    \u002F\u002F 2.有初始值\n",[36,81616,81617],{"class":38,"line":2079},[36,81618,81619],{"class":49},"    const total1 = arr.reduce(function (prev, current) {\n",[36,81621,81622],{"class":38,"line":2362},[36,81623,81600],{"class":49},[36,81625,81626],{"class":38,"line":2367},[36,81627,81628],{"class":49},"    }, 10)\n",[36,81630,81631],{"class":38,"line":2373},[36,81632,81633],{"class":49},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[36,81635,81636],{"class":38,"line":2378},[36,81637,194],{"emptyLinePlaceholder":193},[36,81639,81640],{"class":38,"line":2392},[36,81641,81642],{"class":49},"    \u002F\u002F 3.箭头函数写法\n",[36,81644,81645],{"class":38,"line":2397},[36,81646,81647],{"class":49},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[36,81649,81650],{"class":38,"line":2403},[36,81651,81652],{"class":49},"    console.log(total2)   \u002F\u002F24\n",[36,81654,81655,81657,81659],{"class":38,"line":2424},[36,81656,53159],{"class":49},[36,81658,52555],{"class":52042},[36,81660,52049],{"class":49},[36,81662,81663,81665,81667],{"class":38,"line":2429},[36,81664,52527],{"class":49},[36,81666,52542],{"class":52042},[36,81668,52049],{"class":49},[14,81670,81671],{},"执行过程：",[851,81673,81674,81677,81680],{},[854,81675,81676],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[854,81678,81679],{},"每一次循环，把返回值给作为下一次循环的上一次值",[854,81681,81682],{},"如果有起始值，则起始值作为上一次值",[26,81684,81686],{"className":53809,"code":81685,"language":53811,"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,81687,81688,81696,81704,81708,81712,81716,81720,81724,81728,81733,81738,81743,81748,81753,81757,81761,81765,81769,81773,81777,81782,81786,81791,81795,81800,81805,81809,81813,81817,81825],{"__ignoreMap":31},[36,81689,81690,81692,81694],{"class":38,"line":39},[36,81691,1789],{"class":49},[36,81693,52542],{"class":52042},[36,81695,52049],{"class":49},[36,81697,81698,81700,81702],{"class":38,"line":46},[36,81699,52886],{"class":49},[36,81701,52555],{"class":52042},[36,81703,52049],{"class":49},[36,81705,81706],{"class":38,"line":78},[36,81707,81585],{"class":49},[36,81709,81710],{"class":38,"line":125},[36,81711,81590],{"class":49},[36,81713,81714],{"class":38,"line":131},[36,81715,81595],{"class":49},[36,81717,81718],{"class":38,"line":396},[36,81719,81600],{"class":49},[36,81721,81722],{"class":38,"line":407},[36,81723,34203],{"class":49},[36,81725,81726],{"class":38,"line":2061},[36,81727,81609],{"class":49},[36,81729,81730],{"class":38,"line":2067},[36,81731,81732],{"class":49},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[36,81734,81735],{"class":38,"line":2079},[36,81736,81737],{"class":49},"    \u002F\u002F     1              5                    6\n",[36,81739,81740],{"class":38,"line":2362},[36,81741,81742],{"class":49},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[36,81744,81745],{"class":38,"line":2367},[36,81746,81747],{"class":49},"    \u002F\u002F     6              8                    14\n",[36,81749,81750],{"class":38,"line":2373},[36,81751,81752],{"class":49},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[36,81754,81755],{"class":38,"line":2378},[36,81756,81614],{"class":49},[36,81758,81759],{"class":38,"line":2392},[36,81760,81619],{"class":49},[36,81762,81763],{"class":38,"line":2397},[36,81764,81600],{"class":49},[36,81766,81767],{"class":38,"line":2403},[36,81768,81628],{"class":49},[36,81770,81771],{"class":38,"line":2424},[36,81772,81633],{"class":49},[36,81774,81775],{"class":38,"line":2429},[36,81776,81732],{"class":49},[36,81778,81779],{"class":38,"line":2443},[36,81780,81781],{"class":49},"    \u002F\u002F     10             1                     11\n",[36,81783,81784],{"class":38,"line":2448},[36,81785,81742],{"class":49},[36,81787,81788],{"class":38,"line":2477},[36,81789,81790],{"class":49},"    \u002F\u002F     11             5                    16\n",[36,81792,81793],{"class":38,"line":2482},[36,81794,81742],{"class":49},[36,81796,81797],{"class":38,"line":2499},[36,81798,81799],{"class":49},"    \u002F\u002F     16             8                    24\n",[36,81801,81802],{"class":38,"line":2504},[36,81803,81804],{"class":49},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[36,81806,81807],{"class":38,"line":2509},[36,81808,81642],{"class":49},[36,81810,81811],{"class":38,"line":2514},[36,81812,81647],{"class":49},[36,81814,81815],{"class":38,"line":2528},[36,81816,81652],{"class":49},[36,81818,81819,81821,81823],{"class":38,"line":2533},[36,81820,53159],{"class":49},[36,81822,52555],{"class":52042},[36,81824,52049],{"class":49},[36,81826,81827,81829,81831],{"class":38,"line":3326},[36,81828,52527],{"class":49},[36,81830,52542],{"class":52042},[36,81832,52049],{"class":49},[23654,81834,81836],{"id":81835},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81838,81839],{},[2212,81840],{"alt":31,"src":81841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[26,81843,81845],{"className":53809,"code":81844,"language":53811,"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,81846,81847,81855,81863,81868,81873,81878,81883,81887,81892,81897,81902,81907,81912,81917,81921,81926,81930,81935,81943],{"__ignoreMap":31},[36,81848,81849,81851,81853],{"class":38,"line":39},[36,81850,1789],{"class":49},[36,81852,52542],{"class":52042},[36,81854,52049],{"class":49},[36,81856,81857,81859,81861],{"class":38,"line":46},[36,81858,52886],{"class":49},[36,81860,52555],{"class":52042},[36,81862,52049],{"class":49},[36,81864,81865],{"class":38,"line":78},[36,81866,81867],{"class":49},"    const arr = [\n",[36,81869,81870],{"class":38,"line":125},[36,81871,81872],{"class":49},"      { name: '张三', salary: 10000 },\n",[36,81874,81875],{"class":38,"line":131},[36,81876,81877],{"class":49},"      { name: '李四', salary: 10000 },\n",[36,81879,81880],{"class":38,"line":396},[36,81881,81882],{"class":49},"      { name: '王五', salary: 10000 }\n",[36,81884,81885],{"class":38,"line":407},[36,81886,53851],{"class":49},[36,81888,81889],{"class":38,"line":2061},[36,81890,81891],{"class":49},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[36,81893,81894],{"class":38,"line":2067},[36,81895,81896],{"class":49},"    \u002F\u002F prev是累计值\n",[36,81898,81899],{"class":38,"line":2079},[36,81900,81901],{"class":49},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[36,81903,81904],{"class":38,"line":2362},[36,81905,81906],{"class":49},"    console.log(total)\n",[36,81908,81909],{"class":38,"line":2367},[36,81910,81911],{"class":49},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[36,81913,81914],{"class":38,"line":2373},[36,81915,81916],{"class":49},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[36,81918,81919],{"class":38,"line":2378},[36,81920,81911],{"class":49},[36,81922,81923],{"class":38,"line":2392},[36,81924,81925],{"class":49},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[36,81927,81928],{"class":38,"line":2397},[36,81929,81911],{"class":49},[36,81931,81932],{"class":38,"line":2403},[36,81933,81934],{"class":49},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[36,81936,81937,81939,81941],{"class":38,"line":2424},[36,81938,53159],{"class":49},[36,81940,52555],{"class":52042},[36,81942,52049],{"class":49},[36,81944,81945,81947,81949],{"class":38,"line":2429},[36,81946,52527],{"class":49},[36,81948,52542],{"class":52042},[36,81950,52049],{"class":49},[23654,81952,81954],{"id":81953},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81956,81957],{},[2212,81958],{"alt":31,"src":81959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81961,81962],{},[2212,81963],{"alt":31,"src":81964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[851,81966,81967],{},[854,81968,81969],{},"find()",[14,81971,81972],{},"循环查找，找到第一个就ok",[14,81974,81975],{},[50,81976,81979],{"href":81977,"rel":81978},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24609],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[26,81981,81983],{"className":51375,"code":81982,"language":51377,"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,81984,81985,81990,81995],{"__ignoreMap":31},[36,81986,81987],{"class":38,"line":39},[36,81988,81989],{"class":49},"const array1 = [5, 12, 8, 130, 44]\n",[36,81991,81992],{"class":38,"line":46},[36,81993,81994],{"class":49},"const found = array1.find((element) => element > 10)\n",[36,81996,81997],{"class":38,"line":78},[36,81998,81999],{"class":49},"console.log(found)  \u002F\u002F12\n",[14,82001,82002,82004,82005,82010,82011,82014,82015,82017,82018,82023,82024,82026,82027,82029,82030,82032,82033],{},[33,82003,81969],{}," 方法是一个",[50,82006,82009],{"href":82007,"rel":82008},"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",[24609],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[33,82012,82013],{},"callbackFn"," 函数，直到 ",[33,82016,82013],{}," 返回一个",[50,82019,82022],{"href":82020,"rel":82021},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24609],"真值","。然后 ",[33,82025,81969],{}," 返回该元素并停止迭代数组。如果 ",[33,82028,82013],{}," 从未返回真值，则 ",[33,82031,81969],{}," 返回 ",[33,82034,82035],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[26,82037,82039],{"className":53809,"code":82038,"language":53811,"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,82040,82041,82049,82057,82062,82067,82072,82076,82081,82086,82090,82095,82100,82104,82108,82113,82118,82122,82126,82131,82136,82141,82146,82151,82155,82160,82165,82170,82175,82179,82184,82192],{"__ignoreMap":31},[36,82042,82043,82045,82047],{"class":38,"line":39},[36,82044,1789],{"class":49},[36,82046,52542],{"class":52042},[36,82048,52049],{"class":49},[36,82050,82051,82053,82055],{"class":38,"line":46},[36,82052,52886],{"class":49},[36,82054,52555],{"class":52042},[36,82056,52049],{"class":49},[36,82058,82059],{"class":38,"line":78},[36,82060,82061],{"class":49},"    const arr = ['red', 'blue', 'green']\n",[36,82063,82064],{"class":38,"line":125},[36,82065,82066],{"class":49},"    const found = arr.find(item => item === 'pink')\n",[36,82068,82069],{"class":38,"line":131},[36,82070,82071],{"class":49},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[36,82073,82074],{"class":38,"line":396},[36,82075,194],{"emptyLinePlaceholder":193},[36,82077,82078],{"class":38,"line":407},[36,82079,82080],{"class":49},"    \u002F\u002F 使用场景，用于查找数据\n",[36,82082,82083],{"class":38,"line":2061},[36,82084,82085],{"class":49},"    const arr1 = [\n",[36,82087,82088],{"class":38,"line":2067},[36,82089,80128],{"class":49},[36,82091,82092],{"class":38,"line":2079},[36,82093,82094],{"class":49},"        name: '小米',\n",[36,82096,82097],{"class":38,"line":2362},[36,82098,82099],{"class":49},"        price: 1999\n",[36,82101,82102],{"class":38,"line":2367},[36,82103,78634],{"class":49},[36,82105,82106],{"class":38,"line":2373},[36,82107,80128],{"class":49},[36,82109,82110],{"class":38,"line":2378},[36,82111,82112],{"class":49},"        name: '华为',\n",[36,82114,82115],{"class":38,"line":2392},[36,82116,82117],{"class":49},"        price: 3999\n",[36,82119,82120],{"class":38,"line":2397},[36,82121,53140],{"class":49},[36,82123,82124],{"class":38,"line":2403},[36,82125,53851],{"class":49},[36,82127,82128],{"class":38,"line":2424},[36,82129,82130],{"class":49},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[36,82132,82133],{"class":38,"line":2429},[36,82134,82135],{"class":49},"    \u002F\u002F const found1 = arr1.find(item => {\n",[36,82137,82138],{"class":38,"line":2443},[36,82139,82140],{"class":49},"    \u002F\u002F   if (item.name === '小米') {\n",[36,82142,82143],{"class":38,"line":2448},[36,82144,82145],{"class":49},"    \u002F\u002F     return item\n",[36,82147,82148],{"class":38,"line":2477},[36,82149,82150],{"class":49},"    \u002F\u002F   }\n",[36,82152,82153],{"class":38,"line":2482},[36,82154,64032],{"class":49},[36,82156,82157],{"class":38,"line":2499},[36,82158,82159],{"class":49},"    \u002F\u002F 另一种写法\n",[36,82161,82162],{"class":38,"line":2504},[36,82163,82164],{"class":49},"    const found1 = arr1.find(item => {\n",[36,82166,82167],{"class":38,"line":2509},[36,82168,82169],{"class":49},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[36,82171,82172],{"class":38,"line":2514},[36,82173,82174],{"class":49},"      return item.name = '小米'\n",[36,82176,82177],{"class":38,"line":2528},[36,82178,34203],{"class":49},[36,82180,82181],{"class":38,"line":2533},[36,82182,82183],{"class":49},"    console.log(found1)\n",[36,82185,82186,82188,82190],{"class":38,"line":3326},[36,82187,53159],{"class":49},[36,82189,52555],{"class":52042},[36,82191,52049],{"class":49},[36,82193,82194,82196,82198],{"class":38,"line":3340},[36,82195,52527],{"class":49},[36,82197,52542],{"class":52042},[36,82199,52049],{"class":49},[14,82201,82202],{},[2212,82203],{"alt":31,"src":82204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,82206,82207],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[851,82209,82210],{"start":46},[854,82211,82212],{},"every()返回的是布尔值",[14,82214,82215],{},[50,82216,82219],{"href":82217,"rel":82218},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24609],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,82221,82222],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,82224,82225],{},"some是只有有一个就没问题",[14,82227,82228],{},"every是必须全是才行",[26,82230,82234],{"className":82231,"code":82232,"language":82233,"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,82235,82236,82252,82266,82270,82279],{"__ignoreMap":31},[36,82237,82238,82240,82243,82245,82247,82250],{"class":38,"line":39},[36,82239,55191],{"class":53},[36,82241,82242],{"class":49}," isBigEnough(element, ",[36,82244,74800],{"class":53},[36,82246,154],{"class":49},[36,82248,82249],{"class":53},"array",[36,82251,13186],{"class":49},[36,82253,82254,82257,82260,82262,82264],{"class":38,"line":46},[36,82255,82256],{"class":53},"  return",[36,82258,82259],{"class":49}," element ",[36,82261,2460],{"class":53},[36,82263,2788],{"class":60},[36,82265,2040],{"class":49},[36,82267,82268],{"class":38,"line":78},[36,82269,2315],{"class":49},[36,82271,82272,82275,82277],{"class":38,"line":125},[36,82273,82274],{"class":49},"[12, 5, 8, 130, 44].every(isBigEnough); ",[36,82276,34071],{"class":53},[36,82278,55258],{"class":49},[36,82280,82281,82284,82286],{"class":38,"line":131},[36,82282,82283],{"class":49},"[12, 54, 18, 130, 44].every(isBigEnough); ",[36,82285,34071],{"class":53},[36,82287,58682],{"class":49},[26,82289,82291],{"className":53809,"code":82290,"language":53811,"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,82292,82293,82301,82309,82314,82318,82323,82328,82336],{"__ignoreMap":31},[36,82294,82295,82297,82299],{"class":38,"line":39},[36,82296,1789],{"class":49},[36,82298,52542],{"class":52042},[36,82300,52049],{"class":49},[36,82302,82303,82305,82307],{"class":38,"line":46},[36,82304,52886],{"class":49},[36,82306,52555],{"class":52042},[36,82308,52049],{"class":49},[36,82310,82311],{"class":38,"line":78},[36,82312,82313],{"class":49},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[36,82315,82316],{"class":38,"line":125},[36,82317,79064],{"class":49},[36,82319,82320],{"class":38,"line":131},[36,82321,82322],{"class":49},"    const flag = arr.every(item => item >= 10)\n",[36,82324,82325],{"class":38,"line":396},[36,82326,82327],{"class":49},"    console.log(flag)    \u002F\u002Ftrue\n",[36,82329,82330,82332,82334],{"class":38,"line":407},[36,82331,53159],{"class":49},[36,82333,52555],{"class":52042},[36,82335,52049],{"class":49},[36,82337,82338,82340,82342],{"class":38,"line":2061},[36,82339,52527],{"class":49},[36,82341,52542],{"class":52042},[36,82343,52049],{"class":49},[26,82345,82347],{"className":53809,"code":82346,"language":53811,"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,82348,82349,82357,82365,82369,82374,82379,82384,82392],{"__ignoreMap":31},[36,82350,82351,82353,82355],{"class":38,"line":39},[36,82352,1789],{"class":49},[36,82354,52542],{"class":52042},[36,82356,52049],{"class":49},[36,82358,82359,82361,82363],{"class":38,"line":46},[36,82360,52886],{"class":49},[36,82362,52555],{"class":52042},[36,82364,52049],{"class":49},[36,82366,82367],{"class":38,"line":78},[36,82368,82313],{"class":49},[36,82370,82371],{"class":38,"line":125},[36,82372,82373],{"class":49},"    const arr = [10, 0, 5]\n",[36,82375,82376],{"class":38,"line":131},[36,82377,82378],{"class":49},"    const flag = arr.some(item => item >= 10)\n",[36,82380,82381],{"class":38,"line":396},[36,82382,82383],{"class":49},"    console.log(flag)   \u002F\u002Ftrue\n",[36,82385,82386,82388,82390],{"class":38,"line":407},[36,82387,53159],{"class":49},[36,82389,52555],{"class":52042},[36,82391,52049],{"class":49},[36,82393,82394,82396,82398],{"class":38,"line":2061},[36,82395,52527],{"class":49},[36,82397,52542],{"class":52042},[36,82399,52049],{"class":49},[23654,82401,82403],{"id":82402},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,82405,82406],{},[2212,82407],{"alt":31,"src":82408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[26,82410,82412],{"className":51375,"code":82411,"language":51377,"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,82413,82414,82424,82438,82442,82450,82464,82484,82496,82504,82511,82523,82535,82547,82559,82569,82579,82583,82591,82599,82603,82611,82623,82631,82653,82658,82663,82696,82704,82712,82716],{"__ignoreMap":31},[36,82415,82416,82418,82420,82422],{"class":38,"line":39},[36,82417,52039],{"class":49},[36,82419,52043],{"class":52042},[36,82421,52046],{"class":2713},[36,82423,52049],{"class":49},[36,82425,82426,82428,82430,82432,82434,82436],{"class":38,"line":46},[36,82427,1789],{"class":49},[36,82429,51377],{"class":52042},[36,82431,52058],{"class":2713},[36,82433,54],{"class":49},[36,82435,52063],{"class":998},[36,82437,52049],{"class":49},[36,82439,82440],{"class":38,"line":78},[36,82441,194],{"emptyLinePlaceholder":193},[36,82443,82444,82446,82448],{"class":38,"line":125},[36,82445,1789],{"class":49},[36,82447,52076],{"class":52042},[36,82449,52049],{"class":49},[36,82451,82452,82454,82456,82458,82460,82462],{"class":38,"line":131},[36,82453,52886],{"class":49},[36,82455,52086],{"class":52042},[36,82457,52089],{"class":2713},[36,82459,54],{"class":49},[36,82461,52094],{"class":998},[36,82463,52049],{"class":49},[36,82465,82466,82468,82470,82472,82474,82476,82478,82480,82482],{"class":38,"line":396},[36,82467,52886],{"class":49},[36,82469,52086],{"class":52042},[36,82471,15664],{"class":2713},[36,82473,54],{"class":49},[36,82475,52133],{"class":998},[36,82477,52113],{"class":2713},[36,82479,54],{"class":49},[36,82481,52140],{"class":998},[36,82483,52049],{"class":49},[36,82485,82486,82488,82490,82492,82494],{"class":38,"line":407},[36,82487,52886],{"class":49},[36,82489,52149],{"class":52042},[36,82491,52152],{"class":49},[36,82493,52149],{"class":52042},[36,82495,52049],{"class":49},[36,82497,82498,82500,82502],{"class":38,"line":2061},[36,82499,52886],{"class":49},[36,82501,807],{"class":52042},[36,82503,52049],{"class":49},[36,82505,82506,82509],{"class":38,"line":2067},[36,82507,82508],{"class":52042},"    div",[36,82510,16316],{"class":49},[36,82512,82513,82515,82517,82519,82521],{"class":38,"line":2079},[36,82514,55513],{"class":60},[36,82516,52179],{"class":49},[36,82518,2472],{"class":60},[36,82520,52234],{"class":53},[36,82522,2040],{"class":49},[36,82524,82525,82527,82529,82531,82533],{"class":38,"line":2362},[36,82526,55527],{"class":60},[36,82528,52179],{"class":49},[36,82530,1286],{"class":60},[36,82532,52234],{"class":53},[36,82534,2040],{"class":49},[36,82536,82537,82539,82541,82543,82545],{"class":38,"line":2367},[36,82538,58101],{"class":60},[36,82540,52179],{"class":49},[36,82542,1286],{"class":60},[36,82544,52234],{"class":53},[36,82546,2040],{"class":49},[36,82548,82549,82551,82553,82555,82557],{"class":38,"line":2373},[36,82550,65875],{"class":60},[36,82552,52179],{"class":49},[36,82554,625],{"class":60},[36,82556,52234],{"class":53},[36,82558,2040],{"class":49},[36,82560,82561,82563,82565,82567],{"class":38,"line":2378},[36,82562,58028],{"class":60},[36,82564,52179],{"class":49},[36,82566,52334],{"class":60},[36,82568,2040],{"class":49},[36,82570,82571,82573,82575,82577],{"class":38,"line":2392},[36,82572,55626],{"class":60},[36,82574,52179],{"class":49},[36,82576,52387],{"class":60},[36,82578,2040],{"class":49},[36,82580,82581],{"class":38,"line":2397},[36,82582,2937],{"class":49},[36,82584,82585,82587,82589],{"class":38,"line":2403},[36,82586,53159],{"class":49},[36,82588,807],{"class":52042},[36,82590,52049],{"class":49},[36,82592,82593,82595,82597],{"class":38,"line":2424},[36,82594,52527],{"class":49},[36,82596,52076],{"class":52042},[36,82598,52049],{"class":49},[36,82600,82601],{"class":38,"line":2429},[36,82602,194],{"emptyLinePlaceholder":193},[36,82604,82605,82607,82609],{"class":38,"line":2443},[36,82606,1789],{"class":49},[36,82608,52542],{"class":52042},[36,82610,52049],{"class":49},[36,82612,82613,82615,82617,82619,82621],{"class":38,"line":2448},[36,82614,52886],{"class":49},[36,82616,52353],{"class":52042},[36,82618,56056],{"class":49},[36,82620,52353],{"class":52042},[36,82622,52049],{"class":49},[36,82624,82625,82627,82629],{"class":38,"line":2477},[36,82626,52886],{"class":49},[36,82628,52555],{"class":52042},[36,82630,52049],{"class":49},[36,82632,82633,82635,82638,82640,82643,82646,82648,82651],{"class":38,"line":2482},[36,82634,11966],{"class":53},[36,82636,82637],{"class":60}," spec",[36,82639,14308],{"class":53},[36,82641,82642],{"class":49}," { size: ",[36,82644,82645],{"class":998},"'40cm*40cm'",[36,82647,56206],{"class":49},[36,82649,82650],{"class":998},"'黑色'",[36,82652,56346],{"class":49},[36,82654,82655],{"class":38,"line":2499},[36,82656,82657],{"class":42},"    \u002F\u002F const arr = Object.values(spec)\n",[36,82659,82660],{"class":38,"line":2504},[36,82661,82662],{"class":42},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[36,82664,82665,82667,82669,82671,82674,82676,82678,82681,82684,82687,82689,82691,82694],{"class":38,"line":2509},[36,82666,53149],{"class":49},[36,82668,55141],{"class":2713},[36,82670,901],{"class":49},[36,82672,82673],{"class":998},"'div'",[36,82675,74991],{"class":49},[36,82677,54],{"class":53},[36,82679,82680],{"class":49}," Object.",[36,82682,82683],{"class":2713},"values",[36,82685,82686],{"class":49},"(spec).",[36,82688,74965],{"class":2713},[36,82690,901],{"class":49},[36,82692,82693],{"class":998},"'\u002F'",[36,82695,75],{"class":49},[36,82697,82698,82700,82702],{"class":38,"line":2514},[36,82699,53159],{"class":49},[36,82701,52555],{"class":52042},[36,82703,52049],{"class":49},[36,82705,82706,82708,82710],{"class":38,"line":2528},[36,82707,52527],{"class":49},[36,82709,52542],{"class":52042},[36,82711,52049],{"class":49},[36,82713,82714],{"class":38,"line":2533},[36,82715,194],{"emptyLinePlaceholder":193},[36,82717,82718,82720,82722],{"class":38,"line":3326},[36,82719,52527],{"class":49},[36,82721,51377],{"class":52042},[36,82723,52049],{"class":49},[14,82725,82726],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23654,82728,82730],{"id":82729},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,82732,82733],{},"静态方法，将伪数组转换为真数组",[14,82735,82736],{},[2212,82737],{"alt":31,"src":82738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[26,82740,82742],{"className":53809,"code":82741,"language":53811,"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,82743,82744,82752,82760,82772,82784,82796,82804,82812,82817,82822,82827,82832,82840],{"__ignoreMap":31},[36,82745,82746,82748,82750],{"class":38,"line":39},[36,82747,1789],{"class":49},[36,82749,52542],{"class":52042},[36,82751,52049],{"class":49},[36,82753,82754,82756,82758],{"class":38,"line":46},[36,82755,52886],{"class":49},[36,82757,1886],{"class":52042},[36,82759,52049],{"class":49},[36,82761,82762,82764,82766,82768,82770],{"class":38,"line":78},[36,82763,52083],{"class":49},[36,82765,854],{"class":52042},[36,82767,56056],{"class":49},[36,82769,854],{"class":52042},[36,82771,52049],{"class":49},[36,82773,82774,82776,82778,82780,82782],{"class":38,"line":125},[36,82775,52083],{"class":49},[36,82777,854],{"class":52042},[36,82779,56056],{"class":49},[36,82781,854],{"class":52042},[36,82783,52049],{"class":49},[36,82785,82786,82788,82790,82792,82794],{"class":38,"line":131},[36,82787,52083],{"class":49},[36,82789,854],{"class":52042},[36,82791,56056],{"class":49},[36,82793,854],{"class":52042},[36,82795,52049],{"class":49},[36,82797,82798,82800,82802],{"class":38,"line":396},[36,82799,53159],{"class":49},[36,82801,1886],{"class":52042},[36,82803,52049],{"class":49},[36,82805,82806,82808,82810],{"class":38,"line":407},[36,82807,52886],{"class":49},[36,82809,52555],{"class":52042},[36,82811,52049],{"class":49},[36,82813,82814],{"class":38,"line":2061},[36,82815,82816],{"class":49},"    const lis = document.querySelectorAll('li')\n",[36,82818,82819],{"class":38,"line":2067},[36,82820,82821],{"class":49},"    const liss = Array.from(lis)\n",[36,82823,82824],{"class":38,"line":2079},[36,82825,82826],{"class":49},"    liss.pop()\n",[36,82828,82829],{"class":38,"line":2362},[36,82830,82831],{"class":49},"    console.log(liss)\n",[36,82833,82834,82836,82838],{"class":38,"line":2367},[36,82835,53159],{"class":49},[36,82837,52555],{"class":52042},[36,82839,52049],{"class":49},[36,82841,82842,82844,82846],{"class":38,"line":2373},[36,82843,52527],{"class":49},[36,82845,52542],{"class":52042},[36,82847,52049],{"class":49},[14,82849,82850],{},[2212,82851],{"alt":31,"src":82852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22742,82854,82856],{"id":82855},"_41053-string","4.10.5.3 String",[14,82858,82859],{},[2212,82860],{"alt":31,"src":82861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23654,82863,82865],{"id":82864},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[26,82867,82869],{"className":53809,"code":82868,"language":53811,"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,82870,82871,82879,82887,82892,82897,82902,82906,82911,82916,82921,82929],{"__ignoreMap":31},[36,82872,82873,82875,82877],{"class":38,"line":39},[36,82874,1789],{"class":49},[36,82876,52542],{"class":52042},[36,82878,52049],{"class":49},[36,82880,82881,82883,82885],{"class":38,"line":46},[36,82882,52886],{"class":49},[36,82884,52555],{"class":52042},[36,82886,52049],{"class":49},[36,82888,82889],{"class":38,"line":78},[36,82890,82891],{"class":49},"    \u002F\u002F 把字符串转化为数组\n",[36,82893,82894],{"class":38,"line":125},[36,82895,82896],{"class":49},"    const str = 'pink,red'\n",[36,82898,82899],{"class":38,"line":131},[36,82900,82901],{"class":49},"    const arr = str.split(',')\n",[36,82903,82904],{"class":38,"line":396},[36,82905,81380],{"class":49},[36,82907,82908],{"class":38,"line":407},[36,82909,82910],{"class":49},"    const str1 = '2025-8-25'\n",[36,82912,82913],{"class":38,"line":2061},[36,82914,82915],{"class":49},"    const arr1 = str1.split('-')\n",[36,82917,82918],{"class":38,"line":2067},[36,82919,82920],{"class":49},"    console.log(arr1)\n",[36,82922,82923,82925,82927],{"class":38,"line":2079},[36,82924,53159],{"class":49},[36,82926,52555],{"class":52042},[36,82928,52049],{"class":49},[36,82930,82931,82933,82935],{"class":38,"line":2362},[36,82932,52527],{"class":49},[36,82934,52542],{"class":52042},[36,82936,52049],{"class":49},[23654,82938,82940],{"id":82939},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82942,5929],{},[14,82944,82945],{},"substring(indexStart)",[14,82947,82948],{},"substring(indexStart, indexEnd)",[1886,82950,82951,82962,82974,82984],{},[854,82952,82953,82954,82957,82958,82961],{},"如果省略了 ",[33,82955,82956],{},"indexEnd","，则 ",[33,82959,82960],{},"substring()"," 提取字符直到字符串的末尾",[854,82963,82964,82965,82968,82969,82957,82971,82973],{},"如果 ",[33,82966,82967],{},"indexStart"," 等于 ",[33,82970,82956],{},[33,82972,82960],{}," 返回一个空字符串",[854,82975,82964,82976,82978,82979,82957,82981,82983],{},[33,82977,82967],{}," 大于 ",[33,82980,82956],{},[33,82982,82960],{}," 的效果就像交换了这两个参数一样",[854,82985,82986],{},"结束的索引号不包含想要截取的部分",[26,82988,82990],{"className":82231,"code":82989,"language":82233,"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,82991,82992,83004,83008,83042,83072,83076,83107,83111,83138,83168,83198,83202,83233],{"__ignoreMap":31},[36,82993,82994,82997,82999,83002],{"class":38,"line":39},[36,82995,82996],{"class":49},"const anyString ",[36,82998,54],{"class":53},[36,83000,83001],{"class":998}," \"Mozilla\"",[36,83003,2040],{"class":49},[36,83005,83006],{"class":38,"line":46},[36,83007,194],{"emptyLinePlaceholder":193},[36,83009,83010,83013,83015,83017,83019,83022,83024,83027,83029,83031,83033,83035,83037,83039],{"class":38,"line":78},[36,83011,83012],{"class":60},"console",[36,83014,1440],{"class":49},[36,83016,58989],{"class":60},[36,83018,901],{"class":49},[36,83020,83021],{"class":60},"anyString",[36,83023,1440],{"class":49},[36,83025,83026],{"class":60},"substring",[36,83028,901],{"class":49},[36,83030,643],{"class":60},[36,83032,154],{"class":49},[36,83034,61],{"class":60},[36,83036,75995],{"class":49},[36,83038,34071],{"class":53},[36,83040,83041],{"class":998}," 'M'\n",[36,83043,83044,83046,83048,83050,83052,83054,83056,83058,83060,83062,83064,83066,83068,83070],{"class":38,"line":125},[36,83045,83012],{"class":60},[36,83047,1440],{"class":49},[36,83049,58989],{"class":60},[36,83051,901],{"class":49},[36,83053,83021],{"class":60},[36,83055,1440],{"class":49},[36,83057,83026],{"class":60},[36,83059,901],{"class":49},[36,83061,61],{"class":60},[36,83063,154],{"class":49},[36,83065,643],{"class":60},[36,83067,75995],{"class":49},[36,83069,34071],{"class":53},[36,83071,83041],{"class":998},[36,83073,83074],{"class":38,"line":131},[36,83075,194],{"emptyLinePlaceholder":193},[36,83077,83078,83080,83082,83084,83086,83088,83090,83092,83094,83096,83098,83100,83102,83104],{"class":38,"line":396},[36,83079,83012],{"class":60},[36,83081,1440],{"class":49},[36,83083,58989],{"class":60},[36,83085,901],{"class":49},[36,83087,83021],{"class":60},[36,83089,1440],{"class":49},[36,83091,83026],{"class":60},[36,83093,901],{"class":49},[36,83095,643],{"class":60},[36,83097,154],{"class":49},[36,83099,1230],{"class":60},[36,83101,75995],{"class":49},[36,83103,34071],{"class":53},[36,83105,83106],{"class":998}," 'Mozill'\n",[36,83108,83109],{"class":38,"line":407},[36,83110,194],{"emptyLinePlaceholder":193},[36,83112,83113,83115,83117,83119,83121,83123,83125,83127,83129,83131,83133,83135],{"class":38,"line":2061},[36,83114,83012],{"class":60},[36,83116,1440],{"class":49},[36,83118,58989],{"class":60},[36,83120,901],{"class":49},[36,83122,83021],{"class":60},[36,83124,1440],{"class":49},[36,83126,83026],{"class":60},[36,83128,901],{"class":49},[36,83130,186],{"class":60},[36,83132,75995],{"class":49},[36,83134,34071],{"class":53},[36,83136,83137],{"class":998}," 'lla'\n",[36,83139,83140,83142,83144,83146,83148,83150,83152,83154,83156,83158,83160,83162,83164,83166],{"class":38,"line":2067},[36,83141,83012],{"class":60},[36,83143,1440],{"class":49},[36,83145,58989],{"class":60},[36,83147,901],{"class":49},[36,83149,83021],{"class":60},[36,83151,1440],{"class":49},[36,83153,83026],{"class":60},[36,83155,901],{"class":49},[36,83157,186],{"class":60},[36,83159,154],{"class":49},[36,83161,1255],{"class":60},[36,83163,76051],{"class":49},[36,83165,34071],{"class":53},[36,83167,83137],{"class":998},[36,83169,83170,83172,83174,83176,83178,83180,83182,83184,83186,83188,83190,83192,83194,83196],{"class":38,"line":2079},[36,83171,83012],{"class":60},[36,83173,1440],{"class":49},[36,83175,58989],{"class":60},[36,83177,901],{"class":49},[36,83179,83021],{"class":60},[36,83181,1440],{"class":49},[36,83183,83026],{"class":60},[36,83185,901],{"class":49},[36,83187,1255],{"class":60},[36,83189,154],{"class":49},[36,83191,186],{"class":60},[36,83193,75995],{"class":49},[36,83195,34071],{"class":53},[36,83197,83137],{"class":998},[36,83199,83200],{"class":38,"line":2362},[36,83201,194],{"emptyLinePlaceholder":193},[36,83203,83204,83206,83208,83210,83212,83214,83216,83218,83220,83222,83224,83226,83228,83230],{"class":38,"line":2367},[36,83205,83012],{"class":60},[36,83207,1440],{"class":49},[36,83209,58989],{"class":60},[36,83211,901],{"class":49},[36,83213,83021],{"class":60},[36,83215,1440],{"class":49},[36,83217,83026],{"class":60},[36,83219,901],{"class":49},[36,83221,643],{"class":60},[36,83223,154],{"class":49},[36,83225,1255],{"class":60},[36,83227,75995],{"class":49},[36,83229,34071],{"class":53},[36,83231,83232],{"class":998}," 'Mozilla'\n",[36,83234,83235,83237,83239,83241,83243,83245,83247,83249,83251,83253,83255,83257,83259,83261],{"class":38,"line":2373},[36,83236,83012],{"class":60},[36,83238,1440],{"class":49},[36,83240,58989],{"class":60},[36,83242,901],{"class":49},[36,83244,83021],{"class":60},[36,83246,1440],{"class":49},[36,83248,83026],{"class":60},[36,83250,901],{"class":49},[36,83252,643],{"class":60},[36,83254,154],{"class":49},[36,83256,332],{"class":60},[36,83258,75995],{"class":49},[36,83260,34071],{"class":53},[36,83262,83232],{"class":998},[23654,83264,83266],{"id":83265},"_410533-startswith","4.10.5.3.3 startsWith",[14,83268,83269,83272,83273,83278,83279,83281,83282],{},[33,83270,83271],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[1043,83274,83275],{},[33,83276,83277],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[33,83280,2112],{}," 或 ",[33,83283,66762],{},[26,83285,83287],{"className":78237,"code":83286,"language":78239,"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,83288,83289,83301,83320,83325,83345],{"__ignoreMap":31},[36,83290,83291,83293,83296,83298],{"class":38,"line":39},[36,83292,7539],{"class":53},[36,83294,83295],{"class":49}," str1 ",[36,83297,54],{"class":53},[36,83299,83300],{"class":998}," \"Saturday night plans\"\n",[36,83302,83303,83305,83307,83310,83313,83315,83318],{"class":38,"line":46},[36,83304,78274],{"class":49},[36,83306,58989],{"class":2713},[36,83308,83309],{"class":49},"(str1.",[36,83311,83312],{"class":2713},"startsWith",[36,83314,901],{"class":49},[36,83316,83317],{"class":998},"\"Sat\"",[36,83319,31239],{"class":49},[36,83321,83322],{"class":38,"line":78},[36,83323,83324],{"class":42},"\u002F\u002F Expected output: true\n",[36,83326,83327,83329,83331,83333,83335,83337,83339,83341,83343],{"class":38,"line":125},[36,83328,78274],{"class":49},[36,83330,58989],{"class":2713},[36,83332,83309],{"class":49},[36,83334,83312],{"class":2713},[36,83336,901],{"class":49},[36,83338,83317],{"class":998},[36,83340,154],{"class":49},[36,83342,162],{"class":60},[36,83344,31239],{"class":49},[36,83346,83347],{"class":38,"line":131},[36,83348,83349],{"class":42},"\u002F\u002F Expected output: false\n",[26,83351,83353],{"className":51375,"code":83352,"language":51377,"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,83354,83355,83360,83365,83369,83374,83379],{"__ignoreMap":31},[36,83356,83357],{"class":38,"line":39},[36,83358,83359],{"class":49},"startsWith(searchString)\n",[36,83361,83362],{"class":38,"line":46},[36,83363,83364],{"class":49},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[36,83366,83367],{"class":38,"line":78},[36,83368,194],{"emptyLinePlaceholder":193},[36,83370,83371],{"class":38,"line":125},[36,83372,83373],{"class":49},"const str3 = 'pink老师上课中'\n",[36,83375,83376],{"class":38,"line":131},[36,83377,83378],{"class":49},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[36,83380,83381],{"class":38,"line":396},[36,83382,83383],{"class":49},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23654,83385,83387],{"id":83386},"_410534-includes","4.10.5.3.4 includes",[14,83389,83390],{},"includes(searchString) includes(searchString, position)",[851,83392,83393],{},[854,83394,83395],{},"searchString:",[14,83397,83398,83399,83401,83402,83407,83408,83413,83414,22244,83417,83420,83421,83424],{},"一个要在 ",[33,83400,2049],{}," 中查找的字符串。",[50,83403,83406],{"href":83404,"rel":83405},"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",[24609],"不能是正则表达式","。所有非正则表达式的值都会被",[50,83409,83412],{"href":83410,"rel":83411},"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",[24609],"强制转换为字符串","，因此如果该参数被省略或传入 ",[33,83415,83416],{},"undefined",[33,83418,83419],{},"includes()"," 方法会在字符串中搜索 ",[33,83422,83423],{},"\"undefined\"","，这通常不是你想要的",[851,83426,83427],{"start":46},[854,83428,83429,1738],{},[33,83430,83431],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,83433,83434,83435,83438,83439],{},"在字符串中开始搜索 ",[33,83436,83437],{},"searchString"," 的位置。默认值为 ",[33,83440,643],{},[851,83442,83443],{"start":78},[854,83444,83445],{},"返回值：",[14,83447,83448,83449,83451,83452,83456,83457],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[33,83450,83437],{}," 为空字符串的情况），则返回 ",[1043,83453,83454],{},[33,83455,2112],{}," ，否则返回 ",[1043,83458,83459],{},[33,83460,66762],{},[851,83462,83463],{"start":125},[854,83464,83465],{},"异常：",[14,83467,82964,83468,14539,83470,83474],{},[33,83469,83437],{},[50,83471,83473],{"href":83404,"rel":83472},[24609],"是一个正则表达式","，则会抛出",[14,83476,83477],{},"只要是有就是true，不需要非得以谁开头结尾",[26,83479,83481],{"className":78237,"code":83480,"language":78239,"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,83482,83483,83494,83517,83536,83556,83578,83597],{"__ignoreMap":31},[36,83484,83485,83487,83489,83491],{"class":38,"line":39},[36,83486,7539],{"class":53},[36,83488,80517],{"class":49},[36,83490,54],{"class":53},[36,83492,83493],{"class":998}," \"To be, or not to be, that is the question.\"\n",[36,83495,83496,83498,83500,83503,83506,83508,83511,83514],{"class":38,"line":46},[36,83497,78274],{"class":49},[36,83499,58989],{"class":2713},[36,83501,83502],{"class":49},"(str.",[36,83504,83505],{"class":2713},"includes",[36,83507,901],{"class":49},[36,83509,83510],{"class":998},"\"To be\"",[36,83512,83513],{"class":49},"))",[36,83515,83516],{"class":42},"  \u002F\u002F true\n",[36,83518,83519,83521,83523,83525,83527,83529,83532,83534],{"class":38,"line":78},[36,83520,78274],{"class":49},[36,83522,58989],{"class":2713},[36,83524,83502],{"class":49},[36,83526,83505],{"class":2713},[36,83528,901],{"class":49},[36,83530,83531],{"class":998},"\"question\"",[36,83533,83513],{"class":49},[36,83535,83516],{"class":42},[36,83537,83538,83540,83542,83544,83546,83548,83551,83553],{"class":38,"line":125},[36,83539,78274],{"class":49},[36,83541,58989],{"class":2713},[36,83543,83502],{"class":49},[36,83545,83505],{"class":2713},[36,83547,901],{"class":49},[36,83549,83550],{"class":998},"\"nonexistent\"",[36,83552,83513],{"class":49},[36,83554,83555],{"class":42},"  \u002F\u002F false\n",[36,83557,83558,83560,83562,83564,83566,83568,83570,83572,83574,83576],{"class":38,"line":131},[36,83559,78274],{"class":49},[36,83561,58989],{"class":2713},[36,83563,83502],{"class":49},[36,83565,83505],{"class":2713},[36,83567,901],{"class":49},[36,83569,83510],{"class":998},[36,83571,154],{"class":49},[36,83573,61],{"class":60},[36,83575,83513],{"class":49},[36,83577,83555],{"class":42},[36,83579,83580,83582,83584,83586,83588,83590,83593,83595],{"class":38,"line":396},[36,83581,78274],{"class":49},[36,83583,58989],{"class":2713},[36,83585,83502],{"class":49},[36,83587,83505],{"class":2713},[36,83589,901],{"class":49},[36,83591,83592],{"class":998},"\"TO BE\"",[36,83594,83513],{"class":49},[36,83596,83555],{"class":42},[36,83598,83599,83601,83603,83605,83607,83609,83611,83613],{"class":38,"line":407},[36,83600,78274],{"class":49},[36,83602,58989],{"class":2713},[36,83604,83502],{"class":49},[36,83606,83505],{"class":2713},[36,83608,901],{"class":49},[36,83610,8399],{"class":998},[36,83612,83513],{"class":49},[36,83614,83516],{"class":42},[23654,83616,83618],{"id":83617},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[26,83620,83622],{"className":53809,"code":83621,"language":53811,"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,83623,83624,83632,83640,83645,83650,83655,83660,83665,83673],{"__ignoreMap":31},[36,83625,83626,83628,83630],{"class":38,"line":39},[36,83627,1789],{"class":49},[36,83629,52542],{"class":52042},[36,83631,52049],{"class":49},[36,83633,83634,83636,83638],{"class":38,"line":46},[36,83635,52886],{"class":49},[36,83637,52555],{"class":52042},[36,83639,52049],{"class":49},[36,83641,83642],{"class":38,"line":78},[36,83643,83644],{"class":49},"    const num = 10\n",[36,83646,83647],{"class":38,"line":125},[36,83648,83649],{"class":49},"    \u002F\u002F 强制转换\n",[36,83651,83652],{"class":38,"line":131},[36,83653,83654],{"class":49},"    console.log(String(num))\n",[36,83656,83657],{"class":38,"line":396},[36,83658,83659],{"class":49},"    \u002F\u002F toString()方法转换\n",[36,83661,83662],{"class":38,"line":407},[36,83663,83664],{"class":49},"    console.log(num.toString())\n",[36,83666,83667,83669,83671],{"class":38,"line":2061},[36,83668,53159],{"class":49},[36,83670,52555],{"class":52042},[36,83672,52049],{"class":49},[36,83674,83675,83677,83679],{"class":38,"line":2067},[36,83676,52527],{"class":49},[36,83678,52542],{"class":52042},[36,83680,52049],{"class":49},[23654,83682,83684],{"id":83683},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,83686,83687],{},[2212,83688],{"alt":31,"src":83689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[26,83691,83693],{"className":51375,"code":83692,"language":51377,"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,83694,83695,83705,83719,83723,83731,83745,83765,83777,83785,83789,83797,83809,83817,83829,83834,83839,83844,83891,83907,83915,83923,83927],{"__ignoreMap":31},[36,83696,83697,83699,83701,83703],{"class":38,"line":39},[36,83698,52039],{"class":49},[36,83700,52043],{"class":52042},[36,83702,52046],{"class":2713},[36,83704,52049],{"class":49},[36,83706,83707,83709,83711,83713,83715,83717],{"class":38,"line":46},[36,83708,1789],{"class":49},[36,83710,51377],{"class":52042},[36,83712,52058],{"class":2713},[36,83714,54],{"class":49},[36,83716,52063],{"class":998},[36,83718,52049],{"class":49},[36,83720,83721],{"class":38,"line":78},[36,83722,194],{"emptyLinePlaceholder":193},[36,83724,83725,83727,83729],{"class":38,"line":125},[36,83726,1789],{"class":49},[36,83728,52076],{"class":52042},[36,83730,52049],{"class":49},[36,83732,83733,83735,83737,83739,83741,83743],{"class":38,"line":131},[36,83734,52886],{"class":49},[36,83736,52086],{"class":52042},[36,83738,52089],{"class":2713},[36,83740,54],{"class":49},[36,83742,52094],{"class":998},[36,83744,52049],{"class":49},[36,83746,83747,83749,83751,83753,83755,83757,83759,83761,83763],{"class":38,"line":396},[36,83748,52886],{"class":49},[36,83750,52086],{"class":52042},[36,83752,15664],{"class":2713},[36,83754,54],{"class":49},[36,83756,52133],{"class":998},[36,83758,52113],{"class":2713},[36,83760,54],{"class":49},[36,83762,52140],{"class":998},[36,83764,52049],{"class":49},[36,83766,83767,83769,83771,83773,83775],{"class":38,"line":407},[36,83768,52886],{"class":49},[36,83770,52149],{"class":52042},[36,83772,52152],{"class":49},[36,83774,52149],{"class":52042},[36,83776,52049],{"class":49},[36,83778,83779,83781,83783],{"class":38,"line":2061},[36,83780,52527],{"class":49},[36,83782,52076],{"class":52042},[36,83784,52049],{"class":49},[36,83786,83787],{"class":38,"line":2067},[36,83788,194],{"emptyLinePlaceholder":193},[36,83790,83791,83793,83795],{"class":38,"line":2079},[36,83792,1789],{"class":49},[36,83794,52542],{"class":52042},[36,83796,52049],{"class":49},[36,83798,83799,83801,83803,83805,83807],{"class":38,"line":2362},[36,83800,52886],{"class":49},[36,83802,52353],{"class":52042},[36,83804,56056],{"class":49},[36,83806,52353],{"class":52042},[36,83808,52049],{"class":49},[36,83810,83811,83813,83815],{"class":38,"line":2367},[36,83812,52886],{"class":49},[36,83814,52555],{"class":52042},[36,83816,52049],{"class":49},[36,83818,83819,83821,83824,83826],{"class":38,"line":2373},[36,83820,11966],{"class":53},[36,83822,83823],{"class":60}," gift",[36,83825,14308],{"class":53},[36,83827,83828],{"class":998}," '50g的茶叶，清洗球'\n",[36,83830,83831],{"class":38,"line":2378},[36,83832,83833],{"class":42},"    \u002F\u002F 1.把字符串拆分为数组\n",[36,83835,83836],{"class":38,"line":2392},[36,83837,83838],{"class":42},"    \u002F\u002F console.log(gift.split(','))\n",[36,83840,83841],{"class":38,"line":2397},[36,83842,83843],{"class":42},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[36,83845,83846,83848,83850,83852,83855,83858,83860,83863,83865,83867,83869,83871,83873,83876,83878,83881,83883,83885,83887,83889],{"class":38,"line":2403},[36,83847,11966],{"class":53},[36,83849,74661],{"class":60},[36,83851,14308],{"class":53},[36,83853,83854],{"class":49}," gift.",[36,83856,83857],{"class":2713},"split",[36,83859,901],{"class":49},[36,83861,83862],{"class":998},"'，'",[36,83864,31568],{"class":49},[36,83866,74786],{"class":2713},[36,83868,901],{"class":49},[36,83870,80537],{"class":416},[36,83872,80540],{"class":53},[36,83874,83875],{"class":998}," `\u003Cspan>【赠品】${",[36,83877,80537],{"class":49},[36,83879,83880],{"class":998},"}\u003C\u002Fspan>\u003Cbr>`",[36,83882,31568],{"class":49},[36,83884,74965],{"class":2713},[36,83886,901],{"class":49},[36,83888,74970],{"class":998},[36,83890,75],{"class":49},[36,83892,83893,83895,83897,83899,83901,83903,83905],{"class":38,"line":2424},[36,83894,53149],{"class":49},[36,83896,55141],{"class":2713},[36,83898,901],{"class":49},[36,83900,82673],{"class":998},[36,83902,74991],{"class":49},[36,83904,54],{"class":53},[36,83906,74727],{"class":49},[36,83908,83909,83911,83913],{"class":38,"line":2429},[36,83910,53159],{"class":49},[36,83912,52555],{"class":52042},[36,83914,52049],{"class":49},[36,83916,83917,83919,83921],{"class":38,"line":2443},[36,83918,52527],{"class":49},[36,83920,52542],{"class":52042},[36,83922,52049],{"class":49},[36,83924,83925],{"class":38,"line":2448},[36,83926,194],{"emptyLinePlaceholder":193},[36,83928,83929,83931,83933],{"class":38,"line":2477},[36,83930,52527],{"class":49},[36,83932,51377],{"class":52042},[36,83934,52049],{"class":49},[22742,83936,83938],{"id":83937},"_41054-number","4.10.5.4 Number",[14,83940,83941],{},[2212,83942],{"alt":31,"src":83943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83945,83946],{},"整数也可以进行toFixed来保留小数",[14,83948,83949],{},"比如：",[14,83951,83952],{},"const price=10",[14,83954,83955],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22742,83957,83959],{"id":83958},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83961,83962],{},[2212,83963],{"alt":31,"src":83964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[26,83966,83968],{"className":51375,"code":83967,"language":51377,"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,83969,83970,83980,83994,83998,84006,84020,84040,84052,84060,84066,84076,84086,84096,84100,84104,84110,84122,84136,84140,84144,84150,84162,84178,84188,84204,84208,84212,84218,84228,84238,84242,84246,84254,84266,84278,84290,84294,84298,84306,84318,84322,84326,84337,84347,84359,84371,84381,84385,84389,84397,84406,84418,84428,84438,84442,84446,84454,84463,84470,84480,84492,84496,84500,84509,84519,84530,84542,84554,84558,84562,84571,84581,84592,84596,84600,84606,84618,84630,84640,84650,84668,84680,84684,84688,84697,84709,84719,84729,84741,84745,84753,84761,84765,84773,84787,84795,84809,84837,84845,84853,84863,84867,84875,84883,84892,84900,84909,84919,84923,84927,84935,84943,84952,84960,84968,84981,84985,84989,84997,85005,85014,85022,85030,85045,85049,85053,85061,85069,85078,85086,85094,85108,85116,85120,85124,85129,85155,85160,85197,85202,85225,85230,85284,85289,85325,85329,85335,85340,85349,85363,85372,85391,85400,85410,85415,85420,85433,85438,85492,85518,85526,85534,85538],{"__ignoreMap":31},[36,83971,83972,83974,83976,83978],{"class":38,"line":39},[36,83973,52039],{"class":49},[36,83975,52043],{"class":52042},[36,83977,52046],{"class":2713},[36,83979,52049],{"class":49},[36,83981,83982,83984,83986,83988,83990,83992],{"class":38,"line":46},[36,83983,1789],{"class":49},[36,83985,51377],{"class":52042},[36,83987,52058],{"class":2713},[36,83989,54],{"class":49},[36,83991,52063],{"class":998},[36,83993,52049],{"class":49},[36,83995,83996],{"class":38,"line":78},[36,83997,194],{"emptyLinePlaceholder":193},[36,83999,84000,84002,84004],{"class":38,"line":125},[36,84001,1789],{"class":49},[36,84003,52076],{"class":52042},[36,84005,52049],{"class":49},[36,84007,84008,84010,84012,84014,84016,84018],{"class":38,"line":131},[36,84009,52886],{"class":49},[36,84011,52086],{"class":52042},[36,84013,52089],{"class":2713},[36,84015,54],{"class":49},[36,84017,52094],{"class":998},[36,84019,52049],{"class":49},[36,84021,84022,84024,84026,84028,84030,84032,84034,84036,84038],{"class":38,"line":396},[36,84023,52886],{"class":49},[36,84025,52086],{"class":52042},[36,84027,15664],{"class":2713},[36,84029,54],{"class":49},[36,84031,52133],{"class":998},[36,84033,52113],{"class":2713},[36,84035,54],{"class":49},[36,84037,52140],{"class":998},[36,84039,52049],{"class":49},[36,84041,84042,84044,84046,84048,84050],{"class":38,"line":407},[36,84043,52886],{"class":49},[36,84045,52149],{"class":52042},[36,84047,52152],{"class":49},[36,84049,52149],{"class":52042},[36,84051,52049],{"class":49},[36,84053,84054,84056,84058],{"class":38,"line":2061},[36,84055,52886],{"class":49},[36,84057,807],{"class":52042},[36,84059,52049],{"class":49},[36,84061,84062,84064],{"class":38,"line":2067},[36,84063,7150],{"class":52042},[36,84065,16316],{"class":49},[36,84067,84068,84070,84072,84074],{"class":38,"line":2079},[36,84069,55437],{"class":60},[36,84071,52179],{"class":49},[36,84073,643],{"class":60},[36,84075,2040],{"class":49},[36,84077,84078,84080,84082,84084],{"class":38,"line":2362},[36,84079,55448],{"class":60},[36,84081,52179],{"class":49},[36,84083,643],{"class":60},[36,84085,2040],{"class":49},[36,84087,84088,84090,84092,84094],{"class":38,"line":2367},[36,84089,73338],{"class":60},[36,84091,52179],{"class":49},[36,84093,61247],{"class":60},[36,84095,2040],{"class":49},[36,84097,84098],{"class":38,"line":2373},[36,84099,2937],{"class":49},[36,84101,84102],{"class":38,"line":2378},[36,84103,194],{"emptyLinePlaceholder":193},[36,84105,84106,84108],{"class":38,"line":2392},[36,84107,62865],{"class":2713},[36,84109,16316],{"class":49},[36,84111,84112,84114,84116,84118,84120],{"class":38,"line":2397},[36,84113,55513],{"class":60},[36,84115,52179],{"class":49},[36,84117,79316],{"class":60},[36,84119,52234],{"class":53},[36,84121,2040],{"class":49},[36,84123,84124,84126,84128,84130,84132,84134],{"class":38,"line":2403},[36,84125,55448],{"class":60},[36,84127,52179],{"class":49},[36,84129,67],{"class":60},[36,84131,52234],{"class":53},[36,84133,52298],{"class":60},[36,84135,2040],{"class":49},[36,84137,84138],{"class":38,"line":2424},[36,84139,2937],{"class":49},[36,84141,84142],{"class":38,"line":2429},[36,84143,194],{"emptyLinePlaceholder":193},[36,84145,84146,84148],{"class":38,"line":2443},[36,84147,79367],{"class":2713},[36,84149,16316],{"class":49},[36,84151,84152,84154,84156,84158,84160],{"class":38,"line":2448},[36,84153,55437],{"class":60},[36,84155,52179],{"class":49},[36,84157,1457],{"class":60},[36,84159,52234],{"class":53},[36,84161,2040],{"class":49},[36,84163,84164,84166,84168,84170,84172,84174,84176],{"class":38,"line":2477},[36,84165,62602],{"class":60},[36,84167,52179],{"class":49},[36,84169,28866],{"class":60},[36,84171,79422],{"class":60},[36,84173,79425],{"class":60},[36,84175,1577],{"class":53},[36,84177,2040],{"class":49},[36,84179,84180,84182,84184,84186],{"class":38,"line":2482},[36,84181,55751],{"class":60},[36,84183,52179],{"class":49},[36,84185,52219],{"class":60},[36,84187,2040],{"class":49},[36,84189,84190,84192,84194,84196,84198,84200,84202],{"class":38,"line":2499},[36,84191,62719],{"class":60},[36,84193,52179],{"class":49},[36,84195,61],{"class":60},[36,84197,52234],{"class":53},[36,84199,52263],{"class":60},[36,84201,62986],{"class":60},[36,84203,2040],{"class":49},[36,84205,84206],{"class":38,"line":2504},[36,84207,2937],{"class":49},[36,84209,84210],{"class":38,"line":2509},[36,84211,194],{"emptyLinePlaceholder":193},[36,84213,84214,84216],{"class":38,"line":2514},[36,84215,79485],{"class":2713},[36,84217,16316],{"class":49},[36,84219,84220,84222,84224,84226],{"class":38,"line":2528},[36,84221,62767],{"class":60},[36,84223,52179],{"class":49},[36,84225,62772],{"class":60},[36,84227,2040],{"class":49},[36,84229,84230,84232,84234,84236],{"class":38,"line":2533},[36,84231,55626],{"class":60},[36,84233,52179],{"class":49},[36,84235,62560],{"class":60},[36,84237,2040],{"class":49},[36,84239,84240],{"class":38,"line":3326},[36,84241,2937],{"class":49},[36,84243,84244],{"class":38,"line":3340},[36,84245,194],{"emptyLinePlaceholder":193},[36,84247,84248,84250,84252],{"class":38,"line":3348},[36,84249,79367],{"class":2713},[36,84251,56357],{"class":52042},[36,84253,16316],{"class":49},[36,84255,84256,84258,84260,84262,84264],{"class":38,"line":3353},[36,84257,55513],{"class":60},[36,84259,52179],{"class":49},[36,84261,1494],{"class":60},[36,84263,52234],{"class":53},[36,84265,2040],{"class":49},[36,84267,84268,84270,84272,84274,84276],{"class":38,"line":3359},[36,84269,55527],{"class":60},[36,84271,52179],{"class":49},[36,84273,1494],{"class":60},[36,84275,52234],{"class":53},[36,84277,2040],{"class":49},[36,84279,84280,84282,84284,84286,84288],{"class":38,"line":3365},[36,84281,62492],{"class":60},[36,84283,52179],{"class":49},[36,84285,157],{"class":60},[36,84287,52234],{"class":53},[36,84289,2040],{"class":49},[36,84291,84292],{"class":38,"line":3370},[36,84293,2937],{"class":49},[36,84295,84296],{"class":38,"line":8695},[36,84297,194],{"emptyLinePlaceholder":193},[36,84299,84300,84302,84304],{"class":38,"line":8719},[36,84301,79367],{"class":2713},[36,84303,63046],{"class":2713},[36,84305,16316],{"class":49},[36,84307,84308,84310,84312,84314,84316],{"class":38,"line":8724},[36,84309,55513],{"class":60},[36,84311,52179],{"class":49},[36,84313,2472],{"class":60},[36,84315,52234],{"class":53},[36,84317,2040],{"class":49},[36,84319,84320],{"class":38,"line":8730},[36,84321,2937],{"class":49},[36,84323,84324],{"class":38,"line":8757},[36,84325,194],{"emptyLinePlaceholder":193},[36,84327,84328,84330,84332,84335],{"class":38,"line":8762},[36,84329,79367],{"class":2713},[36,84331,63046],{"class":2713},[36,84333,84334],{"class":2713}," .tag",[36,84336,16316],{"class":49},[36,84338,84339,84341,84343,84345],{"class":38,"line":8768},[36,84340,55751],{"class":60},[36,84342,52179],{"class":49},[36,84344,61611],{"class":60},[36,84346,2040],{"class":49},[36,84348,84349,84351,84353,84355,84357],{"class":38,"line":8780},[36,84350,55437],{"class":60},[36,84352,52179],{"class":49},[36,84354,181],{"class":60},[36,84356,52234],{"class":53},[36,84358,2040],{"class":49},[36,84360,84361,84363,84365,84367,84369],{"class":38,"line":8792},[36,84362,55664],{"class":60},[36,84364,52179],{"class":49},[36,84366,625],{"class":60},[36,84368,52234],{"class":53},[36,84370,2040],{"class":49},[36,84372,84373,84375,84377,84379],{"class":38,"line":8804},[36,84374,58158],{"class":60},[36,84376,52179],{"class":49},[36,84378,62812],{"class":60},[36,84380,2040],{"class":49},[36,84382,84383],{"class":38,"line":10463},[36,84384,2937],{"class":49},[36,84386,84387],{"class":38,"line":10488},[36,84388,194],{"emptyLinePlaceholder":193},[36,84390,84391,84393,84395],{"class":38,"line":10511},[36,84392,79367],{"class":2713},[36,84394,79659],{"class":2713},[36,84396,32208],{"class":49},[36,84398,84399,84401,84404],{"class":38,"line":10535},[36,84400,79367],{"class":2713},[36,84402,84403],{"class":2713}," .sub-total",[36,84405,16316],{"class":49},[36,84407,84408,84410,84412,84414,84416],{"class":38,"line":10540},[36,84409,55664],{"class":60},[36,84411,52179],{"class":49},[36,84413,1532],{"class":60},[36,84415,52234],{"class":53},[36,84417,2040],{"class":49},[36,84419,84420,84422,84424,84426],{"class":38,"line":10545},[36,84421,58158],{"class":60},[36,84423,52179],{"class":49},[36,84425,79682],{"class":60},[36,84427,2040],{"class":49},[36,84429,84430,84432,84434,84436],{"class":38,"line":10550},[36,84431,62579],{"class":60},[36,84433,52179],{"class":49},[36,84435,61],{"class":60},[36,84437,2040],{"class":49},[36,84439,84440],{"class":38,"line":10559},[36,84441,2937],{"class":49},[36,84443,84444],{"class":38,"line":10564},[36,84445,194],{"emptyLinePlaceholder":193},[36,84447,84448,84450,84452],{"class":38,"line":10570},[36,84449,79367],{"class":2713},[36,84451,79699],{"class":2713},[36,84453,32208],{"class":49},[36,84455,84456,84458,84461],{"class":38,"line":10591},[36,84457,79367],{"class":2713},[36,84459,84460],{"class":2713}," .sub-total::before",[36,84462,32208],{"class":49},[36,84464,84465,84468],{"class":38,"line":10597},[36,84466,84467],{"class":2713},"    .amount::before",[36,84469,16316],{"class":49},[36,84471,84472,84474,84476,84478],{"class":38,"line":10611},[36,84473,79706],{"class":60},[36,84475,52179],{"class":49},[36,84477,79711],{"class":998},[36,84479,2040],{"class":49},[36,84481,84482,84484,84486,84488,84490],{"class":38,"line":10617},[36,84483,55664],{"class":60},[36,84485,52179],{"class":49},[36,84487,625],{"class":60},[36,84489,52234],{"class":53},[36,84491,2040],{"class":49},[36,84493,84494],{"class":38,"line":10644},[36,84495,2937],{"class":49},[36,84497,84498],{"class":38,"line":10653},[36,84499,194],{"emptyLinePlaceholder":193},[36,84501,84502,84504,84507],{"class":38,"line":10659},[36,84503,79367],{"class":2713},[36,84505,84506],{"class":2713}," .spec",[36,84508,16316],{"class":49},[36,84510,84511,84513,84515,84517],{"class":38,"line":10667},[36,84512,62579],{"class":60},[36,84514,52179],{"class":49},[36,84516,181],{"class":60},[36,84518,2040],{"class":49},[36,84520,84521,84523,84525,84528],{"class":38,"line":10672},[36,84522,58158],{"class":60},[36,84524,52179],{"class":49},[36,84526,84527],{"class":60},"#888",[36,84529,2040],{"class":49},[36,84531,84532,84534,84536,84538,84540],{"class":38,"line":17348},[36,84533,55664],{"class":60},[36,84535,52179],{"class":49},[36,84537,1431],{"class":60},[36,84539,52234],{"class":53},[36,84541,2040],{"class":49},[36,84543,84544,84546,84548,84550,84552],{"class":38,"line":17354},[36,84545,62742],{"class":60},[36,84547,52179],{"class":49},[36,84549,72],{"class":60},[36,84551,52234],{"class":53},[36,84553,2040],{"class":49},[36,84555,84556],{"class":38,"line":17377},[36,84557,2937],{"class":49},[36,84559,84560],{"class":38,"line":17383},[36,84561,194],{"emptyLinePlaceholder":193},[36,84563,84564,84566,84569],{"class":38,"line":17406},[36,84565,79367],{"class":2713},[36,84567,84568],{"class":2713}," .count",[36,84570,16316],{"class":49},[36,84572,84573,84575,84577,84579],{"class":38,"line":17420},[36,84574,62579],{"class":60},[36,84576,52179],{"class":49},[36,84578,61],{"class":60},[36,84580,2040],{"class":49},[36,84582,84583,84585,84587,84590],{"class":38,"line":17440},[36,84584,58158],{"class":60},[36,84586,52179],{"class":49},[36,84588,84589],{"class":60},"#aaa",[36,84591,2040],{"class":49},[36,84593,84594],{"class":38,"line":17446},[36,84595,2937],{"class":49},[36,84597,84598],{"class":38,"line":17457},[36,84599,194],{"emptyLinePlaceholder":193},[36,84601,84602,84604],{"class":38,"line":17480},[36,84603,73217],{"class":2713},[36,84605,16316],{"class":49},[36,84607,84608,84610,84612,84614,84616],{"class":38,"line":17502},[36,84609,55513],{"class":60},[36,84611,52179],{"class":49},[36,84613,79316],{"class":60},[36,84615,52234],{"class":53},[36,84617,2040],{"class":49},[36,84619,84620,84622,84624,84626,84628],{"class":38,"line":17507},[36,84621,55448],{"class":60},[36,84623,52179],{"class":49},[36,84625,643],{"class":60},[36,84627,52298],{"class":60},[36,84629,2040],{"class":49},[36,84631,84632,84634,84636,84638],{"class":38,"line":17513},[36,84633,55751],{"class":60},[36,84635,52179],{"class":49},[36,84637,52219],{"class":60},[36,84639,2040],{"class":49},[36,84641,84642,84644,84646,84648],{"class":38,"line":17527},[36,84643,55762],{"class":60},[36,84645,52179],{"class":49},[36,84647,52322],{"class":60},[36,84649,2040],{"class":49},[36,84651,84652,84655,84657,84659,84661,84663,84666],{"class":38,"line":17540},[36,84653,84654],{"class":60},"      border-top",[36,84656,52179],{"class":49},[36,84658,61],{"class":60},[36,84660,52234],{"class":53},[36,84662,52263],{"class":60},[36,84664,84665],{"class":60}," #4e4e4e",[36,84667,2040],{"class":49},[36,84669,84670,84672,84674,84676,84678],{"class":38,"line":17545},[36,84671,55437],{"class":60},[36,84673,52179],{"class":49},[36,84675,72],{"class":60},[36,84677,52234],{"class":53},[36,84679,2040],{"class":49},[36,84681,84682],{"class":38,"line":17559},[36,84683,2937],{"class":49},[36,84685,84686],{"class":38,"line":17564},[36,84687,194],{"emptyLinePlaceholder":193},[36,84689,84690,84692,84695],{"class":38,"line":17570},[36,84691,73217],{"class":2713},[36,84693,84694],{"class":2713}," .amount",[36,84696,16316],{"class":49},[36,84698,84699,84701,84703,84705,84707],{"class":38,"line":17575},[36,84700,55664],{"class":60},[36,84702,52179],{"class":49},[36,84704,1532],{"class":60},[36,84706,52234],{"class":53},[36,84708,2040],{"class":49},[36,84710,84711,84713,84715,84717],{"class":38,"line":17589},[36,84712,58158],{"class":60},[36,84714,52179],{"class":49},[36,84716,79682],{"class":60},[36,84718,2040],{"class":49},[36,84720,84721,84723,84725,84727],{"class":38,"line":17594},[36,84722,63076],{"class":60},[36,84724,52179],{"class":49},[36,84726,52231],{"class":60},[36,84728,2040],{"class":49},[36,84730,84731,84733,84735,84737,84739],{"class":38,"line":17599},[36,84732,62492],{"class":60},[36,84734,52179],{"class":49},[36,84736,1538],{"class":60},[36,84738,52234],{"class":53},[36,84740,2040],{"class":49},[36,84742,84743],{"class":38,"line":17613},[36,84744,2937],{"class":49},[36,84746,84747,84749,84751],{"class":38,"line":17625},[36,84748,53159],{"class":49},[36,84750,807],{"class":52042},[36,84752,52049],{"class":49},[36,84754,84755,84757,84759],{"class":38,"line":17630},[36,84756,52527],{"class":49},[36,84758,52076],{"class":52042},[36,84760,52049],{"class":49},[36,84762,84763],{"class":38,"line":17643},[36,84764,194],{"emptyLinePlaceholder":193},[36,84766,84767,84769,84771],{"class":38,"line":17648},[36,84768,1789],{"class":49},[36,84770,52542],{"class":52042},[36,84772,52049],{"class":49},[36,84774,84775,84777,84779,84781,84783,84785],{"class":38,"line":17653},[36,84776,52886],{"class":49},[36,84778,52353],{"class":52042},[36,84780,54228],{"class":2713},[36,84782,54],{"class":49},[36,84784,63350],{"class":998},[36,84786,52049],{"class":49},[36,84788,84789,84791,84793],{"class":38,"line":17658},[36,84790,53159],{"class":49},[36,84792,52353],{"class":52042},[36,84794,52049],{"class":49},[36,84796,84797,84799,84801,84803,84805,84807],{"class":38,"line":17671},[36,84798,52886],{"class":49},[36,84800,52353],{"class":52042},[36,84802,54228],{"class":2713},[36,84804,54],{"class":49},[36,84806,63322],{"class":998},[36,84808,52049],{"class":49},[36,84810,84811,84813,84815,84818,84820,84822,84824,84827,84829,84831,84833,84835],{"class":38,"line":17676},[36,84812,52083],{"class":49},[36,84814,52353],{"class":52042},[36,84816,84817],{"class":49},">合计：\u003C",[36,84819,36],{"class":52042},[36,84821,54228],{"class":2713},[36,84823,54],{"class":49},[36,84825,84826],{"class":998},"\"amount\"",[36,84828,56056],{"class":49},[36,84830,36],{"class":52042},[36,84832,56056],{"class":49},[36,84834,52353],{"class":52042},[36,84836,52049],{"class":49},[36,84838,84839,84841,84843],{"class":38,"line":33375},[36,84840,53159],{"class":49},[36,84842,52353],{"class":52042},[36,84844,52049],{"class":49},[36,84846,84847,84849,84851],{"class":38,"line":33381},[36,84848,52886],{"class":49},[36,84850,52555],{"class":52042},[36,84852,52049],{"class":49},[36,84854,84855,84857,84859,84861],{"class":38,"line":33387},[36,84856,11966],{"class":53},[36,84858,80119],{"class":60},[36,84860,14308],{"class":53},[36,84862,56189],{"class":49},[36,84864,84865],{"class":38,"line":33393},[36,84866,80128],{"class":49},[36,84868,84869,84871,84873],{"class":38,"line":33399},[36,84870,80133],{"class":49},[36,84872,80136],{"class":998},[36,84874,32208],{"class":49},[36,84876,84877,84879,84881],{"class":38,"line":33410},[36,84878,80143],{"class":49},[36,84880,80146],{"class":998},[36,84882,32208],{"class":49},[36,84884,84885,84887,84890],{"class":38,"line":33416},[36,84886,80153],{"class":49},[36,84888,84889],{"class":60},"289.9",[36,84891,32208],{"class":49},[36,84893,84894,84896,84898],{"class":38,"line":33436},[36,84895,80163],{"class":49},[36,84897,80166],{"class":998},[36,84899,32208],{"class":49},[36,84901,84902,84905,84907],{"class":38,"line":33442},[36,84903,84904],{"class":49},"        count: ",[36,84906,181],{"class":60},[36,84908,32208],{"class":49},[36,84910,84911,84914,84917],{"class":38,"line":33453},[36,84912,84913],{"class":49},"        spec: { color: ",[36,84915,84916],{"class":998},"'白色'",[36,84918,56346],{"class":49},[36,84920,84921],{"class":38,"line":33459},[36,84922,78634],{"class":49},[36,84924,84925],{"class":38,"line":33465},[36,84926,80128],{"class":49},[36,84928,84929,84931,84933],{"class":38,"line":33471},[36,84930,80133],{"class":49},[36,84932,80227],{"class":998},[36,84934,32208],{"class":49},[36,84936,84937,84939,84941],{"class":38,"line":33477},[36,84938,80143],{"class":49},[36,84940,80236],{"class":998},[36,84942,32208],{"class":49},[36,84944,84945,84947,84950],{"class":38,"line":33483},[36,84946,80153],{"class":49},[36,84948,84949],{"class":60},"109.8",[36,84951,32208],{"class":49},[36,84953,84954,84956,84958],{"class":38,"line":33489},[36,84955,80163],{"class":49},[36,84957,80254],{"class":998},[36,84959,32208],{"class":49},[36,84961,84962,84964,84966],{"class":38,"line":33495},[36,84963,84904],{"class":49},[36,84965,162],{"class":60},[36,84967,32208],{"class":49},[36,84969,84970,84973,84975,84977,84979],{"class":38,"line":33515},[36,84971,84972],{"class":49},"        spec: { size: ",[36,84974,82645],{"class":998},[36,84976,56206],{"class":49},[36,84978,82650],{"class":998},[36,84980,56346],{"class":49},[36,84982,84983],{"class":38,"line":33521},[36,84984,78634],{"class":49},[36,84986,84987],{"class":38,"line":33537},[36,84988,80128],{"class":49},[36,84990,84991,84993,84995],{"class":38,"line":33543},[36,84992,80133],{"class":49},[36,84994,80271],{"class":998},[36,84996,32208],{"class":49},[36,84998,84999,85001,85003],{"class":38,"line":33557},[36,85000,80143],{"class":49},[36,85002,80280],{"class":998},[36,85004,32208],{"class":49},[36,85006,85007,85009,85012],{"class":38,"line":33563},[36,85008,80153],{"class":49},[36,85010,85011],{"class":60},"488",[36,85013,32208],{"class":49},[36,85015,85016,85018,85020],{"class":38,"line":33578},[36,85017,80163],{"class":49},[36,85019,80298],{"class":998},[36,85021,32208],{"class":49},[36,85023,85024,85026,85028],{"class":38,"line":33584},[36,85025,84904],{"class":49},[36,85027,61],{"class":60},[36,85029,32208],{"class":49},[36,85031,85032,85034,85037,85040,85043],{"class":38,"line":33593},[36,85033,84913],{"class":49},[36,85035,85036],{"class":998},"'青色'",[36,85038,85039],{"class":49},", sum: ",[36,85041,85042],{"class":998},"'一大四小'",[36,85044,56346],{"class":49},[36,85046,85047],{"class":38,"line":33599},[36,85048,78634],{"class":49},[36,85050,85051],{"class":38,"line":33608},[36,85052,80128],{"class":49},[36,85054,85055,85057,85059],{"class":38,"line":33614},[36,85056,80133],{"class":49},[36,85058,80315],{"class":998},[36,85060,32208],{"class":49},[36,85062,85063,85065,85067],{"class":38,"line":33620},[36,85064,80143],{"class":49},[36,85066,80324],{"class":998},[36,85068,32208],{"class":49},[36,85070,85071,85073,85076],{"class":38,"line":33629},[36,85072,80153],{"class":49},[36,85074,85075],{"class":60},"139",[36,85077,32208],{"class":49},[36,85079,85080,85082,85084],{"class":38,"line":33635},[36,85081,80163],{"class":49},[36,85083,80342],{"class":998},[36,85085,32208],{"class":49},[36,85087,85088,85090,85092],{"class":38,"line":33646},[36,85089,84904],{"class":49},[36,85091,61],{"class":60},[36,85093,32208],{"class":49},[36,85095,85096,85098,85101,85103,85106],{"class":38,"line":33652},[36,85097,84972],{"class":49},[36,85099,85100],{"class":998},"'小号'",[36,85102,56206],{"class":49},[36,85104,85105],{"class":998},"'紫色'",[36,85107,56212],{"class":49},[36,85109,85110,85113],{"class":38,"line":33671},[36,85111,85112],{"class":49},"        gift: ",[36,85114,85115],{"class":998},"'50g茶叶,清洗球'\n",[36,85117,85118],{"class":38,"line":33677},[36,85119,53140],{"class":49},[36,85121,85122],{"class":38,"line":33688},[36,85123,53851],{"class":49},[36,85125,85126],{"class":38,"line":33694},[36,85127,85128],{"class":42},"    \u002F\u002F  1.根据数据渲染页面\n",[36,85130,85131,85133,85135,85137,85139,85141,85143,85145,85147,85149,85151,85153],{"class":38,"line":33714},[36,85132,53149],{"class":49},[36,85134,55141],{"class":2713},[36,85136,901],{"class":49},[36,85138,80643],{"class":998},[36,85140,74991],{"class":49},[36,85142,54],{"class":53},[36,85144,80790],{"class":49},[36,85146,74786],{"class":2713},[36,85148,901],{"class":49},[36,85150,80537],{"class":416},[36,85152,80540],{"class":53},[36,85154,16316],{"class":49},[36,85156,85157],{"class":38,"line":33730},[36,85158,85159],{"class":42},"      \u002F\u002F 对象解构\n",[36,85161,85162,85164,85166,85168,85170,85172,85174,85177,85179,85181,85183,85186,85188,85191,85193,85195],{"class":38,"line":33736},[36,85163,58970],{"class":53},[36,85165,80549],{"class":49},[36,85167,80562],{"class":60},[36,85169,154],{"class":49},[36,85171,80552],{"class":60},[36,85173,154],{"class":49},[36,85175,85176],{"class":60},"count",[36,85178,154],{"class":49},[36,85180,80557],{"class":60},[36,85182,154],{"class":49},[36,85184,85185],{"class":60},"spec",[36,85187,154],{"class":49},[36,85189,85190],{"class":60},"gift",[36,85192,80565],{"class":49},[36,85194,54],{"class":53},[36,85196,80570],{"class":49},[36,85198,85199],{"class":38,"line":33750},[36,85200,85201],{"class":42},"      \u002F\u002F 规格文字模块处理\n",[36,85203,85204,85206,85209,85211,85213,85215,85217,85219,85221,85223],{"class":38,"line":33756},[36,85205,58970],{"class":53},[36,85207,85208],{"class":60}," text",[36,85210,14308],{"class":53},[36,85212,82680],{"class":49},[36,85214,82683],{"class":2713},[36,85216,82686],{"class":49},[36,85218,74965],{"class":2713},[36,85220,901],{"class":49},[36,85222,82693],{"class":998},[36,85224,75],{"class":49},[36,85226,85227],{"class":38,"line":33762},[36,85228,85229],{"class":42},"      \u002F\u002F 处理赠品模块\n",[36,85231,85232,85234,85236,85238,85241,85243,85245,85247,85249,85252,85254,85256,85258,85260,85262,85265,85267,85270,85272,85274,85276,85278,85280,85282],{"class":38,"line":33773},[36,85233,58970],{"class":53},[36,85235,74661],{"class":60},[36,85237,14308],{"class":53},[36,85239,85240],{"class":49}," gift ",[36,85242,1865],{"class":53},[36,85244,83854],{"class":49},[36,85246,83857],{"class":2713},[36,85248,901],{"class":49},[36,85250,85251],{"class":998},"','",[36,85253,31568],{"class":49},[36,85255,74786],{"class":2713},[36,85257,901],{"class":49},[36,85259,80537],{"class":416},[36,85261,80540],{"class":53},[36,85263,85264],{"class":998}," `\u003Cspan class=\"tag\">【赠品】${",[36,85266,80537],{"class":49},[36,85268,85269],{"class":998},"}\u003C\u002Fspan>`",[36,85271,31568],{"class":49},[36,85273,74965],{"class":2713},[36,85275,901],{"class":49},[36,85277,74970],{"class":998},[36,85279,14458],{"class":49},[36,85281,1738],{"class":53},[36,85283,70846],{"class":998},[36,85285,85286],{"class":38,"line":33779},[36,85287,85288],{"class":42},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[36,85290,85291,85293,85296,85298,85301,85303,85305,85307,85310,85312,85314,85316,85319,85321,85323],{"class":38,"line":33785},[36,85292,58970],{"class":53},[36,85294,85295],{"class":60}," subtotal",[36,85297,14308],{"class":53},[36,85299,85300],{"class":49}," ((price ",[36,85302,1339],{"class":53},[36,85304,6501],{"class":60},[36,85306,7265],{"class":53},[36,85308,85309],{"class":49}," count) ",[36,85311,1466],{"class":53},[36,85313,6501],{"class":60},[36,85315,31568],{"class":49},[36,85317,85318],{"class":2713},"toFixed",[36,85320,901],{"class":49},[36,85322,181],{"class":60},[36,85324,75],{"class":49},[36,85326,85327],{"class":38,"line":33795},[36,85328,194],{"emptyLinePlaceholder":193},[36,85330,85331,85333],{"class":38,"line":33801},[36,85332,74724],{"class":53},[36,85334,70910],{"class":998},[36,85336,85337],{"class":38,"line":33812},[36,85338,85339],{"class":998},"        \u003Cdiv class=\"item\">\n",[36,85341,85342,85345,85347],{"class":38,"line":33818},[36,85343,85344],{"class":998},"          \u003Cimg src=\"${",[36,85346,80562],{"class":49},[36,85348,80594],{"class":998},[36,85350,85351,85354,85356,85359,85361],{"class":38,"line":33828},[36,85352,85353],{"class":998},"          \u003Cp class=\"name\">${",[36,85355,80552],{"class":49},[36,85357,85358],{"class":998},"}${",[36,85360,2049],{"class":49},[36,85362,80604],{"class":998},[36,85364,85365,85368,85370],{"class":38,"line":33833},[36,85366,85367],{"class":998},"          \u003Cp class=\"spec\">${",[36,85369,5935],{"class":49},[36,85371,80604],{"class":998},[36,85373,85374,85377,85379,85381,85383,85385,85387,85389],{"class":38,"line":33839},[36,85375,85376],{"class":998},"          \u003Cp class=\"price\">${",[36,85378,80557],{"class":49},[36,85380,1440],{"class":998},[36,85382,85318],{"class":2713},[36,85384,901],{"class":998},[36,85386,181],{"class":60},[36,85388,1314],{"class":998},[36,85390,80604],{"class":998},[36,85392,85393,85396,85398],{"class":38,"line":33888},[36,85394,85395],{"class":998},"          \u003Cp class=\"count\">x${",[36,85397,85176],{"class":49},[36,85399,80604],{"class":998},[36,85401,85402,85405,85408],{"class":38,"line":33935},[36,85403,85404],{"class":998},"          \u003Cp class=\"sub-total\">${",[36,85406,85407],{"class":49},"subtotal",[36,85409,80604],{"class":998},[36,85411,85412],{"class":38,"line":33940},[36,85413,85414],{"class":998},"        \u003C\u002Fdiv> \n",[36,85416,85417],{"class":38,"line":33946},[36,85418,85419],{"class":998},"             `\n",[36,85421,85422,85425,85427,85429,85431],{"class":38,"line":33965},[36,85423,85424],{"class":49},"    }).",[36,85426,74965],{"class":2713},[36,85428,901],{"class":49},[36,85430,74970],{"class":998},[36,85432,75],{"class":49},[36,85434,85435],{"class":38,"line":33971},[36,85436,85437],{"class":42},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[36,85439,85440,85442,85444,85446,85448,85451,85453,85456,85458,85460,85462,85465,85468,85470,85473,85475,85477,85479,85482,85484,85486,85488,85490],{"class":38,"line":33991},[36,85441,11966],{"class":53},[36,85443,63527],{"class":60},[36,85445,14308],{"class":53},[36,85447,80790],{"class":49},[36,85449,85450],{"class":2713},"reduce",[36,85452,3126],{"class":49},[36,85454,85455],{"class":416},"prev",[36,85457,154],{"class":49},[36,85459,80537],{"class":416},[36,85461,14458],{"class":49},[36,85463,85464],{"class":53},"=>",[36,85466,85467],{"class":49}," prev ",[36,85469,1365],{"class":53},[36,85471,85472],{"class":49}," (item.price ",[36,85474,1339],{"class":53},[36,85476,6501],{"class":60},[36,85478,7265],{"class":53},[36,85480,85481],{"class":49}," item.count) ",[36,85483,1466],{"class":53},[36,85485,6501],{"class":60},[36,85487,154],{"class":49},[36,85489,643],{"class":60},[36,85491,75],{"class":49},[36,85493,85494,85496,85498,85500,85503,85505,85507,85510,85512,85514,85516],{"class":38,"line":33997},[36,85495,53149],{"class":49},[36,85497,55141],{"class":2713},[36,85499,901],{"class":49},[36,85501,85502],{"class":998},"'.amount'",[36,85504,74991],{"class":49},[36,85506,54],{"class":53},[36,85508,85509],{"class":49}," total.",[36,85511,85318],{"class":2713},[36,85513,901],{"class":49},[36,85515,181],{"class":60},[36,85517,75],{"class":49},[36,85519,85520,85522,85524],{"class":38,"line":34003},[36,85521,53159],{"class":49},[36,85523,52555],{"class":52042},[36,85525,52049],{"class":49},[36,85527,85528,85530,85532],{"class":38,"line":34013},[36,85529,52527],{"class":49},[36,85531,52542],{"class":52042},[36,85533,52049],{"class":49},[36,85535,85536],{"class":38,"line":34018},[36,85537,194],{"emptyLinePlaceholder":193},[36,85539,85540,85542,85544],{"class":38,"line":34024},[36,85541,52527],{"class":49},[36,85543,51377],{"class":52042},[36,85545,52049],{"class":49},[21,85547,85549],{"id":85548},"_411-编程思想","4.11 编程思想",[868,85551,85553],{"id":85552},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,85555,85556,85559],{},[1043,85557,85558],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,85561,85562],{},"调用就可以了",[14,85564,85565],{},[2212,85566],{"alt":31,"src":85567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[868,85569,85571],{"id":85570},"_4112-面向对象","4.11.2 面向对象",[14,85573,85574],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,85576,85577],{},[2212,85578],{"alt":31,"src":85579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,85581,85582],{},"面向对象的特性：",[1886,85584,85585,85588,85591],{},[854,85586,85587],{},"封装性",[854,85589,85590],{},"继承性",[854,85592,85593],{},"多态性",[868,85595,85597],{"id":85596},"_4113-两者比较","4.11.3 两者比较",[14,85599,85600],{},[2212,85601],{"alt":31,"src":85602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[21,85604,85606],{"id":85605},"_412-构造函数回顾","4.12 构造函数回顾",[14,85608,85609],{},[2212,85610],{"alt":31,"src":85611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,85613,85614],{},[2212,85615],{"alt":31,"src":85616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,85618,85619],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,85621,85622],{},[2212,85623],{"alt":31,"src":85624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[21,85626,85628],{"id":85627},"_413-原型","4.13 原型",[868,85630,85632],{"id":85631},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,85634,85635],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,85637,85638],{},[2212,85639],{"alt":31,"src":85640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,85642,85643],{},[2212,85644],{"alt":31,"src":85645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,85647,85648],{},"原型是构造函数的属性，它也是一个对象",[14,85650,85651],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,85653,85654],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[26,85656,85658],{"className":53809,"code":85657,"language":53811,"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,85659,85660,85668,85673,85681,85686,85691,85696,85701,85706,85710,85714,85718,85723,85728,85732,85737,85742,85747,85752,85757,85761,85769],{"__ignoreMap":31},[36,85661,85662,85664,85666],{"class":38,"line":39},[36,85663,1789],{"class":49},[36,85665,52542],{"class":52042},[36,85667,52049],{"class":49},[36,85669,85670],{"class":38,"line":46},[36,85671,85672],{"class":42},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[36,85674,85675,85677,85679],{"class":38,"line":78},[36,85676,52886],{"class":49},[36,85678,52555],{"class":52042},[36,85680,52049],{"class":49},[36,85682,85683],{"class":38,"line":125},[36,85684,85685],{"class":49},"    function Star(uname, age) {\n",[36,85687,85688],{"class":38,"line":131},[36,85689,85690],{"class":49},"      this.uname = uname,\n",[36,85692,85693],{"class":38,"line":396},[36,85694,85695],{"class":49},"        this.age = age\n",[36,85697,85698],{"class":38,"line":407},[36,85699,85700],{"class":49},"      \u002F\u002F this.sing = function () {\n",[36,85702,85703],{"class":38,"line":2061},[36,85704,85705],{"class":49},"      \u002F\u002F   console.log('唱歌')\n",[36,85707,85708],{"class":38,"line":2067},[36,85709,194],{"emptyLinePlaceholder":193},[36,85711,85712],{"class":38,"line":2079},[36,85713,60779],{"class":49},[36,85715,85716],{"class":38,"line":2362},[36,85717,2937],{"class":49},[36,85719,85720],{"class":38,"line":2367},[36,85721,85722],{"class":49},"    Star.prototype.sing = function () {\n",[36,85724,85725],{"class":38,"line":2373},[36,85726,85727],{"class":49},"      console.log('唱歌')\n",[36,85729,85730],{"class":38,"line":2378},[36,85731,2937],{"class":49},[36,85733,85734],{"class":38,"line":2392},[36,85735,85736],{"class":49},"    \u002F\u002F console.dir(Star.prototype)\n",[36,85738,85739],{"class":38,"line":2397},[36,85740,85741],{"class":49},"    const pink = new Star('pink', 18)\n",[36,85743,85744],{"class":38,"line":2403},[36,85745,85746],{"class":49},"    const red = new Star('red', 20)\n",[36,85748,85749],{"class":38,"line":2424},[36,85750,85751],{"class":49},"    pink.sing()\n",[36,85753,85754],{"class":38,"line":2429},[36,85755,85756],{"class":49},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[36,85758,85759],{"class":38,"line":2443},[36,85760,194],{"emptyLinePlaceholder":193},[36,85762,85763,85765,85767],{"class":38,"line":2448},[36,85764,53159],{"class":49},[36,85766,52555],{"class":52042},[36,85768,52049],{"class":49},[36,85770,85771,85773,85775],{"class":38,"line":2477},[36,85772,52527],{"class":49},[36,85774,52542],{"class":52042},[36,85776,52049],{"class":49},[14,85778,85779],{},[2212,85780],{"alt":31,"src":85781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[26,85783,85785],{"className":53809,"code":85784,"language":53811,"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,85786,85787,85795,85803,85808,85813,85818,85823,85827,85832,85837,85842,85846,85851,85855,85859,85864,85868,85876],{"__ignoreMap":31},[36,85788,85789,85791,85793],{"class":38,"line":39},[36,85790,1789],{"class":49},[36,85792,52542],{"class":52042},[36,85794,52049],{"class":49},[36,85796,85797,85799,85801],{"class":38,"line":46},[36,85798,52886],{"class":49},[36,85800,52555],{"class":52042},[36,85802,52049],{"class":49},[36,85804,85805],{"class":38,"line":78},[36,85806,85807],{"class":49},"    let that\n",[36,85809,85810],{"class":38,"line":125},[36,85811,85812],{"class":49},"    function Star(uname) {\n",[36,85814,85815],{"class":38,"line":131},[36,85816,85817],{"class":49},"      this.uname = uname\n",[36,85819,85820],{"class":38,"line":396},[36,85821,85822],{"class":49},"      that = this\n",[36,85824,85825],{"class":38,"line":407},[36,85826,2937],{"class":49},[36,85828,85829],{"class":38,"line":2061},[36,85830,85831],{"class":49},"    \u002F\u002F 实例对象是 ldh\n",[36,85833,85834],{"class":38,"line":2067},[36,85835,85836],{"class":49},"    const ldh = new Star('刘德华')\n",[36,85838,85839],{"class":38,"line":2079},[36,85840,85841],{"class":49},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[36,85843,85844],{"class":38,"line":2362},[36,85845,194],{"emptyLinePlaceholder":193},[36,85847,85848],{"class":38,"line":2367},[36,85849,85850],{"class":49},"    Star.sing = function () {\n",[36,85852,85853],{"class":38,"line":2373},[36,85854,85727],{"class":49},[36,85856,85857],{"class":38,"line":2378},[36,85858,2937],{"class":49},[36,85860,85861],{"class":38,"line":2392},[36,85862,85863],{"class":49},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[36,85865,85866],{"class":38,"line":2397},[36,85867,194],{"emptyLinePlaceholder":193},[36,85869,85870,85872,85874],{"class":38,"line":2403},[36,85871,53159],{"class":49},[36,85873,52555],{"class":52042},[36,85875,52049],{"class":49},[36,85877,85878,85880,85882],{"class":38,"line":2424},[36,85879,52527],{"class":49},[36,85881,52542],{"class":52042},[36,85883,52049],{"class":49},[14,85885,85886],{},"构造函数的this指向的是实例对象；",[14,85888,85889],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[868,85891,85893],{"id":85892},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85895,85896],{},[2212,85897],{"alt":31,"src":85898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[26,85900,85902],{"className":53809,"code":85901,"language":53811,"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,85903,85904,85912,85920,85925,85930,85935,85940,85945,85950,85955,85960,85965,85970,85974,85979,85984,85989,85994,85998,86003,86008,86013,86018,86022,86027,86032,86037,86042,86046,86051,86055,86063],{"__ignoreMap":31},[36,85905,85906,85908,85910],{"class":38,"line":39},[36,85907,1789],{"class":49},[36,85909,52542],{"class":52042},[36,85911,52049],{"class":49},[36,85913,85914,85916,85918],{"class":38,"line":46},[36,85915,52886],{"class":49},[36,85917,52555],{"class":52042},[36,85919,52049],{"class":49},[36,85921,85922],{"class":38,"line":78},[36,85923,85924],{"class":49},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[36,85926,85927],{"class":38,"line":125},[36,85928,85929],{"class":49},"    const arr = [1, 2, 3]\n",[36,85931,85932],{"class":38,"line":131},[36,85933,85934],{"class":49},"    \u002F\u002F 自己定义数组的扩展方法\n",[36,85936,85937],{"class":38,"line":396},[36,85938,85939],{"class":49},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[36,85941,85942],{"class":38,"line":407},[36,85943,85944],{"class":49},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[36,85946,85947],{"class":38,"line":2061},[36,85948,85949],{"class":49},"    \u002F\u002F ①.最大值\n",[36,85951,85952],{"class":38,"line":2067},[36,85953,85954],{"class":49},"    Array.prototype.max = function () {\n",[36,85956,85957],{"class":38,"line":2079},[36,85958,85959],{"class":49},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[36,85961,85962],{"class":38,"line":2362},[36,85963,85964],{"class":49},"      return Math.max(...this)\n",[36,85966,85967],{"class":38,"line":2367},[36,85968,85969],{"class":49},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[36,85971,85972],{"class":38,"line":2373},[36,85973,2937],{"class":49},[36,85975,85976],{"class":38,"line":2378},[36,85977,85978],{"class":49},"    console.log(arr.max())\n",[36,85980,85981],{"class":38,"line":2392},[36,85982,85983],{"class":49},"    \u002F\u002F ②最小值\n",[36,85985,85986],{"class":38,"line":2397},[36,85987,85988],{"class":49},"    Array.prototype.min = function () {\n",[36,85990,85991],{"class":38,"line":2403},[36,85992,85993],{"class":49},"      return Math.min(...this)\n",[36,85995,85996],{"class":38,"line":2424},[36,85997,2937],{"class":49},[36,85999,86000],{"class":38,"line":2429},[36,86001,86002],{"class":49},"    console.log(arr.min())\n",[36,86004,86005],{"class":38,"line":2443},[36,86006,86007],{"class":49},"    \u002F\u002F③求和\n",[36,86009,86010],{"class":38,"line":2448},[36,86011,86012],{"class":49},"    Array.prototype.sum = function () {\n",[36,86014,86015],{"class":38,"line":2477},[36,86016,86017],{"class":49},"      return this.reduce((prev, current) => prev + current, 0)\n",[36,86019,86020],{"class":38,"line":2482},[36,86021,2937],{"class":49},[36,86023,86024],{"class":38,"line":2499},[36,86025,86026],{"class":49},"    console.log(arr.sum())\n",[36,86028,86029],{"class":38,"line":2504},[36,86030,86031],{"class":49},"    \u002F\u002F ③排序\n",[36,86033,86034],{"class":38,"line":2509},[36,86035,86036],{"class":49},"    Array.prototype.rever = function () {\n",[36,86038,86039],{"class":38,"line":2514},[36,86040,86041],{"class":49},"      return this.reverse()\n",[36,86043,86044],{"class":38,"line":2528},[36,86045,2937],{"class":49},[36,86047,86048],{"class":38,"line":2533},[36,86049,86050],{"class":49},"    console.log(arr.rever())\n",[36,86052,86053],{"class":38,"line":3326},[36,86054,194],{"emptyLinePlaceholder":193},[36,86056,86057,86059,86061],{"class":38,"line":3340},[36,86058,53159],{"class":49},[36,86060,52555],{"class":52042},[36,86062,52049],{"class":49},[36,86064,86065,86067,86069],{"class":38,"line":3348},[36,86066,52527],{"class":49},[36,86068,52542],{"class":52042},[36,86070,52049],{"class":49},[14,86072,86073],{},[2212,86074],{"alt":31,"src":86075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[868,86077,86079],{"id":86078},"_4133-constructor-属性","4.13.3 constructor 属性",[14,86081,86082],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,86084,86085],{},[2212,86086],{"alt":31,"src":86087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[26,86089,86091],{"className":53809,"code":86090,"language":53811,"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,86092,86093,86101,86109,86114,86119,86123,86128,86133,86138,86146],{"__ignoreMap":31},[36,86094,86095,86097,86099],{"class":38,"line":39},[36,86096,1789],{"class":49},[36,86098,52542],{"class":52042},[36,86100,52049],{"class":49},[36,86102,86103,86105,86107],{"class":38,"line":46},[36,86104,52886],{"class":49},[36,86106,52555],{"class":52042},[36,86108,52049],{"class":49},[36,86110,86111],{"class":38,"line":78},[36,86112,86113],{"class":49},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[36,86115,86116],{"class":38,"line":125},[36,86117,86118],{"class":49},"    function Star() {\n",[36,86120,86121],{"class":38,"line":131},[36,86122,2937],{"class":49},[36,86124,86125],{"class":38,"line":396},[36,86126,86127],{"class":49},"    const ldh = new Star()\n",[36,86129,86130],{"class":38,"line":407},[36,86131,86132],{"class":49},"    console.log(Star.prototype)\n",[36,86134,86135],{"class":38,"line":2061},[36,86136,86137],{"class":49},"    console.log(Star.prototype.constructor === Star)\n",[36,86139,86140,86142,86144],{"class":38,"line":2067},[36,86141,53159],{"class":49},[36,86143,52555],{"class":52042},[36,86145,52049],{"class":49},[36,86147,86148,86150,86152],{"class":38,"line":2079},[36,86149,52527],{"class":49},[36,86151,52542],{"class":52042},[36,86153,52049],{"class":49},[14,86155,86156],{},[2212,86157],{"alt":31,"src":86158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,86160,86161],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[26,86163,86165],{"className":53809,"code":86164,"language":53811,"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,86166,86167,86175,86179,86183,86187,86192,86197,86202,86206,86211,86216,86221,86226,86231,86236,86240,86244,86249,86254,86259,86263,86268,86273,86277,86281,86285],{"__ignoreMap":31},[36,86168,86169,86171,86173],{"class":38,"line":39},[36,86170,52886],{"class":49},[36,86172,52555],{"class":52042},[36,86174,52049],{"class":49},[36,86176,86177],{"class":38,"line":46},[36,86178,86113],{"class":49},[36,86180,86181],{"class":38,"line":78},[36,86182,86118],{"class":49},[36,86184,86185],{"class":38,"line":125},[36,86186,2937],{"class":49},[36,86188,86189],{"class":38,"line":131},[36,86190,86191],{"class":49},"    \u002F\u002F const ldh = new Star()\n",[36,86193,86194],{"class":38,"line":396},[36,86195,86196],{"class":49},"    \u002F\u002F console.log(Star.prototype)\n",[36,86198,86199],{"class":38,"line":407},[36,86200,86201],{"class":49},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[36,86203,86204],{"class":38,"line":2061},[36,86205,194],{"emptyLinePlaceholder":193},[36,86207,86208],{"class":38,"line":2067},[36,86209,86210],{"class":49},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[36,86212,86213],{"class":38,"line":2079},[36,86214,86215],{"class":49},"    \u002F\u002F Star.prototype.sing = function () {\n",[36,86217,86218],{"class":38,"line":2362},[36,86219,86220],{"class":49},"    \u002F\u002F   console.log('唱歌')\n",[36,86222,86223],{"class":38,"line":2367},[36,86224,86225],{"class":49},"    \u002F\u002F }\n",[36,86227,86228],{"class":38,"line":2373},[36,86229,86230],{"class":49},"    \u002F\u002F Star.prototype.dance = function () {\n",[36,86232,86233],{"class":38,"line":2378},[36,86234,86235],{"class":49},"    \u002F\u002F   console.log('跳舞')\n",[36,86237,86238],{"class":38,"line":2392},[36,86239,86225],{"class":49},[36,86241,86242],{"class":38,"line":2397},[36,86243,86132],{"class":49},[36,86245,86246],{"class":38,"line":2403},[36,86247,86248],{"class":49},"    Star.prototype = {\n",[36,86250,86251],{"class":38,"line":2424},[36,86252,86253],{"class":49},"      sing: function () {\n",[36,86255,86256],{"class":38,"line":2429},[36,86257,86258],{"class":49},"        console.log('唱歌')\n",[36,86260,86261],{"class":38,"line":2443},[36,86262,78634],{"class":49},[36,86264,86265],{"class":38,"line":2448},[36,86266,86267],{"class":49},"      dance: function () {\n",[36,86269,86270],{"class":38,"line":2477},[36,86271,86272],{"class":49},"        console.log('跳舞')\n",[36,86274,86275],{"class":38,"line":2482},[36,86276,53140],{"class":49},[36,86278,86279],{"class":38,"line":2499},[36,86280,2937],{"class":49},[36,86282,86283],{"class":38,"line":2504},[36,86284,86132],{"class":49},[36,86286,86287,86289,86291],{"class":38,"line":2509},[36,86288,53159],{"class":49},[36,86290,52555],{"class":52042},[36,86292,52049],{"class":49},[14,86294,86295],{},"进行输出结果后会发现：",[14,86297,86298],{},[2212,86299],{"alt":31,"src":86300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,86302,86303],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,86305,86306],{},"所以，要重新指回创造这个原型对象的构造函数",[26,86308,86310],{"className":71955,"code":86309,"language":71957,"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,86311,86312,86326,86331,86336,86347,86360,86365,86376,86390,86394],{"__ignoreMap":31},[36,86313,86314,86317,86319,86322,86324],{"class":38,"line":39},[36,86315,86316],{"class":60},"Star",[36,86318,1440],{"class":49},[36,86320,86321],{"class":60},"prototype",[36,86323,14308],{"class":53},[36,86325,16316],{"class":49},[36,86327,86328],{"class":38,"line":46},[36,86329,86330],{"class":42},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[36,86332,86333],{"class":38,"line":78},[36,86334,86335],{"class":49},"  constructor: Star,\n",[36,86337,86338,86341,86343,86345],{"class":38,"line":125},[36,86339,86340],{"class":2713},"  sing",[36,86342,52179],{"class":49},[36,86344,55191],{"class":53},[36,86346,55194],{"class":49},[36,86348,86349,86351,86353,86355,86358],{"class":38,"line":131},[36,86350,74495],{"class":49},[36,86352,58989],{"class":2713},[36,86354,901],{"class":49},[36,86356,86357],{"class":998},"'唱歌'",[36,86359,75],{"class":49},[36,86361,86362],{"class":38,"line":396},[36,86363,86364],{"class":49},"   },\n",[36,86366,86367,86370,86372,86374],{"class":38,"line":407},[36,86368,86369],{"class":2713},"   dance",[36,86371,52179],{"class":49},[36,86373,55191],{"class":53},[36,86375,55194],{"class":49},[36,86377,86378,86381,86383,86385,86388],{"class":38,"line":2061},[36,86379,86380],{"class":49},"     console.",[36,86382,58989],{"class":2713},[36,86384,901],{"class":49},[36,86386,86387],{"class":998},"'跳舞'",[36,86389,75],{"class":49},[36,86391,86392],{"class":38,"line":2067},[36,86393,5058],{"class":49},[36,86395,86396],{"class":38,"line":2079},[36,86397,2315],{"class":49},[14,86399,86400],{},[2212,86401],{"alt":31,"src":86402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,86404,86405],{},"总结1：",[14,86407,86408],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,86410,86411],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,86413,86414],{},"constructor指的是他的来源",[14,86416,86417],{},[2212,86418],{"alt":31,"src":86419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,86421,86422],{},[2212,86423],{"alt":31,"src":86424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,86426,86427],{},"总结2：",[14,86429,86430],{},[2212,86431],{"alt":31,"src":86432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,86434,86435],{},[2212,86436],{"alt":31,"src":86437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,86439,86440],{},[2212,86441],{"alt":31,"src":86442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[868,86444,86446],{"id":86445},"_4134-对象原型","4.13.4 对象原型",[14,86448,86449],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,86451,86452],{},"对象原型就是__proto__这个属性",[14,86454,86455],{},[2212,86456],{"alt":31,"src":86457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,86459,86460],{},[2212,86461],{"alt":31,"src":86462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,86464,86465],{},[2212,86466],{"alt":31,"src":86467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,86469,86470],{},[2212,86471],{"alt":31,"src":86472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[26,86474,86476],{"className":53809,"code":86475,"language":53811,"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,86477,86478,86486,86494,86498,86502,86506,86511,86519],{"__ignoreMap":31},[36,86479,86480,86482,86484],{"class":38,"line":39},[36,86481,1789],{"class":49},[36,86483,52542],{"class":52042},[36,86485,52049],{"class":49},[36,86487,86488,86490,86492],{"class":38,"line":46},[36,86489,52886],{"class":49},[36,86491,52555],{"class":52042},[36,86493,52049],{"class":49},[36,86495,86496],{"class":38,"line":78},[36,86497,86118],{"class":49},[36,86499,86500],{"class":38,"line":125},[36,86501,2937],{"class":49},[36,86503,86504],{"class":38,"line":131},[36,86505,86127],{"class":49},[36,86507,86508],{"class":38,"line":396},[36,86509,86510],{"class":49},"    console.log(ldh)\n",[36,86512,86513,86515,86517],{"class":38,"line":407},[36,86514,53159],{"class":49},[36,86516,52555],{"class":52042},[36,86518,52049],{"class":49},[36,86520,86521,86523,86525],{"class":38,"line":2061},[36,86522,52527],{"class":49},[36,86524,52542],{"class":52042},[36,86526,52049],{"class":49},[14,86528,86529],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,86531,86532],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,86534,86535],{},[2212,86536],{"alt":31,"src":86537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,86539,86540],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,86542,86543],{},"对象原型指向原型对象",[14,86545,86546],{},[2212,86547],{"alt":31,"src":86548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,86550,86551],{},[2212,86552],{"alt":31,"src":86553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,86555,86556],{},[2212,86557],{"alt":31,"src":86558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[868,86560,86562],{"id":86561},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,86564,86565],{},[2212,86566],{"alt":31,"src":86567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[851,86569,86570,86573,86576,86579],{},[854,86571,86572],{},"构造函数通过new的形式实例化得到实例对象",[854,86574,86575],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[854,86577,86578],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[854,86580,86581],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,86583,86584],{},[2212,86585],{"alt":31,"src":86586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,86588,86589],{},"题目梳理：",[14,86591,86592],{},[2212,86593],{"alt":31,"src":86594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[868,86596,86598],{"id":86597},"_4136-原型继承","4.13.6 原型继承",[14,86600,86601],{},[2212,86602],{"alt":31,"src":86603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,86605,86606],{},[2212,86607],{"alt":31,"src":86608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,86610,86611],{},[2212,86612],{"alt":31,"src":86613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,86615,86616],{},[2212,86617],{"alt":31,"src":86618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,86620,86621],{},[2212,86622],{"alt":31,"src":86623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,86625,86626],{},[2212,86627],{"alt":31,"src":86628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,86630,86631],{},[2212,86632],{"alt":31,"src":86633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,86635,86636],{},[2212,86637],{"alt":31,"src":86638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,86640,86641],{},"回顾：构造函数每次new得到对象都是不同的",[868,86643,86645],{"id":86644},"_4137-原型链","4.13.7 原型链",[14,86647,86648],{},[2212,86649],{"alt":31,"src":86650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,86652,86653],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,86655,86656],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,86658,86659],{},"大哥是Object",[14,86661,86662],{},[2212,86663],{"alt":31,"src":86664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,86666,86667],{},[2212,86668],{"alt":31,"src":86669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,86671,86672],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,86674,86675],{},"万物皆对象",[868,86677,86679],{"id":86678},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,86681,86682],{},"模态框",[14,86684,86685],{},"以后遇见这个效果直接使用这个就行",[14,86687,86688],{},[2212,86689],{"alt":31,"src":86690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,86692,86693],{},[2212,86694],{"alt":31,"src":86695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,86697,86698],{},[2212,86699],{"alt":31,"src":86700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,86702,86703],{},[2212,86704],{"alt":31,"src":86705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,86707,86708],{},"补充知识点：",[851,86710,86711],{},[854,86712,86713],{},"append()",[14,86715,86716],{},[2212,86717],{"alt":31,"src":86718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[26,86720,86722],{"className":51375,"code":86721,"language":51377,"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,86723,86724,86729,86734,86739,86743,86747,86751,86756,86761,86766,86770],{"__ignoreMap":31},[36,86725,86726],{"class":38,"line":39},[36,86727,86728],{"class":49},"append(param1)\n",[36,86730,86731],{"class":38,"line":46},[36,86732,86733],{"class":49},"append(param1, param2)\n",[36,86735,86736],{"class":38,"line":78},[36,86737,86738],{"class":49},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[36,86740,86741],{"class":38,"line":125},[36,86742,194],{"emptyLinePlaceholder":193},[36,86744,86745],{"class":38,"line":131},[36,86746,194],{"emptyLinePlaceholder":193},[36,86748,86749],{"class":38,"line":396},[36,86750,194],{"emptyLinePlaceholder":193},[36,86752,86753],{"class":38,"line":407},[36,86754,86755],{"class":49},"let div = document.createElement(\"div\");\n",[36,86757,86758],{"class":38,"line":2061},[36,86759,86760],{"class":49},"let p = document.createElement(\"p\");\n",[36,86762,86763],{"class":38,"line":2067},[36,86764,86765],{"class":49},"div.append(p);\n",[36,86767,86768],{"class":38,"line":2079},[36,86769,194],{"emptyLinePlaceholder":193},[36,86771,86772,86775,86777],{"class":38,"line":2362},[36,86773,86774],{"class":49},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[36,86776,14],{"class":52042},[36,86778,86779],{"class":49},"> ]\n",[851,86781,86782],{"start":46},[854,86783,86784],{},"remove()",[14,86786,86787],{},"自己删自己",[14,86789,86790],{},[2212,86791],{"alt":31,"src":86792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[26,86794,86796],{"className":51375,"code":86795,"language":51377,"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,86797,86798,86808,86822,86826,86834,86848,86868,86880,86888,86895,86907,86920,86955,86967,86978,86990,87002,87014,87041,87051,87055,87059,87068,87080,87094,87104,87116,87120,87124,87134,87145,87155,87165,87178,87191,87201,87205,87209,87218,87228,87240,87244,87248,87257,87267,87277,87289,87293,87297,87307,87323,87334,87344,87354,87366,87378,87390,87394,87398,87411,87422,87426,87434,87442,87446,87454,87474,87494,87502,87507,87533,87538,87543,87562,87567,87579,87584,87595,87605,87615,87620,87625,87629,87634,87639,87644,87664,87669,87689,87694,87708,87713,87718,87723,87739,87743,87748,87777,87782,87787,87792,87803,87807,87811,87815,87820,87845,87850,87875,87880,87889,87893,87898,87923,87927,87952,87956,87965,87969,87974,87992,88002,88006,88014,88022,88026],{"__ignoreMap":31},[36,86799,86800,86802,86804,86806],{"class":38,"line":39},[36,86801,52039],{"class":49},[36,86803,52043],{"class":52042},[36,86805,52046],{"class":2713},[36,86807,52049],{"class":49},[36,86809,86810,86812,86814,86816,86818,86820],{"class":38,"line":46},[36,86811,1789],{"class":49},[36,86813,51377],{"class":52042},[36,86815,52058],{"class":2713},[36,86817,54],{"class":49},[36,86819,52063],{"class":998},[36,86821,52049],{"class":49},[36,86823,86824],{"class":38,"line":78},[36,86825,194],{"emptyLinePlaceholder":193},[36,86827,86828,86830,86832],{"class":38,"line":125},[36,86829,1789],{"class":49},[36,86831,52076],{"class":52042},[36,86833,52049],{"class":49},[36,86835,86836,86838,86840,86842,86844,86846],{"class":38,"line":131},[36,86837,52886],{"class":49},[36,86839,52086],{"class":52042},[36,86841,52089],{"class":2713},[36,86843,54],{"class":49},[36,86845,52094],{"class":998},[36,86847,52049],{"class":49},[36,86849,86850,86852,86854,86856,86858,86860,86862,86864,86866],{"class":38,"line":396},[36,86851,52886],{"class":49},[36,86853,52086],{"class":52042},[36,86855,15664],{"class":2713},[36,86857,54],{"class":49},[36,86859,52133],{"class":998},[36,86861,52113],{"class":2713},[36,86863,54],{"class":49},[36,86865,52140],{"class":998},[36,86867,52049],{"class":49},[36,86869,86870,86872,86874,86876,86878],{"class":38,"line":407},[36,86871,52886],{"class":49},[36,86873,52149],{"class":52042},[36,86875,52152],{"class":49},[36,86877,52149],{"class":52042},[36,86879,52049],{"class":49},[36,86881,86882,86884,86886],{"class":38,"line":2061},[36,86883,52886],{"class":49},[36,86885,807],{"class":52042},[36,86887,52049],{"class":49},[36,86889,86890,86893],{"class":38,"line":2067},[36,86891,86892],{"class":2713},"    .modal",[36,86894,16316],{"class":49},[36,86896,86897,86899,86901,86903,86905],{"class":38,"line":2079},[36,86898,55513],{"class":60},[36,86900,52179],{"class":49},[36,86902,4722],{"class":60},[36,86904,52234],{"class":53},[36,86906,2040],{"class":49},[36,86908,86909,86912,86914,86916,86918],{"class":38,"line":2362},[36,86910,86911],{"class":60},"      min-height",[36,86913,52179],{"class":49},[36,86915,67],{"class":60},[36,86917,52234],{"class":53},[36,86919,2040],{"class":49},[36,86921,86922,86924,86926,86928,86930,86932,86934,86936,86938,86940,86942,86944,86946,86948,86950,86953],{"class":38,"line":2367},[36,86923,79492],{"class":60},[36,86925,52179],{"class":49},[36,86927,643],{"class":60},[36,86929,4842],{"class":60},[36,86931,2788],{"class":60},[36,86933,52234],{"class":53},[36,86935,79509],{"class":60},[36,86937,901],{"class":49},[36,86939,643],{"class":60},[36,86941,154],{"class":49},[36,86943,643],{"class":60},[36,86945,154],{"class":49},[36,86947,643],{"class":60},[36,86949,154],{"class":49},[36,86951,86952],{"class":60},"0.1",[36,86954,3468],{"class":49},[36,86956,86957,86959,86961,86963,86965],{"class":38,"line":2373},[36,86958,55876],{"class":60},[36,86960,52179],{"class":49},[36,86962,186],{"class":60},[36,86964,52234],{"class":53},[36,86966,2040],{"class":49},[36,86968,86969,86971,86973,86976],{"class":38,"line":2378},[36,86970,55501],{"class":60},[36,86972,52179],{"class":49},[36,86974,86975],{"class":60},"fixed",[36,86977,2040],{"class":49},[36,86979,86980,86983,86985,86988],{"class":38,"line":2392},[36,86981,86982],{"class":60},"      z-index",[36,86984,52179],{"class":49},[36,86986,86987],{"class":60},"999",[36,86989,2040],{"class":49},[36,86991,86992,86994,86996,86998,87000],{"class":38,"line":2397},[36,86993,55580],{"class":60},[36,86995,52179],{"class":49},[36,86997,1538],{"class":60},[36,86999,1214],{"class":53},[36,87001,2040],{"class":49},[36,87003,87004,87006,87008,87010,87012],{"class":38,"line":2403},[36,87005,55689],{"class":60},[36,87007,52179],{"class":49},[36,87009,1538],{"class":60},[36,87011,1214],{"class":53},[36,87013,2040],{"class":49},[36,87015,87016,87018,87020,87022,87024,87027,87029,87031,87033,87035,87037,87039],{"class":38,"line":2424},[36,87017,79533],{"class":60},[36,87019,52179],{"class":49},[36,87021,79538],{"class":60},[36,87023,901],{"class":49},[36,87025,87026],{"class":60},"-50",[36,87028,1214],{"class":53},[36,87030,154],{"class":49},[36,87032,87026],{"class":60},[36,87034,1214],{"class":53},[36,87036,154],{"class":49},[36,87038,643],{"class":60},[36,87040,3468],{"class":49},[36,87042,87043,87045,87047,87049],{"class":38,"line":2429},[36,87044,55626],{"class":60},[36,87046,52179],{"class":49},[36,87048,61584],{"class":60},[36,87050,2040],{"class":49},[36,87052,87053],{"class":38,"line":2443},[36,87054,2937],{"class":49},[36,87056,87057],{"class":38,"line":2448},[36,87058,194],{"emptyLinePlaceholder":193},[36,87060,87061,87063,87066],{"class":38,"line":2477},[36,87062,86892],{"class":2713},[36,87064,87065],{"class":2713}," .header",[36,87067,16316],{"class":49},[36,87069,87070,87072,87074,87076,87078],{"class":38,"line":2482},[36,87071,58101],{"class":60},[36,87073,52179],{"class":49},[36,87075,1286],{"class":60},[36,87077,52234],{"class":53},[36,87079,2040],{"class":49},[36,87081,87082,87084,87086,87088,87090,87092],{"class":38,"line":2499},[36,87083,55437],{"class":60},[36,87085,52179],{"class":49},[36,87087,643],{"class":60},[36,87089,2788],{"class":60},[36,87091,52234],{"class":53},[36,87093,2040],{"class":49},[36,87095,87096,87098,87100,87102],{"class":38,"line":2504},[36,87097,55501],{"class":60},[36,87099,52179],{"class":49},[36,87101,55506],{"class":60},[36,87103,2040],{"class":49},[36,87105,87106,87108,87110,87112,87114],{"class":38,"line":2509},[36,87107,55664],{"class":60},[36,87109,52179],{"class":49},[36,87111,72],{"class":60},[36,87113,52234],{"class":53},[36,87115,2040],{"class":49},[36,87117,87118],{"class":38,"line":2514},[36,87119,2937],{"class":49},[36,87121,87122],{"class":38,"line":2528},[36,87123,194],{"emptyLinePlaceholder":193},[36,87125,87126,87128,87130,87132],{"class":38,"line":2533},[36,87127,86892],{"class":2713},[36,87129,87065],{"class":2713},[36,87131,3781],{"class":52042},[36,87133,16316],{"class":49},[36,87135,87136,87139,87141,87143],{"class":38,"line":3326},[36,87137,87138],{"class":60},"      font-style",[36,87140,52179],{"class":49},[36,87142,64583],{"class":60},[36,87144,2040],{"class":49},[36,87146,87147,87149,87151,87153],{"class":38,"line":3340},[36,87148,58158],{"class":60},[36,87150,52179],{"class":49},[36,87152,62812],{"class":60},[36,87154,2040],{"class":49},[36,87156,87157,87159,87161,87163],{"class":38,"line":3348},[36,87158,55501],{"class":60},[36,87160,52179],{"class":49},[36,87162,55573],{"class":60},[36,87164,2040],{"class":49},[36,87166,87167,87170,87172,87174,87176],{"class":38,"line":3353},[36,87168,87169],{"class":60},"      right",[36,87171,52179],{"class":49},[36,87173,1457],{"class":60},[36,87175,52234],{"class":53},[36,87177,2040],{"class":49},[36,87179,87180,87182,87184,87187,87189],{"class":38,"line":3359},[36,87181,55689],{"class":60},[36,87183,52179],{"class":49},[36,87185,87186],{"class":60},"-2",[36,87188,52234],{"class":53},[36,87190,2040],{"class":49},[36,87192,87193,87195,87197,87199],{"class":38,"line":3365},[36,87194,62767],{"class":60},[36,87196,52179],{"class":49},[36,87198,62772],{"class":60},[36,87200,2040],{"class":49},[36,87202,87203],{"class":38,"line":3370},[36,87204,2937],{"class":49},[36,87206,87207],{"class":38,"line":8695},[36,87208,194],{"emptyLinePlaceholder":193},[36,87210,87211,87213,87216],{"class":38,"line":8719},[36,87212,86892],{"class":2713},[36,87214,87215],{"class":2713}," .body",[36,87217,16316],{"class":49},[36,87219,87220,87222,87224,87226],{"class":38,"line":8724},[36,87221,58028],{"class":60},[36,87223,52179],{"class":49},[36,87225,52334],{"class":60},[36,87227,2040],{"class":49},[36,87229,87230,87232,87234,87236,87238],{"class":38,"line":8730},[36,87231,55437],{"class":60},[36,87233,52179],{"class":49},[36,87235,332],{"class":60},[36,87237,52234],{"class":53},[36,87239,2040],{"class":49},[36,87241,87242],{"class":38,"line":8757},[36,87243,2937],{"class":49},[36,87245,87246],{"class":38,"line":8762},[36,87247,194],{"emptyLinePlaceholder":193},[36,87249,87250,87252,87255],{"class":38,"line":8768},[36,87251,86892],{"class":2713},[36,87253,87254],{"class":2713}," .footer",[36,87256,16316],{"class":49},[36,87258,87259,87261,87263,87265],{"class":38,"line":8780},[36,87260,55751],{"class":60},[36,87262,52179],{"class":49},[36,87264,52219],{"class":60},[36,87266,2040],{"class":49},[36,87268,87269,87271,87273,87275],{"class":38,"line":8792},[36,87270,55762],{"class":60},[36,87272,52179],{"class":49},[36,87274,52322],{"class":60},[36,87276,2040],{"class":49},[36,87278,87279,87281,87283,87285,87287],{"class":38,"line":8804},[36,87280,55437],{"class":60},[36,87282,52179],{"class":49},[36,87284,332],{"class":60},[36,87286,52234],{"class":53},[36,87288,2040],{"class":49},[36,87290,87291],{"class":38,"line":10463},[36,87292,2937],{"class":49},[36,87294,87295],{"class":38,"line":10488},[36,87296,194],{"emptyLinePlaceholder":193},[36,87298,87299,87301,87303,87305],{"class":38,"line":10511},[36,87300,86892],{"class":2713},[36,87302,87254],{"class":2713},[36,87304,2148],{"class":52042},[36,87306,16316],{"class":49},[36,87308,87309,87311,87313,87315,87317,87319,87321],{"class":38,"line":10535},[36,87310,55437],{"class":60},[36,87312,52179],{"class":49},[36,87314,162],{"class":60},[36,87316,52234],{"class":53},[36,87318,2833],{"class":60},[36,87320,52234],{"class":53},[36,87322,2040],{"class":49},[36,87324,87325,87327,87329,87332],{"class":38,"line":10540},[36,87326,62463],{"class":60},[36,87328,52179],{"class":49},[36,87330,87331],{"class":60},"#ccc",[36,87333,2040],{"class":49},[36,87335,87336,87338,87340,87342],{"class":38,"line":10545},[36,87337,64712],{"class":60},[36,87339,52179],{"class":49},[36,87341,55479],{"class":60},[36,87343,2040],{"class":49},[36,87345,87346,87348,87350,87352],{"class":38,"line":10550},[36,87347,58158],{"class":60},[36,87349,52179],{"class":49},[36,87351,61584],{"class":60},[36,87353,2040],{"class":49},[36,87355,87356,87358,87360,87362,87364],{"class":38,"line":10559},[36,87357,55876],{"class":60},[36,87359,52179],{"class":49},[36,87361,181],{"class":60},[36,87363,52234],{"class":53},[36,87365,2040],{"class":49},[36,87367,87368,87370,87372,87374,87376],{"class":38,"line":10564},[36,87369,62492],{"class":60},[36,87371,52179],{"class":49},[36,87373,332],{"class":60},[36,87375,52234],{"class":53},[36,87377,2040],{"class":49},[36,87379,87380,87382,87384,87386,87388],{"class":38,"line":10570},[36,87381,55664],{"class":60},[36,87383,52179],{"class":49},[36,87385,1431],{"class":60},[36,87387,52234],{"class":53},[36,87389,2040],{"class":49},[36,87391,87392],{"class":38,"line":10591},[36,87393,2937],{"class":49},[36,87395,87396],{"class":38,"line":10597},[36,87397,194],{"emptyLinePlaceholder":193},[36,87399,87400,87402,87404,87406,87409],{"class":38,"line":10611},[36,87401,86892],{"class":2713},[36,87403,87254],{"class":2713},[36,87405,2148],{"class":52042},[36,87407,87408],{"class":2713},".submit",[36,87410,16316],{"class":49},[36,87412,87413,87415,87417,87420],{"class":38,"line":10617},[36,87414,55626],{"class":60},[36,87416,52179],{"class":49},[36,87418,87419],{"class":60},"#369",[36,87421,2040],{"class":49},[36,87423,87424],{"class":38,"line":10644},[36,87425,2937],{"class":49},[36,87427,87428,87430,87432],{"class":38,"line":10653},[36,87429,53159],{"class":49},[36,87431,807],{"class":52042},[36,87433,52049],{"class":49},[36,87435,87436,87438,87440],{"class":38,"line":10659},[36,87437,52527],{"class":49},[36,87439,52076],{"class":52042},[36,87441,52049],{"class":49},[36,87443,87444],{"class":38,"line":10667},[36,87445,194],{"emptyLinePlaceholder":193},[36,87447,87448,87450,87452],{"class":38,"line":10672},[36,87449,1789],{"class":49},[36,87451,52542],{"class":52042},[36,87453,52049],{"class":49},[36,87455,87456,87458,87460,87462,87464,87467,87470,87472],{"class":38,"line":17348},[36,87457,52886],{"class":49},[36,87459,54629],{"class":52042},[36,87461,15703],{"class":2713},[36,87463,54],{"class":49},[36,87465,87466],{"class":998},"\"delete\"",[36,87468,87469],{"class":49},">删除\u003C\u002F",[36,87471,54629],{"class":52042},[36,87473,52049],{"class":49},[36,87475,87476,87478,87480,87482,87484,87487,87490,87492],{"class":38,"line":17354},[36,87477,52886],{"class":49},[36,87479,54629],{"class":52042},[36,87481,15703],{"class":2713},[36,87483,54],{"class":49},[36,87485,87486],{"class":998},"\"login\"",[36,87488,87489],{"class":49},">登录\u003C\u002F",[36,87491,54629],{"class":52042},[36,87493,52049],{"class":49},[36,87495,87496,87498,87500],{"class":38,"line":17377},[36,87497,52886],{"class":49},[36,87499,52555],{"class":52042},[36,87501,52049],{"class":49},[36,87503,87504],{"class":38,"line":17383},[36,87505,87506],{"class":42},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[36,87508,87509,87511,87514,87516,87518,87520,87522,87524,87527,87529,87531],{"class":38,"line":17406},[36,87510,70826],{"class":53},[36,87512,87513],{"class":2713}," Modal",[36,87515,901],{"class":49},[36,87517,52149],{"class":416},[36,87519,14308],{"class":53},[36,87521,70672],{"class":998},[36,87523,154],{"class":49},[36,87525,87526],{"class":416},"message",[36,87528,14308],{"class":53},[36,87530,70672],{"class":998},[36,87532,13186],{"class":49},[36,87534,87535],{"class":38,"line":17420},[36,87536,87537],{"class":42},"      \u002F\u002F 创建Model 模态框盒子\n",[36,87539,87540],{"class":38,"line":17440},[36,87541,87542],{"class":42},"      \u002F\u002F 1.1 创建div标签\n",[36,87544,87545,87547,87550,87552,87554,87556,87558,87560],{"class":38,"line":17446},[36,87546,70793],{"class":60},[36,87548,87549],{"class":49},".modalBox ",[36,87551,54],{"class":53},[36,87553,55138],{"class":49},[36,87555,70893],{"class":2713},[36,87557,901],{"class":49},[36,87559,82673],{"class":998},[36,87561,75],{"class":49},[36,87563,87564],{"class":38,"line":17457},[36,87565,87566],{"class":42},"      \u002F\u002F 1.2 给div 添加类名为model\n",[36,87568,87569,87571,87574,87576],{"class":38,"line":17480},[36,87570,70793],{"class":60},[36,87572,87573],{"class":49},".modalBox.className ",[36,87575,54],{"class":53},[36,87577,87578],{"class":998}," 'modal'\n",[36,87580,87581],{"class":38,"line":17502},[36,87582,87583],{"class":42},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[36,87585,87586,87588,87591,87593],{"class":38,"line":17507},[36,87587,70793],{"class":60},[36,87589,87590],{"class":49},".modalBox.innerHTML ",[36,87592,54],{"class":53},[36,87594,70910],{"class":998},[36,87596,87597,87600,87602],{"class":38,"line":17513},[36,87598,87599],{"class":998},"        \u003Cdiv class=\"header\">${",[36,87601,52149],{"class":49},[36,87603,87604],{"class":998},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[36,87606,87607,87610,87612],{"class":38,"line":17527},[36,87608,87609],{"class":998},"        \u003Cdiv class=\"body\">${",[36,87611,87526],{"class":49},[36,87613,87614],{"class":998},"}\u003C\u002Fdiv>\n",[36,87616,87617],{"class":38,"line":17540},[36,87618,87619],{"class":998},"      `\n",[36,87621,87622],{"class":38,"line":17545},[36,87623,87624],{"class":42},"      \u002F\u002F console.log(this.modalBox)\n",[36,87626,87627],{"class":38,"line":17559},[36,87628,2937],{"class":49},[36,87630,87631],{"class":38,"line":17564},[36,87632,87633],{"class":42},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[36,87635,87636],{"class":38,"line":17570},[36,87637,87638],{"class":42},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[36,87640,87641],{"class":38,"line":17575},[36,87642,87643],{"class":42},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[36,87645,87646,87649,87651,87653,87655,87658,87660,87662],{"class":38,"line":17589},[36,87647,87648],{"class":60},"    Modal",[36,87650,1440],{"class":49},[36,87652,86321],{"class":60},[36,87654,1440],{"class":49},[36,87656,87657],{"class":2713},"open",[36,87659,14308],{"class":53},[36,87661,59660],{"class":53},[36,87663,55194],{"class":49},[36,87665,87666],{"class":38,"line":17594},[36,87667,87668],{"class":42},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[36,87670,87671,87673,87676,87678,87680,87682,87684,87687],{"class":38,"line":17599},[36,87672,58970],{"class":53},[36,87674,87675],{"class":60}," box",[36,87677,14308],{"class":53},[36,87679,55138],{"class":49},[36,87681,55141],{"class":2713},[36,87683,901],{"class":49},[36,87685,87686],{"class":998},"'.modal'",[36,87688,75],{"class":49},[36,87690,87691],{"class":38,"line":17613},[36,87692,87693],{"class":42},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[36,87695,87696,87699,87701,87704,87706],{"class":38,"line":17625},[36,87697,87698],{"class":49},"      box ",[36,87700,2465],{"class":53},[36,87702,87703],{"class":49}," box.",[36,87705,57748],{"class":2713},[36,87707,2726],{"class":49},[36,87709,87710],{"class":38,"line":17630},[36,87711,87712],{"class":42},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[36,87714,87715],{"class":38,"line":17643},[36,87716,87717],{"class":42},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[36,87719,87720],{"class":38,"line":17648},[36,87721,87722],{"class":42},"      \u002F\u002F append可以增加对象\n",[36,87724,87725,87728,87731,87733,87736],{"class":38,"line":17653},[36,87726,87727],{"class":49},"      document.body.",[36,87729,87730],{"class":2713},"append",[36,87732,901],{"class":49},[36,87734,87735],{"class":60},"this",[36,87737,87738],{"class":49},".modalBox)\n",[36,87740,87741],{"class":38,"line":17658},[36,87742,194],{"emptyLinePlaceholder":193},[36,87744,87745],{"class":38,"line":17671},[36,87746,87747],{"class":42},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[36,87749,87750,87752,87755,87757,87759,87762,87764,87766,87768,87770,87773,87775],{"class":38,"line":17676},[36,87751,70793],{"class":60},[36,87753,87754],{"class":49},".modalBox.",[36,87756,55141],{"class":2713},[36,87758,901],{"class":49},[36,87760,87761],{"class":998},"'i'",[36,87763,31568],{"class":49},[36,87765,58555],{"class":2713},[36,87767,901],{"class":49},[36,87769,58560],{"class":998},[36,87771,87772],{"class":49},", () ",[36,87774,85464],{"class":53},[36,87776,16316],{"class":49},[36,87778,87779],{"class":38,"line":33375},[36,87780,87781],{"class":42},"        \u002F\u002F 这个地方需要用到箭头函数\n",[36,87783,87784],{"class":38,"line":33381},[36,87785,87786],{"class":42},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[36,87788,87789],{"class":38,"line":33387},[36,87790,87791],{"class":42},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[36,87793,87794,87796,87798,87801],{"class":38,"line":33393},[36,87795,65468],{"class":60},[36,87797,1440],{"class":49},[36,87799,87800],{"class":2713},"close",[36,87802,2726],{"class":49},[36,87804,87805],{"class":38,"line":33399},[36,87806,65557],{"class":49},[36,87808,87809],{"class":38,"line":33410},[36,87810,2937],{"class":49},[36,87812,87813],{"class":38,"line":33416},[36,87814,194],{"emptyLinePlaceholder":193},[36,87816,87817],{"class":38,"line":33436},[36,87818,87819],{"class":42},"    \u002F\u002F 测试一下 点击 删除按钮\n",[36,87821,87822,87824,87826,87828,87831,87833,87835,87837,87839,87841,87843],{"class":38,"line":33442},[36,87823,53149],{"class":49},[36,87825,55141],{"class":2713},[36,87827,901],{"class":49},[36,87829,87830],{"class":998},"'#delete'",[36,87832,31568],{"class":49},[36,87834,58555],{"class":2713},[36,87836,901],{"class":49},[36,87838,58560],{"class":998},[36,87840,87772],{"class":49},[36,87842,85464],{"class":53},[36,87844,16316],{"class":49},[36,87846,87847],{"class":38,"line":33453},[36,87848,87849],{"class":42},"      \u002F\u002F 先调用Model构造函数\n",[36,87851,87852,87854,87857,87859,87861,87863,87865,87868,87870,87873],{"class":38,"line":33459},[36,87853,58970],{"class":53},[36,87855,87856],{"class":60}," del",[36,87858,14308],{"class":53},[36,87860,12323],{"class":53},[36,87862,87513],{"class":2713},[36,87864,901],{"class":49},[36,87866,87867],{"class":998},"'温馨的提示'",[36,87869,154],{"class":49},[36,87871,87872],{"class":998},"'您没有删除权限操作'",[36,87874,75],{"class":49},[36,87876,87877],{"class":38,"line":33465},[36,87878,87879],{"class":42},"      \u002F\u002F 实例对象调用open方法\n",[36,87881,87882,87885,87887],{"class":38,"line":33471},[36,87883,87884],{"class":49},"      del.",[36,87886,87657],{"class":2713},[36,87888,2726],{"class":49},[36,87890,87891],{"class":38,"line":33477},[36,87892,34203],{"class":49},[36,87894,87895],{"class":38,"line":33483},[36,87896,87897],{"class":42},"    \u002F\u002F 测试一下 点击 登录按钮\n",[36,87899,87900,87902,87904,87906,87909,87911,87913,87915,87917,87919,87921],{"class":38,"line":33489},[36,87901,53149],{"class":49},[36,87903,55141],{"class":2713},[36,87905,901],{"class":49},[36,87907,87908],{"class":998},"'#login'",[36,87910,31568],{"class":49},[36,87912,58555],{"class":2713},[36,87914,901],{"class":49},[36,87916,58560],{"class":998},[36,87918,87772],{"class":49},[36,87920,85464],{"class":53},[36,87922,16316],{"class":49},[36,87924,87925],{"class":38,"line":33495},[36,87926,87849],{"class":42},[36,87928,87929,87931,87934,87936,87938,87940,87942,87945,87947,87950],{"class":38,"line":33515},[36,87930,58970],{"class":53},[36,87932,87933],{"class":60}," log",[36,87935,14308],{"class":53},[36,87937,12323],{"class":53},[36,87939,87513],{"class":2713},[36,87941,901],{"class":49},[36,87943,87944],{"class":998},"'友情提示'",[36,87946,154],{"class":49},[36,87948,87949],{"class":998},"'您还没有登录呢'",[36,87951,75],{"class":49},[36,87953,87954],{"class":38,"line":33521},[36,87955,87879],{"class":42},[36,87957,87958,87961,87963],{"class":38,"line":33537},[36,87959,87960],{"class":49},"      log.",[36,87962,87657],{"class":2713},[36,87964,2726],{"class":49},[36,87966,87967],{"class":38,"line":33543},[36,87968,34203],{"class":49},[36,87970,87971],{"class":38,"line":33557},[36,87972,87973],{"class":42},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[36,87975,87976,87978,87980,87982,87984,87986,87988,87990],{"class":38,"line":33563},[36,87977,87648],{"class":60},[36,87979,1440],{"class":49},[36,87981,86321],{"class":60},[36,87983,1440],{"class":49},[36,87985,87800],{"class":2713},[36,87987,14308],{"class":53},[36,87989,59660],{"class":53},[36,87991,55194],{"class":49},[36,87993,87994,87996,87998,88000],{"class":38,"line":33578},[36,87995,70793],{"class":60},[36,87997,87754],{"class":49},[36,87999,57748],{"class":2713},[36,88001,2726],{"class":49},[36,88003,88004],{"class":38,"line":33584},[36,88005,2937],{"class":49},[36,88007,88008,88010,88012],{"class":38,"line":33593},[36,88009,53159],{"class":49},[36,88011,52555],{"class":52042},[36,88013,52049],{"class":49},[36,88015,88016,88018,88020],{"class":38,"line":33599},[36,88017,52527],{"class":49},[36,88019,52542],{"class":52042},[36,88021,52049],{"class":49},[36,88023,88024],{"class":38,"line":33608},[36,88025,194],{"emptyLinePlaceholder":193},[36,88027,88028,88030,88032],{"class":38,"line":33614},[36,88029,52527],{"class":49},[36,88031,51377],{"class":52042},[36,88033,52049],{"class":49},[14,88035,88036],{},[2212,88037],{"alt":31,"src":88038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[21,88040,88042],{"id":88041},"_414-深浅拷贝","4.14 深浅拷贝",[868,88044,88046],{"id":88045},"_4141-浅拷贝","4.14.1 浅拷贝",[14,88048,88049],{},[2212,88050],{"alt":31,"src":88051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,88053,88054],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,88056,88057],{},[2212,88058],{"alt":31,"src":88059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,88061,88062],{},[2212,88063],{"alt":31,"src":88064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,88066,88067],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,88069,88070],{},[2212,88071],{"alt":31,"src":88072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,88074,12077],{},[14,88076,88077],{},[2212,88078],{"alt":31,"src":88079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[868,88081,88083],{"id":88082},"_4142-深拷贝","4.14.2 深拷贝",[14,88085,88086],{},"深拷贝：拷贝的是对象，不是地址",[14,88088,88089],{},"常用的三种方法：",[851,88091,88092,88095,88098],{},[854,88093,88094],{},"通过递归实现深拷贝",[854,88096,88097],{},"lodash\u002FcloneDeep",[854,88099,88100],{},"通过JSON.stringify()实现",[22742,88102,88104],{"id":88103},"_41421-递归函数","4.14.2.1 递归函数",[14,88106,88107],{},[2212,88108],{"alt":31,"src":88109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[851,88111,88112],{},[854,88113,88114],{},"死递归占溢出：",[26,88116,88118],{"className":53809,"code":88117,"language":53811,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,88119,88120,88128,88136,88140,88145,88149,88154,88162],{"__ignoreMap":31},[36,88121,88122,88124,88126],{"class":38,"line":39},[36,88123,1789],{"class":49},[36,88125,52542],{"class":52042},[36,88127,52049],{"class":49},[36,88129,88130,88132,88134],{"class":38,"line":46},[36,88131,52886],{"class":49},[36,88133,52555],{"class":52042},[36,88135,52049],{"class":49},[36,88137,88138],{"class":38,"line":78},[36,88139,77885],{"class":49},[36,88141,88142],{"class":38,"line":125},[36,88143,88144],{"class":49},"      fn()\n",[36,88146,88147],{"class":38,"line":131},[36,88148,2937],{"class":49},[36,88150,88151],{"class":38,"line":396},[36,88152,88153],{"class":49},"    fn()\n",[36,88155,88156,88158,88160],{"class":38,"line":407},[36,88157,53159],{"class":49},[36,88159,52555],{"class":52042},[36,88161,52049],{"class":49},[36,88163,88164,88166,88168],{"class":38,"line":2061},[36,88165,52527],{"class":49},[36,88167,52542],{"class":52042},[36,88169,52049],{"class":49},[851,88171,88172],{"start":46},[854,88173,88174],{},"递归函数要加判断条件：",[14,88176,88177],{},[2212,88178],{"alt":31,"src":88179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[851,88181,88182],{"start":78},[854,88183,88184],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[26,88186,88188],{"className":51375,"code":88187,"language":51377,"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,88189,88190,88200,88214,88218,88226,88240,88260,88272,88280,88284,88292,88304,88312,88320,88345,88357,88361,88368,88376,88384,88388],{"__ignoreMap":31},[36,88191,88192,88194,88196,88198],{"class":38,"line":39},[36,88193,52039],{"class":49},[36,88195,52043],{"class":52042},[36,88197,52046],{"class":2713},[36,88199,52049],{"class":49},[36,88201,88202,88204,88206,88208,88210,88212],{"class":38,"line":46},[36,88203,1789],{"class":49},[36,88205,51377],{"class":52042},[36,88207,52058],{"class":2713},[36,88209,54],{"class":49},[36,88211,52063],{"class":998},[36,88213,52049],{"class":49},[36,88215,88216],{"class":38,"line":78},[36,88217,194],{"emptyLinePlaceholder":193},[36,88219,88220,88222,88224],{"class":38,"line":125},[36,88221,1789],{"class":49},[36,88223,52076],{"class":52042},[36,88225,52049],{"class":49},[36,88227,88228,88230,88232,88234,88236,88238],{"class":38,"line":131},[36,88229,52886],{"class":49},[36,88231,52086],{"class":52042},[36,88233,52089],{"class":2713},[36,88235,54],{"class":49},[36,88237,52094],{"class":998},[36,88239,52049],{"class":49},[36,88241,88242,88244,88246,88248,88250,88252,88254,88256,88258],{"class":38,"line":396},[36,88243,52886],{"class":49},[36,88245,52086],{"class":52042},[36,88247,15664],{"class":2713},[36,88249,54],{"class":49},[36,88251,52133],{"class":998},[36,88253,52113],{"class":2713},[36,88255,54],{"class":49},[36,88257,52140],{"class":998},[36,88259,52049],{"class":49},[36,88261,88262,88264,88266,88268,88270],{"class":38,"line":407},[36,88263,52886],{"class":49},[36,88265,52149],{"class":52042},[36,88267,52152],{"class":49},[36,88269,52149],{"class":52042},[36,88271,52049],{"class":49},[36,88273,88274,88276,88278],{"class":38,"line":2061},[36,88275,52527],{"class":49},[36,88277,52076],{"class":52042},[36,88279,52049],{"class":49},[36,88281,88282],{"class":38,"line":2067},[36,88283,194],{"emptyLinePlaceholder":193},[36,88285,88286,88288,88290],{"class":38,"line":2079},[36,88287,1789],{"class":49},[36,88289,52542],{"class":52042},[36,88291,52049],{"class":49},[36,88293,88294,88296,88298,88300,88302],{"class":38,"line":2362},[36,88295,52886],{"class":49},[36,88297,52353],{"class":52042},[36,88299,56056],{"class":49},[36,88301,52353],{"class":52042},[36,88303,52049],{"class":49},[36,88305,88306,88308,88310],{"class":38,"line":2367},[36,88307,52886],{"class":49},[36,88309,52555],{"class":52042},[36,88311,52049],{"class":49},[36,88313,88314,88316,88318],{"class":38,"line":2373},[36,88315,70826],{"class":53},[36,88317,74515],{"class":2713},[36,88319,11600],{"class":49},[36,88321,88322,88324,88326,88328,88330,88332,88334,88336,88338,88340,88343],{"class":38,"line":2378},[36,88323,56513],{"class":49},[36,88325,55141],{"class":2713},[36,88327,901],{"class":49},[36,88329,82673],{"class":998},[36,88331,74991],{"class":49},[36,88333,54],{"class":53},[36,88335,12323],{"class":53},[36,88337,74531],{"class":2713},[36,88339,18005],{"class":49},[36,88341,88342],{"class":2713},"toLocaleString",[36,88344,2726],{"class":49},[36,88346,88347,88350,88353,88355],{"class":38,"line":2392},[36,88348,88349],{"class":2713},"      setTimeout",[36,88351,88352],{"class":49},"(getTime, ",[36,88354,7157],{"class":60},[36,88356,75],{"class":49},[36,88358,88359],{"class":38,"line":2397},[36,88360,2937],{"class":49},[36,88362,88363,88366],{"class":38,"line":2403},[36,88364,88365],{"class":2713},"    getTime",[36,88367,2726],{"class":49},[36,88369,88370,88372,88374],{"class":38,"line":2424},[36,88371,53159],{"class":49},[36,88373,52555],{"class":52042},[36,88375,52049],{"class":49},[36,88377,88378,88380,88382],{"class":38,"line":2429},[36,88379,52527],{"class":49},[36,88381,52542],{"class":52042},[36,88383,52049],{"class":49},[36,88385,88386],{"class":38,"line":2443},[36,88387,194],{"emptyLinePlaceholder":193},[36,88389,88390,88392,88394],{"class":38,"line":2448},[36,88391,52527],{"class":49},[36,88393,51377],{"class":52042},[36,88395,52049],{"class":49},[14,88397,88398],{},[2212,88399],{"alt":31,"src":88400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[851,88402,88403],{"start":125},[854,88404,88094],{},[14,88406,88407],{},[2212,88408],{"alt":31,"src":88409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,88411,88412],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,88414,39931],{},[14,88416,88417],{},"这个是简易版的递归函数深拷贝",[14,88419,88420],{},"一定要注意先数组再对象，因为万物皆可对象",[26,88422,88424],{"className":51375,"code":88423,"language":51377,"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,88425,88426,88436,88450,88454,88462,88476,88496,88508,88516,88520,88528,88536,88546,88555,88563,88579,88583,88591,88595,88599,88611,88616,88635,88651,88656,88661,88666,88681,88686,88691,88700,88708,88725,88733,88739,88747,88752,88757,88766,88770,88774,88778,88789,88798,88808,88822,88832,88840,88848,88856,88860],{"__ignoreMap":31},[36,88427,88428,88430,88432,88434],{"class":38,"line":39},[36,88429,52039],{"class":49},[36,88431,52043],{"class":52042},[36,88433,52046],{"class":2713},[36,88435,52049],{"class":49},[36,88437,88438,88440,88442,88444,88446,88448],{"class":38,"line":46},[36,88439,1789],{"class":49},[36,88441,51377],{"class":52042},[36,88443,52058],{"class":2713},[36,88445,54],{"class":49},[36,88447,52063],{"class":998},[36,88449,52049],{"class":49},[36,88451,88452],{"class":38,"line":78},[36,88453,194],{"emptyLinePlaceholder":193},[36,88455,88456,88458,88460],{"class":38,"line":125},[36,88457,1789],{"class":49},[36,88459,52076],{"class":52042},[36,88461,52049],{"class":49},[36,88463,88464,88466,88468,88470,88472,88474],{"class":38,"line":131},[36,88465,52886],{"class":49},[36,88467,52086],{"class":52042},[36,88469,52089],{"class":2713},[36,88471,54],{"class":49},[36,88473,52094],{"class":998},[36,88475,52049],{"class":49},[36,88477,88478,88480,88482,88484,88486,88488,88490,88492,88494],{"class":38,"line":396},[36,88479,52886],{"class":49},[36,88481,52086],{"class":52042},[36,88483,15664],{"class":2713},[36,88485,54],{"class":49},[36,88487,52133],{"class":998},[36,88489,52113],{"class":2713},[36,88491,54],{"class":49},[36,88493,52140],{"class":998},[36,88495,52049],{"class":49},[36,88497,88498,88500,88502,88504,88506],{"class":38,"line":407},[36,88499,52886],{"class":49},[36,88501,52149],{"class":52042},[36,88503,52152],{"class":49},[36,88505,52149],{"class":52042},[36,88507,52049],{"class":49},[36,88509,88510,88512,88514],{"class":38,"line":2061},[36,88511,52527],{"class":49},[36,88513,52076],{"class":52042},[36,88515,52049],{"class":49},[36,88517,88518],{"class":38,"line":2067},[36,88519,194],{"emptyLinePlaceholder":193},[36,88521,88522,88524,88526],{"class":38,"line":2079},[36,88523,1789],{"class":49},[36,88525,52542],{"class":52042},[36,88527,52049],{"class":49},[36,88529,88530,88532,88534],{"class":38,"line":2362},[36,88531,52886],{"class":49},[36,88533,52555],{"class":52042},[36,88535,52049],{"class":49},[36,88537,88538,88540,88542,88544],{"class":38,"line":2367},[36,88539,11966],{"class":53},[36,88541,70713],{"class":60},[36,88543,14308],{"class":53},[36,88545,16316],{"class":49},[36,88547,88548,88550,88553],{"class":38,"line":2373},[36,88549,72358],{"class":49},[36,88551,88552],{"class":998},"'pink'",[36,88554,32208],{"class":49},[36,88556,88557,88559,88561],{"class":38,"line":2378},[36,88558,72368],{"class":49},[36,88560,1532],{"class":60},[36,88562,32208],{"class":49},[36,88564,88565,88568,88571,88573,88576],{"class":38,"line":2392},[36,88566,88567],{"class":49},"      hobby: [",[36,88569,88570],{"class":998},"'乒乓球'",[36,88572,154],{"class":49},[36,88574,88575],{"class":998},"'足球'",[36,88577,88578],{"class":49},"],\n",[36,88580,88581],{"class":38,"line":2397},[36,88582,78614],{"class":49},[36,88584,88585,88588],{"class":38,"line":2403},[36,88586,88587],{"class":49},"        baby: ",[36,88589,88590],{"class":998},"'小pink'\n",[36,88592,88593],{"class":38,"line":2424},[36,88594,53140],{"class":49},[36,88596,88597],{"class":38,"line":2429},[36,88598,2937],{"class":49},[36,88600,88601,88603,88606,88608],{"class":38,"line":2443},[36,88602,11966],{"class":53},[36,88604,88605],{"class":60}," o",[36,88607,14308],{"class":53},[36,88609,88610],{"class":49}," {}\n",[36,88612,88613],{"class":38,"line":2448},[36,88614,88615],{"class":42},"    \u002F\u002F 拷贝函数\n",[36,88617,88618,88620,88623,88625,88628,88630,88633],{"class":38,"line":2477},[36,88619,70826],{"class":53},[36,88621,88622],{"class":2713}," deepCopy",[36,88624,901],{"class":49},[36,88626,88627],{"class":416},"newObj",[36,88629,154],{"class":49},[36,88631,88632],{"class":416},"oldObj",[36,88634,13186],{"class":49},[36,88636,88637,88639,88641,88643,88646,88648],{"class":38,"line":2482},[36,88638,53026],{"class":53},[36,88640,2408],{"class":49},[36,88642,52589],{"class":53},[36,88644,88645],{"class":49}," k ",[36,88647,26788],{"class":53},[36,88649,88650],{"class":49}," oldObj) {\n",[36,88652,88653],{"class":38,"line":2499},[36,88654,88655],{"class":42},"        \u002F\u002F 处理数组的问题\n",[36,88657,88658],{"class":38,"line":2504},[36,88659,88660],{"class":42},"        \u002F\u002F 判断是否属于数组\n",[36,88662,88663],{"class":38,"line":2509},[36,88664,88665],{"class":42},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[36,88667,88668,88670,88673,88676,88679],{"class":38,"line":2514},[36,88669,3246],{"class":53},[36,88671,88672],{"class":49}," (oldObj[k] ",[36,88674,88675],{"class":53},"instanceof",[36,88677,88678],{"class":2713}," Array",[36,88680,13186],{"class":49},[36,88682,88683],{"class":38,"line":2528},[36,88684,88685],{"class":42},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[36,88687,88688],{"class":38,"line":2533},[36,88689,88690],{"class":42},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[36,88692,88693,88696,88698],{"class":38,"line":3326},[36,88694,88695],{"class":49},"          newObj[k] ",[36,88697,54],{"class":53},[36,88699,52580],{"class":49},[36,88701,88702,88705],{"class":38,"line":3340},[36,88703,88704],{"class":2713},"          deepCopy",[36,88706,88707],{"class":49},"(newObj[k], oldObj[k])\n",[36,88709,88710,88712,88714,88716,88718,88720,88723],{"class":38,"line":3348},[36,88711,80822],{"class":49},[36,88713,2451],{"class":53},[36,88715,2454],{"class":53},[36,88717,88672],{"class":49},[36,88719,88675],{"class":53},[36,88721,88722],{"class":2713}," Object",[36,88724,13186],{"class":49},[36,88726,88727,88729,88731],{"class":38,"line":3353},[36,88728,88695],{"class":49},[36,88730,54],{"class":53},[36,88732,88610],{"class":49},[36,88734,88735,88737],{"class":38,"line":3359},[36,88736,88704],{"class":2713},[36,88738,88707],{"class":49},[36,88740,88741,88743,88745],{"class":38,"line":3365},[36,88742,80822],{"class":49},[36,88744,2451],{"class":53},[36,88746,16316],{"class":49},[36,88748,88749],{"class":38,"line":3370},[36,88750,88751],{"class":42},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[36,88753,88754],{"class":38,"line":8695},[36,88755,88756],{"class":42},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[36,88758,88759,88761,88763],{"class":38,"line":8719},[36,88760,88695],{"class":49},[36,88762,54],{"class":53},[36,88764,88765],{"class":49}," oldObj[k]\n",[36,88767,88768],{"class":38,"line":8724},[36,88769,3278],{"class":49},[36,88771,88772],{"class":38,"line":8730},[36,88773,53140],{"class":49},[36,88775,88776],{"class":38,"line":8757},[36,88777,2937],{"class":49},[36,88779,88780,88783,88786],{"class":38,"line":8762},[36,88781,88782],{"class":2713},"    deepCopy",[36,88784,88785],{"class":49},"(o, obj) ",[36,88787,88788],{"class":42},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[36,88790,88791,88793,88795],{"class":38,"line":8768},[36,88792,74495],{"class":49},[36,88794,58989],{"class":2713},[36,88796,88797],{"class":49},"(o)\n",[36,88799,88800,88803,88805],{"class":38,"line":8780},[36,88801,88802],{"class":49},"    o.age ",[36,88804,54],{"class":53},[36,88806,88807],{"class":60}," 20\n",[36,88809,88810,88813,88815,88817,88819],{"class":38,"line":8792},[36,88811,88812],{"class":49},"    o.hobby[",[36,88814,643],{"class":60},[36,88816,5192],{"class":49},[36,88818,54],{"class":53},[36,88820,88821],{"class":998}," '篮球'\n",[36,88823,88824,88827,88829],{"class":38,"line":8804},[36,88825,88826],{"class":49},"    o.family ",[36,88828,54],{"class":53},[36,88830,88831],{"class":998}," '老pink'\n",[36,88833,88834,88836,88838],{"class":38,"line":10463},[36,88835,74495],{"class":49},[36,88837,58989],{"class":2713},[36,88839,70778],{"class":49},[36,88841,88842,88844,88846],{"class":38,"line":10488},[36,88843,53159],{"class":49},[36,88845,52555],{"class":52042},[36,88847,52049],{"class":49},[36,88849,88850,88852,88854],{"class":38,"line":10511},[36,88851,52527],{"class":49},[36,88853,52542],{"class":52042},[36,88855,52049],{"class":49},[36,88857,88858],{"class":38,"line":10535},[36,88859,194],{"emptyLinePlaceholder":193},[36,88861,88862,88864,88866],{"class":38,"line":10540},[36,88863,52527],{"class":49},[36,88865,51377],{"class":52042},[36,88867,52049],{"class":49},[14,88869,88870],{},[2212,88871],{"alt":31,"src":88872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22742,88874,88876,88877],{"id":88875},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[1043,88878,88879],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88881,88882],{},[50,88883,88884],{"href":88884,"rel":88885},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24609],[14,88887,88888],{},"lodash里边的方法都要加上一个下划线_",[14,88890,88891],{},"_.cloneDeep()",[26,88893,88895],{"className":51375,"code":88894,"language":51377,"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,88896,88897,88907,88921,88925,88933,88947,88967,88979,88987,88991,88999,89004,89023,89031,89041,89049,89057,89069,89073,89079,89083,89087,89103,89111,89120,89128,89136,89144,89148],{"__ignoreMap":31},[36,88898,88899,88901,88903,88905],{"class":38,"line":39},[36,88900,52039],{"class":49},[36,88902,52043],{"class":52042},[36,88904,52046],{"class":2713},[36,88906,52049],{"class":49},[36,88908,88909,88911,88913,88915,88917,88919],{"class":38,"line":46},[36,88910,1789],{"class":49},[36,88912,51377],{"class":52042},[36,88914,52058],{"class":2713},[36,88916,54],{"class":49},[36,88918,52063],{"class":998},[36,88920,52049],{"class":49},[36,88922,88923],{"class":38,"line":78},[36,88924,194],{"emptyLinePlaceholder":193},[36,88926,88927,88929,88931],{"class":38,"line":125},[36,88928,1789],{"class":49},[36,88930,52076],{"class":52042},[36,88932,52049],{"class":49},[36,88934,88935,88937,88939,88941,88943,88945],{"class":38,"line":131},[36,88936,52886],{"class":49},[36,88938,52086],{"class":52042},[36,88940,52089],{"class":2713},[36,88942,54],{"class":49},[36,88944,52094],{"class":998},[36,88946,52049],{"class":49},[36,88948,88949,88951,88953,88955,88957,88959,88961,88963,88965],{"class":38,"line":396},[36,88950,52886],{"class":49},[36,88952,52086],{"class":52042},[36,88954,15664],{"class":2713},[36,88956,54],{"class":49},[36,88958,52133],{"class":998},[36,88960,52113],{"class":2713},[36,88962,54],{"class":49},[36,88964,52140],{"class":998},[36,88966,52049],{"class":49},[36,88968,88969,88971,88973,88975,88977],{"class":38,"line":407},[36,88970,52886],{"class":49},[36,88972,52149],{"class":52042},[36,88974,52152],{"class":49},[36,88976,52149],{"class":52042},[36,88978,52049],{"class":49},[36,88980,88981,88983,88985],{"class":38,"line":2061},[36,88982,52527],{"class":49},[36,88984,52076],{"class":52042},[36,88986,52049],{"class":49},[36,88988,88989],{"class":38,"line":2067},[36,88990,194],{"emptyLinePlaceholder":193},[36,88992,88993,88995,88997],{"class":38,"line":2079},[36,88994,1789],{"class":49},[36,88996,52542],{"class":52042},[36,88998,52049],{"class":49},[36,89000,89001],{"class":38,"line":2362},[36,89002,89003],{"class":42},"  \u003C!-- 先引用这个库 -->\n",[36,89005,89006,89008,89010,89012,89014,89017,89019,89021],{"class":38,"line":2367},[36,89007,52886],{"class":49},[36,89009,52555],{"class":52042},[36,89011,55981],{"class":2713},[36,89013,54],{"class":49},[36,89015,89016],{"class":998},"\"lodash.min.js\"",[36,89018,56056],{"class":49},[36,89020,52555],{"class":52042},[36,89022,52049],{"class":49},[36,89024,89025,89027,89029],{"class":38,"line":2373},[36,89026,52886],{"class":49},[36,89028,52555],{"class":52042},[36,89030,52049],{"class":49},[36,89032,89033,89035,89037,89039],{"class":38,"line":2378},[36,89034,11966],{"class":53},[36,89036,70713],{"class":60},[36,89038,14308],{"class":53},[36,89040,16316],{"class":49},[36,89042,89043,89045,89047],{"class":38,"line":2392},[36,89044,72358],{"class":49},[36,89046,88552],{"class":998},[36,89048,32208],{"class":49},[36,89050,89051,89053,89055],{"class":38,"line":2397},[36,89052,72368],{"class":49},[36,89054,1532],{"class":60},[36,89056,32208],{"class":49},[36,89058,89059,89061,89063,89065,89067],{"class":38,"line":2403},[36,89060,88567],{"class":49},[36,89062,88570],{"class":998},[36,89064,154],{"class":49},[36,89066,88575],{"class":998},[36,89068,88578],{"class":49},[36,89070,89071],{"class":38,"line":2424},[36,89072,78614],{"class":49},[36,89074,89075,89077],{"class":38,"line":2429},[36,89076,88587],{"class":49},[36,89078,88590],{"class":998},[36,89080,89081],{"class":38,"line":2443},[36,89082,53140],{"class":49},[36,89084,89085],{"class":38,"line":2448},[36,89086,2937],{"class":49},[36,89088,89089,89091,89093,89095,89098,89101],{"class":38,"line":2477},[36,89090,11966],{"class":53},[36,89092,88605],{"class":60},[36,89094,14308],{"class":53},[36,89096,89097],{"class":49}," _.",[36,89099,89100],{"class":2713},"cloneDeep",[36,89102,70778],{"class":49},[36,89104,89105,89107,89109],{"class":38,"line":2482},[36,89106,74495],{"class":49},[36,89108,58989],{"class":2713},[36,89110,88797],{"class":49},[36,89112,89113,89116,89118],{"class":38,"line":2499},[36,89114,89115],{"class":49},"    o.family.baby ",[36,89117,54],{"class":53},[36,89119,88831],{"class":998},[36,89121,89122,89124,89126],{"class":38,"line":2504},[36,89123,74495],{"class":49},[36,89125,58989],{"class":2713},[36,89127,70778],{"class":49},[36,89129,89130,89132,89134],{"class":38,"line":2509},[36,89131,53159],{"class":49},[36,89133,52555],{"class":52042},[36,89135,52049],{"class":49},[36,89137,89138,89140,89142],{"class":38,"line":2514},[36,89139,52527],{"class":49},[36,89141,52542],{"class":52042},[36,89143,52049],{"class":49},[36,89145,89146],{"class":38,"line":2528},[36,89147,194],{"emptyLinePlaceholder":193},[36,89149,89150,89152,89154],{"class":38,"line":2533},[36,89151,52527],{"class":49},[36,89153,51377],{"class":52042},[36,89155,52049],{"class":49},[14,89157,89158],{},[2212,89159],{"alt":31,"src":89160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22742,89162,89164],{"id":89163},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[26,89166,89168],{"className":51375,"code":89167,"language":51377,"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,89169,89170,89180,89194,89198,89206,89220,89240,89252,89260,89264,89272,89280,89290,89298,89306,89318,89322,89328,89332,89336,89341,89346,89351,89377,89385,89394,89402,89410,89418,89422],{"__ignoreMap":31},[36,89171,89172,89174,89176,89178],{"class":38,"line":39},[36,89173,52039],{"class":49},[36,89175,52043],{"class":52042},[36,89177,52046],{"class":2713},[36,89179,52049],{"class":49},[36,89181,89182,89184,89186,89188,89190,89192],{"class":38,"line":46},[36,89183,1789],{"class":49},[36,89185,51377],{"class":52042},[36,89187,52058],{"class":2713},[36,89189,54],{"class":49},[36,89191,52063],{"class":998},[36,89193,52049],{"class":49},[36,89195,89196],{"class":38,"line":78},[36,89197,194],{"emptyLinePlaceholder":193},[36,89199,89200,89202,89204],{"class":38,"line":125},[36,89201,1789],{"class":49},[36,89203,52076],{"class":52042},[36,89205,52049],{"class":49},[36,89207,89208,89210,89212,89214,89216,89218],{"class":38,"line":131},[36,89209,52886],{"class":49},[36,89211,52086],{"class":52042},[36,89213,52089],{"class":2713},[36,89215,54],{"class":49},[36,89217,52094],{"class":998},[36,89219,52049],{"class":49},[36,89221,89222,89224,89226,89228,89230,89232,89234,89236,89238],{"class":38,"line":396},[36,89223,52886],{"class":49},[36,89225,52086],{"class":52042},[36,89227,15664],{"class":2713},[36,89229,54],{"class":49},[36,89231,52133],{"class":998},[36,89233,52113],{"class":2713},[36,89235,54],{"class":49},[36,89237,52140],{"class":998},[36,89239,52049],{"class":49},[36,89241,89242,89244,89246,89248,89250],{"class":38,"line":407},[36,89243,52886],{"class":49},[36,89245,52149],{"class":52042},[36,89247,52152],{"class":49},[36,89249,52149],{"class":52042},[36,89251,52049],{"class":49},[36,89253,89254,89256,89258],{"class":38,"line":2061},[36,89255,52527],{"class":49},[36,89257,52076],{"class":52042},[36,89259,52049],{"class":49},[36,89261,89262],{"class":38,"line":2067},[36,89263,194],{"emptyLinePlaceholder":193},[36,89265,89266,89268,89270],{"class":38,"line":2079},[36,89267,1789],{"class":49},[36,89269,52542],{"class":52042},[36,89271,52049],{"class":49},[36,89273,89274,89276,89278],{"class":38,"line":2362},[36,89275,52886],{"class":49},[36,89277,52555],{"class":52042},[36,89279,52049],{"class":49},[36,89281,89282,89284,89286,89288],{"class":38,"line":2367},[36,89283,11966],{"class":53},[36,89285,70713],{"class":60},[36,89287,14308],{"class":53},[36,89289,16316],{"class":49},[36,89291,89292,89294,89296],{"class":38,"line":2373},[36,89293,72358],{"class":49},[36,89295,88552],{"class":998},[36,89297,32208],{"class":49},[36,89299,89300,89302,89304],{"class":38,"line":2378},[36,89301,72368],{"class":49},[36,89303,1532],{"class":60},[36,89305,32208],{"class":49},[36,89307,89308,89310,89312,89314,89316],{"class":38,"line":2392},[36,89309,88567],{"class":49},[36,89311,88570],{"class":998},[36,89313,154],{"class":49},[36,89315,88575],{"class":998},[36,89317,88578],{"class":49},[36,89319,89320],{"class":38,"line":2397},[36,89321,78614],{"class":49},[36,89323,89324,89326],{"class":38,"line":2403},[36,89325,88587],{"class":49},[36,89327,88590],{"class":998},[36,89329,89330],{"class":38,"line":2424},[36,89331,53140],{"class":49},[36,89333,89334],{"class":38,"line":2429},[36,89335,2937],{"class":49},[36,89337,89338],{"class":38,"line":2443},[36,89339,89340],{"class":42},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[36,89342,89343],{"class":38,"line":2448},[36,89344,89345],{"class":42},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[36,89347,89348],{"class":38,"line":2477},[36,89349,89350],{"class":42},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[36,89352,89353,89355,89357,89359,89362,89364,89367,89369,89371,89373,89375],{"class":38,"line":2482},[36,89354,11966],{"class":53},[36,89356,88605],{"class":60},[36,89358,14308],{"class":53},[36,89360,89361],{"class":60}," JSON",[36,89363,1440],{"class":49},[36,89365,89366],{"class":2713},"parse",[36,89368,901],{"class":49},[36,89370,72406],{"class":60},[36,89372,1440],{"class":49},[36,89374,72411],{"class":2713},[36,89376,72414],{"class":49},[36,89378,89379,89381,89383],{"class":38,"line":2499},[36,89380,74495],{"class":49},[36,89382,58989],{"class":2713},[36,89384,88797],{"class":49},[36,89386,89387,89389,89391],{"class":38,"line":2504},[36,89388,89115],{"class":49},[36,89390,54],{"class":53},[36,89392,89393],{"class":998}," '123'\n",[36,89395,89396,89398,89400],{"class":38,"line":2509},[36,89397,74495],{"class":49},[36,89399,58989],{"class":2713},[36,89401,70778],{"class":49},[36,89403,89404,89406,89408],{"class":38,"line":2514},[36,89405,53159],{"class":49},[36,89407,52555],{"class":52042},[36,89409,52049],{"class":49},[36,89411,89412,89414,89416],{"class":38,"line":2528},[36,89413,52527],{"class":49},[36,89415,52542],{"class":52042},[36,89417,52049],{"class":49},[36,89419,89420],{"class":38,"line":2533},[36,89421,194],{"emptyLinePlaceholder":193},[36,89423,89424,89426,89428],{"class":38,"line":3326},[36,89425,52527],{"class":49},[36,89427,51377],{"class":52042},[36,89429,52049],{"class":49},[14,89431,89432],{},[2212,89433],{"alt":31,"src":89434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[21,89436,89438],{"id":89437},"_415-异常处理","4.15 异常处理",[851,89440,89441],{},[854,89442,89443],{},"throw抛异常",[14,89445,89446],{},[2212,89447],{"alt":31,"src":89448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[851,89450,89451],{"start":46},[854,89452,89453],{},"try\u002Fcatch 捕获错误信息",[14,89455,89456],{},[2212,89457],{"alt":31,"src":89458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[26,89460,89462],{"className":51375,"code":89461,"language":51377,"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,89463,89464,89474,89488,89492,89500,89514,89534,89546,89554,89558,89566,89578,89586,89595,89602,89607,89626,89635,89646,89651,89661,89666,89671,89676,89693,89697,89702,89709,89721,89725,89737,89741,89745,89750,89755,89762,89770,89778,89782],{"__ignoreMap":31},[36,89465,89466,89468,89470,89472],{"class":38,"line":39},[36,89467,52039],{"class":49},[36,89469,52043],{"class":52042},[36,89471,52046],{"class":2713},[36,89473,52049],{"class":49},[36,89475,89476,89478,89480,89482,89484,89486],{"class":38,"line":46},[36,89477,1789],{"class":49},[36,89479,51377],{"class":52042},[36,89481,52058],{"class":2713},[36,89483,54],{"class":49},[36,89485,52063],{"class":998},[36,89487,52049],{"class":49},[36,89489,89490],{"class":38,"line":78},[36,89491,194],{"emptyLinePlaceholder":193},[36,89493,89494,89496,89498],{"class":38,"line":125},[36,89495,1789],{"class":49},[36,89497,52076],{"class":52042},[36,89499,52049],{"class":49},[36,89501,89502,89504,89506,89508,89510,89512],{"class":38,"line":131},[36,89503,52886],{"class":49},[36,89505,52086],{"class":52042},[36,89507,52089],{"class":2713},[36,89509,54],{"class":49},[36,89511,52094],{"class":998},[36,89513,52049],{"class":49},[36,89515,89516,89518,89520,89522,89524,89526,89528,89530,89532],{"class":38,"line":396},[36,89517,52886],{"class":49},[36,89519,52086],{"class":52042},[36,89521,15664],{"class":2713},[36,89523,54],{"class":49},[36,89525,52133],{"class":998},[36,89527,52113],{"class":2713},[36,89529,54],{"class":49},[36,89531,52140],{"class":998},[36,89533,52049],{"class":49},[36,89535,89536,89538,89540,89542,89544],{"class":38,"line":407},[36,89537,52886],{"class":49},[36,89539,52149],{"class":52042},[36,89541,52152],{"class":49},[36,89543,52149],{"class":52042},[36,89545,52049],{"class":49},[36,89547,89548,89550,89552],{"class":38,"line":2061},[36,89549,52527],{"class":49},[36,89551,52076],{"class":52042},[36,89553,52049],{"class":49},[36,89555,89556],{"class":38,"line":2067},[36,89557,194],{"emptyLinePlaceholder":193},[36,89559,89560,89562,89564],{"class":38,"line":2079},[36,89561,1789],{"class":49},[36,89563,52542],{"class":52042},[36,89565,52049],{"class":49},[36,89567,89568,89570,89572,89574,89576],{"class":38,"line":2362},[36,89569,52886],{"class":49},[36,89571,14],{"class":52042},[36,89573,54236],{"class":49},[36,89575,14],{"class":52042},[36,89577,52049],{"class":49},[36,89579,89580,89582,89584],{"class":38,"line":2367},[36,89581,52886],{"class":49},[36,89583,52555],{"class":52042},[36,89585,52049],{"class":49},[36,89587,89588,89590,89593],{"class":38,"line":2373},[36,89589,70826],{"class":53},[36,89591,89592],{"class":2713}," fn",[36,89594,11600],{"class":49},[36,89596,89597,89600],{"class":38,"line":2378},[36,89598,89599],{"class":53},"      try",[36,89601,16316],{"class":49},[36,89603,89604],{"class":38,"line":2392},[36,89605,89606],{"class":42},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[36,89608,89609,89611,89613,89615,89617,89619,89621,89624],{"class":38,"line":2397},[36,89610,62012],{"class":53},[36,89612,7572],{"class":60},[36,89614,14308],{"class":53},[36,89616,55138],{"class":49},[36,89618,55141],{"class":2713},[36,89620,901],{"class":49},[36,89622,89623],{"class":998},"'.p'",[36,89625,75],{"class":49},[36,89627,89628,89631,89633],{"class":38,"line":2403},[36,89629,89630],{"class":49},"        p.style.color ",[36,89632,54],{"class":53},[36,89634,67793],{"class":998},[36,89636,89637,89640,89643],{"class":38,"line":2424},[36,89638,89639],{"class":49},"      } ",[36,89641,89642],{"class":53},"catch",[36,89644,89645],{"class":49}," (err) {\n",[36,89647,89648],{"class":38,"line":2429},[36,89649,89650],{"class":42},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[36,89652,89653,89656,89658],{"class":38,"line":2443},[36,89654,89655],{"class":49},"        console.",[36,89657,58989],{"class":2713},[36,89659,89660],{"class":49},"(err.message)\n",[36,89662,89663],{"class":38,"line":2448},[36,89664,89665],{"class":42},"        \u002F\u002F 想要中断程序，需要加return\n",[36,89667,89668],{"class":38,"line":2477},[36,89669,89670],{"class":42},"        \u002F\u002F return\n",[36,89672,89673],{"class":38,"line":2482},[36,89674,89675],{"class":42},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[36,89677,89678,89681,89683,89686,89688,89691],{"class":38,"line":2499},[36,89679,89680],{"class":53},"        throw",[36,89682,12323],{"class":53},[36,89684,89685],{"class":2713}," Error",[36,89687,901],{"class":49},[36,89689,89690],{"class":998},"'你看看，选择器错误了吧'",[36,89692,75],{"class":49},[36,89694,89695],{"class":38,"line":2504},[36,89696,53140],{"class":49},[36,89698,89699],{"class":38,"line":2509},[36,89700,89701],{"class":42},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[36,89703,89704,89707],{"class":38,"line":2514},[36,89705,89706],{"class":53},"      finally",[36,89708,16316],{"class":49},[36,89710,89711,89714,89716,89719],{"class":38,"line":2528},[36,89712,89713],{"class":2713},"        alert",[36,89715,901],{"class":49},[36,89717,89718],{"class":998},"'弹出对话框'",[36,89720,75],{"class":49},[36,89722,89723],{"class":38,"line":2533},[36,89724,53140],{"class":49},[36,89726,89727,89729,89731,89733,89735],{"class":38,"line":3326},[36,89728,58986],{"class":49},[36,89730,58989],{"class":2713},[36,89732,901],{"class":49},[36,89734,1356],{"class":60},[36,89736,75],{"class":49},[36,89738,89739],{"class":38,"line":3340},[36,89740,194],{"emptyLinePlaceholder":193},[36,89742,89743],{"class":38,"line":3348},[36,89744,2937],{"class":49},[36,89746,89747],{"class":38,"line":3353},[36,89748,89749],{"class":42},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[36,89751,89752],{"class":38,"line":3359},[36,89753,89754],{"class":42},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[36,89756,89757,89760],{"class":38,"line":3365},[36,89758,89759],{"class":2713},"    fn",[36,89761,2726],{"class":49},[36,89763,89764,89766,89768],{"class":38,"line":3370},[36,89765,53159],{"class":49},[36,89767,52555],{"class":52042},[36,89769,52049],{"class":49},[36,89771,89772,89774,89776],{"class":38,"line":8695},[36,89773,52527],{"class":49},[36,89775,52542],{"class":52042},[36,89777,52049],{"class":49},[36,89779,89780],{"class":38,"line":8719},[36,89781,194],{"emptyLinePlaceholder":193},[36,89783,89784,89786,89788],{"class":38,"line":8724},[36,89785,52527],{"class":49},[36,89787,51377],{"class":52042},[36,89789,52049],{"class":49},[14,89791,89792],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[851,89794,89795],{"start":78},[854,89796,89797],{},"debugger",[14,89799,89800],{},[2212,89801],{"alt":31,"src":89802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89804,89805],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[21,89807,89809],{"id":89808},"_416-处理this","4.16 处理this",[868,89811,89813],{"id":89812},"_4161-this的指向","4.16.1 this的指向",[851,89815,89816],{},[854,89817,89818],{},"普通函数的this",[14,89820,89821],{},[2212,89822],{"alt":31,"src":89823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[851,89825,89826],{"start":46},[854,89827,89828],{},"箭头函数的this",[14,89830,89831],{},[2212,89832],{"alt":31,"src":89833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89835,89836],{},[2212,89837],{"alt":31,"src":89838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89840,89841],{},[2212,89842],{"alt":31,"src":89843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[868,89845,89847],{"id":89846},"_4162-this的改变","4.16.2 this的改变",[14,89849,89850],{},"call() apply() bind()",[851,89852,89853],{},[854,89854,89855],{},"call()",[14,89857,89858],{},[2212,89859],{"alt":31,"src":89860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89862,89863],{},"两个作用：①调用函数；②改变this指向",[26,89865,89867],{"className":53809,"code":89866,"language":53811,"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,89868,89869,89877,89885,89889,89894,89898,89903,89908,89913,89917,89922,89930],{"__ignoreMap":31},[36,89870,89871,89873,89875],{"class":38,"line":39},[36,89872,1789],{"class":49},[36,89874,52542],{"class":52042},[36,89876,52049],{"class":49},[36,89878,89879,89881,89883],{"class":38,"line":46},[36,89880,52886],{"class":49},[36,89882,52555],{"class":52042},[36,89884,52049],{"class":49},[36,89886,89887],{"class":38,"line":78},[36,89888,72265],{"class":49},[36,89890,89891],{"class":38,"line":125},[36,89892,89893],{"class":49},"      uname: 'pink'\n",[36,89895,89896],{"class":38,"line":131},[36,89897,2937],{"class":49},[36,89899,89900],{"class":38,"line":396},[36,89901,89902],{"class":49},"    function fn(x, y) {\n",[36,89904,89905],{"class":38,"line":407},[36,89906,89907],{"class":49},"      console.log(this)  \u002F\u002Fwindow\n",[36,89909,89910],{"class":38,"line":2061},[36,89911,89912],{"class":49},"      console.log(x + y)\n",[36,89914,89915],{"class":38,"line":2067},[36,89916,2937],{"class":49},[36,89918,89919],{"class":38,"line":2079},[36,89920,89921],{"class":49},"    fn.call(obj, 1, 2)\n",[36,89923,89924,89926,89928],{"class":38,"line":2362},[36,89925,53159],{"class":49},[36,89927,52555],{"class":52042},[36,89929,52049],{"class":49},[36,89931,89932,89934,89936],{"class":38,"line":2367},[36,89933,52527],{"class":49},[36,89935,52542],{"class":52042},[36,89937,52049],{"class":49},[14,89939,89940],{},[2212,89941],{"alt":31,"src":89942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[851,89944,89945],{"start":46},[854,89946,89947],{},"apply()",[14,89949,89950],{},[2212,89951],{"alt":31,"src":89952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89954,89863],{},[14,89956,89957],{},"call传递的是普通参数，而apply必须传递的是数组",[26,89959,89961],{"className":51375,"code":89960,"language":51377,"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,89962,89963,89973,89987,89991,89999,90013,90033,90045,90053,90057,90065,90073,90083,90090,90094,90099,90115,90127,90141,90145,90150,90169,90174,90178,90183,90188,90196,90201,90223,90228,90244,90260,90272,90276,90281,90300,90308,90316,90320],{"__ignoreMap":31},[36,89964,89965,89967,89969,89971],{"class":38,"line":39},[36,89966,52039],{"class":49},[36,89968,52043],{"class":52042},[36,89970,52046],{"class":2713},[36,89972,52049],{"class":49},[36,89974,89975,89977,89979,89981,89983,89985],{"class":38,"line":46},[36,89976,1789],{"class":49},[36,89978,51377],{"class":52042},[36,89980,52058],{"class":2713},[36,89982,54],{"class":49},[36,89984,52063],{"class":998},[36,89986,52049],{"class":49},[36,89988,89989],{"class":38,"line":78},[36,89990,194],{"emptyLinePlaceholder":193},[36,89992,89993,89995,89997],{"class":38,"line":125},[36,89994,1789],{"class":49},[36,89996,52076],{"class":52042},[36,89998,52049],{"class":49},[36,90000,90001,90003,90005,90007,90009,90011],{"class":38,"line":131},[36,90002,52886],{"class":49},[36,90004,52086],{"class":52042},[36,90006,52089],{"class":2713},[36,90008,54],{"class":49},[36,90010,52094],{"class":998},[36,90012,52049],{"class":49},[36,90014,90015,90017,90019,90021,90023,90025,90027,90029,90031],{"class":38,"line":396},[36,90016,52886],{"class":49},[36,90018,52086],{"class":52042},[36,90020,15664],{"class":2713},[36,90022,54],{"class":49},[36,90024,52133],{"class":998},[36,90026,52113],{"class":2713},[36,90028,54],{"class":49},[36,90030,52140],{"class":998},[36,90032,52049],{"class":49},[36,90034,90035,90037,90039,90041,90043],{"class":38,"line":407},[36,90036,52886],{"class":49},[36,90038,52149],{"class":52042},[36,90040,52152],{"class":49},[36,90042,52149],{"class":52042},[36,90044,52049],{"class":49},[36,90046,90047,90049,90051],{"class":38,"line":2061},[36,90048,52527],{"class":49},[36,90050,52076],{"class":52042},[36,90052,52049],{"class":49},[36,90054,90055],{"class":38,"line":2067},[36,90056,194],{"emptyLinePlaceholder":193},[36,90058,90059,90061,90063],{"class":38,"line":2079},[36,90060,1789],{"class":49},[36,90062,52542],{"class":52042},[36,90064,52049],{"class":49},[36,90066,90067,90069,90071],{"class":38,"line":2362},[36,90068,52886],{"class":49},[36,90070,52555],{"class":52042},[36,90072,52049],{"class":49},[36,90074,90075,90077,90079,90081],{"class":38,"line":2367},[36,90076,11966],{"class":53},[36,90078,70713],{"class":60},[36,90080,14308],{"class":53},[36,90082,16316],{"class":49},[36,90084,90085,90087],{"class":38,"line":2373},[36,90086,72368],{"class":49},[36,90088,90089],{"class":60},"18\n",[36,90091,90092],{"class":38,"line":2378},[36,90093,2937],{"class":49},[36,90095,90096],{"class":38,"line":2392},[36,90097,90098],{"class":42},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[36,90100,90101,90103,90105,90107,90109,90111,90113],{"class":38,"line":2397},[36,90102,70826],{"class":53},[36,90104,89592],{"class":2713},[36,90106,901],{"class":49},[36,90108,1700],{"class":416},[36,90110,154],{"class":49},[36,90112,399],{"class":416},[36,90114,13186],{"class":49},[36,90116,90117,90119,90121,90123,90125],{"class":38,"line":2403},[36,90118,58986],{"class":49},[36,90120,58989],{"class":2713},[36,90122,901],{"class":49},[36,90124,87735],{"class":60},[36,90126,75],{"class":49},[36,90128,90129,90131,90133,90136,90138],{"class":38,"line":2424},[36,90130,58986],{"class":49},[36,90132,58989],{"class":2713},[36,90134,90135],{"class":49},"(x ",[36,90137,1365],{"class":53},[36,90139,90140],{"class":49}," y)\n",[36,90142,90143],{"class":38,"line":2429},[36,90144,2937],{"class":49},[36,90146,90147],{"class":38,"line":2443},[36,90148,90149],{"class":42},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[36,90151,90152,90155,90158,90161,90163,90165,90167],{"class":38,"line":2448},[36,90153,90154],{"class":49},"    fn.",[36,90156,90157],{"class":2713},"apply",[36,90159,90160],{"class":49},"(obj, [",[36,90162,61],{"class":60},[36,90164,154],{"class":49},[36,90166,181],{"class":60},[36,90168,165],{"class":49},[36,90170,90171],{"class":38,"line":2477},[36,90172,90173],{"class":42},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[36,90175,90176],{"class":38,"line":2482},[36,90177,194],{"emptyLinePlaceholder":193},[36,90179,90180],{"class":38,"line":2499},[36,90181,90182],{"class":42},"    \u002F\u002F 使用场景：求数组最大值\n",[36,90184,90185],{"class":38,"line":2504},[36,90186,90187],{"class":42},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[36,90189,90190,90193],{"class":38,"line":2509},[36,90191,90192],{"class":42},"    \u002F\u002F console.log(max)",[36,90194,90195],{"class":42},"   \u002F\u002F3\n",[36,90197,90198],{"class":38,"line":2514},[36,90199,90200],{"class":42},"    \u002F\u002F 指向空或者Math都是可以的\n",[36,90202,90203,90205,90207,90209,90211,90213,90215,90217,90219,90221],{"class":38,"line":2528},[36,90204,11966],{"class":53},[36,90206,58437],{"class":60},[36,90208,14308],{"class":53},[36,90210,52968],{"class":49},[36,90212,67],{"class":60},[36,90214,154],{"class":49},[36,90216,1387],{"class":60},[36,90218,154],{"class":49},[36,90220,1417],{"class":60},[36,90222,33988],{"class":49},[36,90224,90225],{"class":38,"line":2533},[36,90226,90227],{"class":42},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[36,90229,90230,90232,90234,90236,90239,90241],{"class":38,"line":3326},[36,90231,11966],{"class":53},[36,90233,6698],{"class":60},[36,90235,14308],{"class":53},[36,90237,90238],{"class":49}," Math.max.",[36,90240,90157],{"class":2713},[36,90242,90243],{"class":49},"(Math, arr)\n",[36,90245,90246,90248,90251,90253,90256,90258],{"class":38,"line":3340},[36,90247,11966],{"class":53},[36,90249,90250],{"class":60}," min",[36,90252,14308],{"class":53},[36,90254,90255],{"class":49}," Math.min.",[36,90257,90157],{"class":2713},[36,90259,90243],{"class":49},[36,90261,90262,90264,90266,90269],{"class":38,"line":3348},[36,90263,74495],{"class":49},[36,90265,58989],{"class":2713},[36,90267,90268],{"class":49},"(max, min)     ",[36,90270,90271],{"class":42},"\u002F\u002F100,4\n",[36,90273,90274],{"class":38,"line":3353},[36,90275,194],{"emptyLinePlaceholder":193},[36,90277,90278],{"class":38,"line":3359},[36,90279,90280],{"class":42},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[36,90282,90283,90285,90287,90290,90292,90294,90297],{"class":38,"line":3365},[36,90284,74495],{"class":49},[36,90286,58989],{"class":2713},[36,90288,90289],{"class":49},"(Max.",[36,90291,6762],{"class":2713},[36,90293,901],{"class":49},[36,90295,90296],{"class":53},"...",[36,90298,90299],{"class":49},"arr))\n",[36,90301,90302,90304,90306],{"class":38,"line":3370},[36,90303,53159],{"class":49},[36,90305,52555],{"class":52042},[36,90307,52049],{"class":49},[36,90309,90310,90312,90314],{"class":38,"line":8695},[36,90311,52527],{"class":49},[36,90313,52542],{"class":52042},[36,90315,52049],{"class":49},[36,90317,90318],{"class":38,"line":8719},[36,90319,194],{"emptyLinePlaceholder":193},[36,90321,90322,90324,90326],{"class":38,"line":8724},[36,90323,52527],{"class":49},[36,90325,51377],{"class":52042},[36,90327,52049],{"class":49},[14,90329,90330],{},[2212,90331],{"alt":31,"src":90332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[851,90334,90335],{"start":78},[854,90336,90337],{},"bind()",[14,90339,90340],{},[2212,90341],{"alt":31,"src":90342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,90344,90345],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,90347,90348],{},"bind的语法跟call很相似",[26,90350,90352],{"className":53809,"code":90351,"language":53811,"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,90353,90354,90362,90370,90374,90379,90383,90387,90392,90396,90401,90406,90411,90416,90421,90426,90431,90435,90443],{"__ignoreMap":31},[36,90355,90356,90358,90360],{"class":38,"line":39},[36,90357,1789],{"class":49},[36,90359,52542],{"class":52042},[36,90361,52049],{"class":49},[36,90363,90364,90366,90368],{"class":38,"line":46},[36,90365,52886],{"class":49},[36,90367,52555],{"class":52042},[36,90369,52049],{"class":49},[36,90371,90372],{"class":38,"line":78},[36,90373,72265],{"class":49},[36,90375,90376],{"class":38,"line":125},[36,90377,90378],{"class":49},"      age: 18\n",[36,90380,90381],{"class":38,"line":131},[36,90382,2937],{"class":49},[36,90384,90385],{"class":38,"line":396},[36,90386,77885],{"class":49},[36,90388,90389],{"class":38,"line":407},[36,90390,90391],{"class":49},"      console.log(this)\n",[36,90393,90394],{"class":38,"line":2061},[36,90395,2937],{"class":49},[36,90397,90398],{"class":38,"line":2067},[36,90399,90400],{"class":49},"    \u002F\u002F 1.bind 不会调用函数\n",[36,90402,90403],{"class":38,"line":2079},[36,90404,90405],{"class":49},"    \u002F\u002F 2.bind能改变this的指向\n",[36,90407,90408],{"class":38,"line":2362},[36,90409,90410],{"class":49},"    fn.bind()\n",[36,90412,90413],{"class":38,"line":2367},[36,90414,90415],{"class":49},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[36,90417,90418],{"class":38,"line":2373},[36,90419,90420],{"class":49},"    const fun = fn.bind(obj)\n",[36,90422,90423],{"class":38,"line":2378},[36,90424,90425],{"class":49},"    \u002F\u002F console.log(fun)\n",[36,90427,90428],{"class":38,"line":2392},[36,90429,90430],{"class":49},"    \u002F\u002F 调用,查看this的指向\n",[36,90432,90433],{"class":38,"line":2397},[36,90434,53393],{"class":49},[36,90436,90437,90439,90441],{"class":38,"line":2403},[36,90438,53159],{"class":49},[36,90440,52555],{"class":52042},[36,90442,52049],{"class":49},[36,90444,90445,90447,90449],{"class":38,"line":2424},[36,90446,52527],{"class":49},[36,90448,52542],{"class":52042},[36,90450,52049],{"class":49},[14,90452,90453],{},[2212,90454],{"alt":31,"src":90455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[851,90457,90458],{"start":125},[854,90459,90460],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[26,90462,90464],{"className":53809,"code":90463,"language":53811,"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,90465,90466,90474,90487,90495,90500,90504,90509,90514,90519,90524,90529,90534,90539,90544,90548,90556],{"__ignoreMap":31},[36,90467,90468,90470,90472],{"class":38,"line":39},[36,90469,1789],{"class":49},[36,90471,52542],{"class":52042},[36,90473,52049],{"class":49},[36,90475,90476,90478,90480,90483,90485],{"class":38,"line":46},[36,90477,52886],{"class":49},[36,90479,54629],{"class":52042},[36,90481,90482],{"class":49},">禁用\u003C\u002F",[36,90484,54629],{"class":52042},[36,90486,52049],{"class":49},[36,90488,90489,90491,90493],{"class":38,"line":78},[36,90490,52886],{"class":49},[36,90492,52555],{"class":52042},[36,90494,52049],{"class":49},[36,90496,90497],{"class":38,"line":125},[36,90498,90499],{"class":49},"    const btn = document.querySelector('button')\n",[36,90501,90502],{"class":38,"line":131},[36,90503,59758],{"class":49},[36,90505,90506],{"class":38,"line":396},[36,90507,90508],{"class":49},"      this.disabled = true\n",[36,90510,90511],{"class":38,"line":407},[36,90512,90513],{"class":49},"      \u002F\u002F 定时器是window进行调用的\n",[36,90515,90516],{"class":38,"line":2061},[36,90517,90518],{"class":49},"      setTimeout(function () {\n",[36,90520,90521],{"class":38,"line":2067},[36,90522,90523],{"class":49},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[36,90525,90526],{"class":38,"line":2079},[36,90527,90528],{"class":49},"        this.disabled = false\n",[36,90530,90531],{"class":38,"line":2362},[36,90532,90533],{"class":49},"      }.bind(this), 2000)\n",[36,90535,90536],{"class":38,"line":2367},[36,90537,90538],{"class":49},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[36,90540,90541],{"class":38,"line":2373},[36,90542,90543],{"class":49},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[36,90545,90546],{"class":38,"line":2378},[36,90547,34203],{"class":49},[36,90549,90550,90552,90554],{"class":38,"line":2392},[36,90551,53159],{"class":49},[36,90553,52555],{"class":52042},[36,90555,52049],{"class":49},[36,90557,90558,90560,90562],{"class":38,"line":2397},[36,90559,52527],{"class":49},[36,90561,52542],{"class":52042},[36,90563,52049],{"class":49},[851,90565,90566],{"start":131},[854,90567,22697],{},[14,90569,90570],{},[2212,90571],{"alt":31,"src":90572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[21,90574,90576],{"id":90575},"_417-性能优化","4.17 性能优化",[868,90578,90580],{"id":90579},"_4171-防抖","4.17.1 防抖",[14,90582,90583],{},[2212,90584],{"alt":31,"src":90585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,90587,90588],{},[1043,90589,90590],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,90592,90593],{},"防抖实现方式：",[1886,90595,90596],{},[854,90597,90598],{},"lodash 提供了防抖处理",[14,90600,90601],{},"_.debounce(func,[wait=0],[options={}])",[14,90603,90604],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[26,90606,90608],{"className":51375,"code":90607,"language":51377,"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,90609,90610,90620,90634,90638,90646,90660,90680,90692,90700,90706,90716,90728,90740,90751,90763,90773,90783,90796,90800,90808,90816,90820,90828,90846,90864,90872,90891,90901,90910,90921,90926,90930,90935,90940,90945,90970,90978,90986,90990],{"__ignoreMap":31},[36,90611,90612,90614,90616,90618],{"class":38,"line":39},[36,90613,52039],{"class":49},[36,90615,52043],{"class":52042},[36,90617,52046],{"class":2713},[36,90619,52049],{"class":49},[36,90621,90622,90624,90626,90628,90630,90632],{"class":38,"line":46},[36,90623,1789],{"class":49},[36,90625,51377],{"class":52042},[36,90627,52058],{"class":2713},[36,90629,54],{"class":49},[36,90631,52063],{"class":998},[36,90633,52049],{"class":49},[36,90635,90636],{"class":38,"line":78},[36,90637,194],{"emptyLinePlaceholder":193},[36,90639,90640,90642,90644],{"class":38,"line":125},[36,90641,1789],{"class":49},[36,90643,52076],{"class":52042},[36,90645,52049],{"class":49},[36,90647,90648,90650,90652,90654,90656,90658],{"class":38,"line":131},[36,90649,52886],{"class":49},[36,90651,52086],{"class":52042},[36,90653,52089],{"class":2713},[36,90655,54],{"class":49},[36,90657,52094],{"class":998},[36,90659,52049],{"class":49},[36,90661,90662,90664,90666,90668,90670,90672,90674,90676,90678],{"class":38,"line":396},[36,90663,52886],{"class":49},[36,90665,52086],{"class":52042},[36,90667,15664],{"class":2713},[36,90669,54],{"class":49},[36,90671,52133],{"class":998},[36,90673,52113],{"class":2713},[36,90675,54],{"class":49},[36,90677,52140],{"class":998},[36,90679,52049],{"class":49},[36,90681,90682,90684,90686,90688,90690],{"class":38,"line":407},[36,90683,52886],{"class":49},[36,90685,52149],{"class":52042},[36,90687,52152],{"class":49},[36,90689,52149],{"class":52042},[36,90691,52049],{"class":49},[36,90693,90694,90696,90698],{"class":38,"line":2061},[36,90695,52886],{"class":49},[36,90697,807],{"class":52042},[36,90699,52049],{"class":49},[36,90701,90702,90704],{"class":38,"line":2067},[36,90703,55494],{"class":2713},[36,90705,16316],{"class":49},[36,90707,90708,90710,90712,90714],{"class":38,"line":2079},[36,90709,73338],{"class":60},[36,90711,52179],{"class":49},[36,90713,61247],{"class":60},[36,90715,2040],{"class":49},[36,90717,90718,90720,90722,90724,90726],{"class":38,"line":2362},[36,90719,55513],{"class":60},[36,90721,52179],{"class":49},[36,90723,2472],{"class":60},[36,90725,52234],{"class":53},[36,90727,2040],{"class":49},[36,90729,90730,90732,90734,90736,90738],{"class":38,"line":2367},[36,90731,55527],{"class":60},[36,90733,52179],{"class":49},[36,90735,2472],{"class":60},[36,90737,52234],{"class":53},[36,90739,2040],{"class":49},[36,90741,90742,90744,90746,90749],{"class":38,"line":2373},[36,90743,55626],{"class":60},[36,90745,52179],{"class":49},[36,90747,90748],{"class":60},"gray",[36,90750,2040],{"class":49},[36,90752,90753,90755,90757,90759,90761],{"class":38,"line":2378},[36,90754,55664],{"class":60},[36,90756,52179],{"class":49},[36,90758,1705],{"class":60},[36,90760,52234],{"class":53},[36,90762,2040],{"class":49},[36,90764,90765,90767,90769,90771],{"class":38,"line":2392},[36,90766,58158],{"class":60},[36,90768,52179],{"class":49},[36,90770,61584],{"class":60},[36,90772,2040],{"class":49},[36,90774,90775,90777,90779,90781],{"class":38,"line":2397},[36,90776,58028],{"class":60},[36,90778,52179],{"class":49},[36,90780,52334],{"class":60},[36,90782,2040],{"class":49},[36,90784,90785,90788,90790,90792,90794],{"class":38,"line":2403},[36,90786,90787],{"class":60},"      padding-top",[36,90789,52179],{"class":49},[36,90791,157],{"class":60},[36,90793,52234],{"class":53},[36,90795,2040],{"class":49},[36,90797,90798],{"class":38,"line":2424},[36,90799,2937],{"class":49},[36,90801,90802,90804,90806],{"class":38,"line":2429},[36,90803,53159],{"class":49},[36,90805,807],{"class":52042},[36,90807,52049],{"class":49},[36,90809,90810,90812,90814],{"class":38,"line":2443},[36,90811,52527],{"class":49},[36,90813,52076],{"class":52042},[36,90815,52049],{"class":49},[36,90817,90818],{"class":38,"line":2448},[36,90819,194],{"emptyLinePlaceholder":193},[36,90821,90822,90824,90826],{"class":38,"line":2477},[36,90823,1789],{"class":49},[36,90825,52542],{"class":52042},[36,90827,52049],{"class":49},[36,90829,90830,90832,90834,90836,90838,90840,90842,90844],{"class":38,"line":2482},[36,90831,52886],{"class":49},[36,90833,52353],{"class":52042},[36,90835,54228],{"class":2713},[36,90837,54],{"class":49},[36,90839,54233],{"class":998},[36,90841,56056],{"class":49},[36,90843,52353],{"class":52042},[36,90845,52049],{"class":49},[36,90847,90848,90850,90852,90854,90856,90858,90860,90862],{"class":38,"line":2499},[36,90849,52886],{"class":49},[36,90851,52555],{"class":52042},[36,90853,55981],{"class":2713},[36,90855,54],{"class":49},[36,90857,89016],{"class":998},[36,90859,56056],{"class":49},[36,90861,52555],{"class":52042},[36,90863,52049],{"class":49},[36,90865,90866,90868,90870],{"class":38,"line":2504},[36,90867,52886],{"class":49},[36,90869,52555],{"class":52042},[36,90871,52049],{"class":49},[36,90873,90874,90876,90878,90880,90882,90884,90886,90889],{"class":38,"line":2509},[36,90875,11966],{"class":53},[36,90877,87675],{"class":60},[36,90879,14308],{"class":53},[36,90881,55138],{"class":49},[36,90883,55141],{"class":2713},[36,90885,901],{"class":49},[36,90887,90888],{"class":998},"'.box'",[36,90890,75],{"class":49},[36,90892,90893,90895,90897,90899],{"class":38,"line":2514},[36,90894,52961],{"class":53},[36,90896,10185],{"class":49},[36,90898,54],{"class":53},[36,90900,48075],{"class":60},[36,90902,90903,90905,90908],{"class":38,"line":2528},[36,90904,70826],{"class":53},[36,90906,90907],{"class":2713}," mouseMove",[36,90909,11600],{"class":49},[36,90911,90912,90915,90917,90919],{"class":38,"line":2533},[36,90913,90914],{"class":49},"      box.innerHTML ",[36,90916,54],{"class":53},[36,90918,3781],{"class":49},[36,90920,3451],{"class":53},[36,90922,90923],{"class":38,"line":3326},[36,90924,90925],{"class":42},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[36,90927,90928],{"class":38,"line":3340},[36,90929,2937],{"class":49},[36,90931,90932],{"class":38,"line":3348},[36,90933,90934],{"class":42},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[36,90936,90937],{"class":38,"line":3353},[36,90938,90939],{"class":42},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[36,90941,90942],{"class":38,"line":3359},[36,90943,90944],{"class":42},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[36,90946,90947,90950,90952,90954,90957,90960,90963,90966,90968],{"class":38,"line":3365},[36,90948,90949],{"class":49},"    box.",[36,90951,58555],{"class":2713},[36,90953,901],{"class":49},[36,90955,90956],{"class":998},"'mousemove'",[36,90958,90959],{"class":49},", _.",[36,90961,90962],{"class":2713},"debounce",[36,90964,90965],{"class":49},"(mouseMove, ",[36,90967,65816],{"class":60},[36,90969,31239],{"class":49},[36,90971,90972,90974,90976],{"class":38,"line":3370},[36,90973,53159],{"class":49},[36,90975,52555],{"class":52042},[36,90977,52049],{"class":49},[36,90979,90980,90982,90984],{"class":38,"line":8695},[36,90981,52527],{"class":49},[36,90983,52542],{"class":52042},[36,90985,52049],{"class":49},[36,90987,90988],{"class":38,"line":8719},[36,90989,194],{"emptyLinePlaceholder":193},[36,90991,90992,90994,90996],{"class":38,"line":8724},[36,90993,52527],{"class":49},[36,90995,51377],{"class":52042},[36,90997,52049],{"class":49},[1886,90999,91000],{},[854,91001,91002],{},"手写一个防抖函数来处理",[14,91004,91005],{},"防抖的核心就是利用定时器来实现的：",[14,91007,91008],{},"①声明一个定时器变量",[14,91010,91011],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,91013,91014],{},"③如果没有定时器则开启定时器，记得存到变量里面",[26,91016,91018],{"className":51375,"code":91017,"language":51377,"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,91019,91020,91030,91044,91048,91056,91070,91090,91102,91110,91116,91126,91138,91150,91160,91172,91182,91192,91204,91208,91216,91224,91228,91236,91254,91272,91280,91298,91308,91316,91326,91330,91334,91338,91343,91348,91353,91358,91363,91368,91386,91393,91398,91406,91411,91424,91440,91450,91455,91459,91463,91483,91487,91492,91497,91502,91507,91515,91523,91527],{"__ignoreMap":31},[36,91021,91022,91024,91026,91028],{"class":38,"line":39},[36,91023,52039],{"class":49},[36,91025,52043],{"class":52042},[36,91027,52046],{"class":2713},[36,91029,52049],{"class":49},[36,91031,91032,91034,91036,91038,91040,91042],{"class":38,"line":46},[36,91033,1789],{"class":49},[36,91035,51377],{"class":52042},[36,91037,52058],{"class":2713},[36,91039,54],{"class":49},[36,91041,52063],{"class":998},[36,91043,52049],{"class":49},[36,91045,91046],{"class":38,"line":78},[36,91047,194],{"emptyLinePlaceholder":193},[36,91049,91050,91052,91054],{"class":38,"line":125},[36,91051,1789],{"class":49},[36,91053,52076],{"class":52042},[36,91055,52049],{"class":49},[36,91057,91058,91060,91062,91064,91066,91068],{"class":38,"line":131},[36,91059,52886],{"class":49},[36,91061,52086],{"class":52042},[36,91063,52089],{"class":2713},[36,91065,54],{"class":49},[36,91067,52094],{"class":998},[36,91069,52049],{"class":49},[36,91071,91072,91074,91076,91078,91080,91082,91084,91086,91088],{"class":38,"line":396},[36,91073,52886],{"class":49},[36,91075,52086],{"class":52042},[36,91077,15664],{"class":2713},[36,91079,54],{"class":49},[36,91081,52133],{"class":998},[36,91083,52113],{"class":2713},[36,91085,54],{"class":49},[36,91087,52140],{"class":998},[36,91089,52049],{"class":49},[36,91091,91092,91094,91096,91098,91100],{"class":38,"line":407},[36,91093,52886],{"class":49},[36,91095,52149],{"class":52042},[36,91097,52152],{"class":49},[36,91099,52149],{"class":52042},[36,91101,52049],{"class":49},[36,91103,91104,91106,91108],{"class":38,"line":2061},[36,91105,52886],{"class":49},[36,91107,807],{"class":52042},[36,91109,52049],{"class":49},[36,91111,91112,91114],{"class":38,"line":2067},[36,91113,55494],{"class":2713},[36,91115,16316],{"class":49},[36,91117,91118,91120,91122,91124],{"class":38,"line":2079},[36,91119,73338],{"class":60},[36,91121,52179],{"class":49},[36,91123,61247],{"class":60},[36,91125,2040],{"class":49},[36,91127,91128,91130,91132,91134,91136],{"class":38,"line":2362},[36,91129,55513],{"class":60},[36,91131,52179],{"class":49},[36,91133,2472],{"class":60},[36,91135,52234],{"class":53},[36,91137,2040],{"class":49},[36,91139,91140,91142,91144,91146,91148],{"class":38,"line":2367},[36,91141,55527],{"class":60},[36,91143,52179],{"class":49},[36,91145,2472],{"class":60},[36,91147,52234],{"class":53},[36,91149,2040],{"class":49},[36,91151,91152,91154,91156,91158],{"class":38,"line":2373},[36,91153,55626],{"class":60},[36,91155,52179],{"class":49},[36,91157,90748],{"class":60},[36,91159,2040],{"class":49},[36,91161,91162,91164,91166,91168,91170],{"class":38,"line":2378},[36,91163,55664],{"class":60},[36,91165,52179],{"class":49},[36,91167,1705],{"class":60},[36,91169,52234],{"class":53},[36,91171,2040],{"class":49},[36,91173,91174,91176,91178,91180],{"class":38,"line":2392},[36,91175,58158],{"class":60},[36,91177,52179],{"class":49},[36,91179,61584],{"class":60},[36,91181,2040],{"class":49},[36,91183,91184,91186,91188,91190],{"class":38,"line":2397},[36,91185,58028],{"class":60},[36,91187,52179],{"class":49},[36,91189,52334],{"class":60},[36,91191,2040],{"class":49},[36,91193,91194,91196,91198,91200,91202],{"class":38,"line":2403},[36,91195,90787],{"class":60},[36,91197,52179],{"class":49},[36,91199,157],{"class":60},[36,91201,52234],{"class":53},[36,91203,2040],{"class":49},[36,91205,91206],{"class":38,"line":2424},[36,91207,2937],{"class":49},[36,91209,91210,91212,91214],{"class":38,"line":2429},[36,91211,53159],{"class":49},[36,91213,807],{"class":52042},[36,91215,52049],{"class":49},[36,91217,91218,91220,91222],{"class":38,"line":2443},[36,91219,52527],{"class":49},[36,91221,52076],{"class":52042},[36,91223,52049],{"class":49},[36,91225,91226],{"class":38,"line":2448},[36,91227,194],{"emptyLinePlaceholder":193},[36,91229,91230,91232,91234],{"class":38,"line":2477},[36,91231,1789],{"class":49},[36,91233,52542],{"class":52042},[36,91235,52049],{"class":49},[36,91237,91238,91240,91242,91244,91246,91248,91250,91252],{"class":38,"line":2482},[36,91239,52886],{"class":49},[36,91241,52353],{"class":52042},[36,91243,54228],{"class":2713},[36,91245,54],{"class":49},[36,91247,54233],{"class":998},[36,91249,56056],{"class":49},[36,91251,52353],{"class":52042},[36,91253,52049],{"class":49},[36,91255,91256,91258,91260,91262,91264,91266,91268,91270],{"class":38,"line":2499},[36,91257,52886],{"class":49},[36,91259,52555],{"class":52042},[36,91261,55981],{"class":2713},[36,91263,54],{"class":49},[36,91265,89016],{"class":998},[36,91267,56056],{"class":49},[36,91269,52555],{"class":52042},[36,91271,52049],{"class":49},[36,91273,91274,91276,91278],{"class":38,"line":2504},[36,91275,52886],{"class":49},[36,91277,52555],{"class":52042},[36,91279,52049],{"class":49},[36,91281,91282,91284,91286,91288,91290,91292,91294,91296],{"class":38,"line":2509},[36,91283,11966],{"class":53},[36,91285,87675],{"class":60},[36,91287,14308],{"class":53},[36,91289,55138],{"class":49},[36,91291,55141],{"class":2713},[36,91293,901],{"class":49},[36,91295,90888],{"class":998},[36,91297,75],{"class":49},[36,91299,91300,91302,91304,91306],{"class":38,"line":2514},[36,91301,52961],{"class":53},[36,91303,10185],{"class":49},[36,91305,54],{"class":53},[36,91307,48075],{"class":60},[36,91309,91310,91312,91314],{"class":38,"line":2528},[36,91311,70826],{"class":53},[36,91313,90907],{"class":2713},[36,91315,11600],{"class":49},[36,91317,91318,91320,91322,91324],{"class":38,"line":2533},[36,91319,90914],{"class":49},[36,91321,54],{"class":53},[36,91323,3781],{"class":49},[36,91325,3451],{"class":53},[36,91327,91328],{"class":38,"line":3326},[36,91329,90925],{"class":42},[36,91331,91332],{"class":38,"line":3340},[36,91333,2937],{"class":49},[36,91335,91336],{"class":38,"line":3348},[36,91337,90934],{"class":42},[36,91339,91340],{"class":38,"line":3353},[36,91341,91342],{"class":42},"    \u002F\u002F 手写防抖函数\n",[36,91344,91345],{"class":38,"line":3359},[36,91346,91347],{"class":42},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[36,91349,91350],{"class":38,"line":3365},[36,91351,91352],{"class":42},"    \u002F\u002F 1.声明定时器变量\n",[36,91354,91355],{"class":38,"line":3370},[36,91356,91357],{"class":42},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[36,91359,91360],{"class":38,"line":8695},[36,91361,91362],{"class":42},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[36,91364,91365],{"class":38,"line":8719},[36,91366,91367],{"class":42},"    \u002F\u002F 4.定时器里面写函数调用\n",[36,91369,91370,91372,91375,91377,91380,91382,91384],{"class":38,"line":8724},[36,91371,70826],{"class":53},[36,91373,91374],{"class":2713}," debounce",[36,91376,901],{"class":49},[36,91378,91379],{"class":416},"fn",[36,91381,154],{"class":49},[36,91383,1601],{"class":416},[36,91385,13186],{"class":49},[36,91387,91388,91390],{"class":38,"line":8730},[36,91389,80514],{"class":53},[36,91391,91392],{"class":49}," timer\n",[36,91394,91395],{"class":38,"line":8757},[36,91396,91397],{"class":42},"      \u002F\u002F return 返回一个匿名函数\n",[36,91399,91400,91402,91404],{"class":38,"line":8762},[36,91401,74724],{"class":53},[36,91403,59660],{"class":53},[36,91405,55194],{"class":49},[36,91407,91408],{"class":38,"line":8768},[36,91409,91410],{"class":42},"        \u002F\u002F 这里边写第二三四步\n",[36,91412,91413,91415,91418,91421],{"class":38,"line":8780},[36,91414,3246],{"class":53},[36,91416,91417],{"class":49}," (timer) ",[36,91419,91420],{"class":2713},"clearTimeout",[36,91422,91423],{"class":49},"(timer)\n",[36,91425,91426,91429,91431,91434,91436,91438],{"class":38,"line":8792},[36,91427,91428],{"class":49},"        timer ",[36,91430,54],{"class":53},[36,91432,91433],{"class":2713}," setTimeout",[36,91435,901],{"class":49},[36,91437,55191],{"class":53},[36,91439,55194],{"class":49},[36,91441,91442,91445,91447],{"class":38,"line":8804},[36,91443,91444],{"class":2713},"          fn",[36,91446,13794],{"class":49},[36,91448,91449],{"class":42},"\u002F\u002F加小括号调用fn }, t)\n",[36,91451,91452],{"class":38,"line":10463},[36,91453,91454],{"class":49},"        }, t)\n",[36,91456,91457],{"class":38,"line":10488},[36,91458,53140],{"class":49},[36,91460,91461],{"class":38,"line":10511},[36,91462,2937],{"class":49},[36,91464,91465,91467,91469,91471,91473,91475,91477,91479,91481],{"class":38,"line":10535},[36,91466,90949],{"class":49},[36,91468,58555],{"class":2713},[36,91470,901],{"class":49},[36,91472,90956],{"class":998},[36,91474,154],{"class":49},[36,91476,90962],{"class":2713},[36,91478,90965],{"class":49},[36,91480,65816],{"class":60},[36,91482,31239],{"class":49},[36,91484,91485],{"class":38,"line":10540},[36,91486,194],{"emptyLinePlaceholder":193},[36,91488,91489],{"class":38,"line":10545},[36,91490,91491],{"class":42},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[36,91493,91494],{"class":38,"line":10550},[36,91495,91496],{"class":42},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[36,91498,91499],{"class":38,"line":10559},[36,91500,91501],{"class":42},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[36,91503,91504],{"class":38,"line":10564},[36,91505,91506],{"class":42},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[36,91508,91509,91511,91513],{"class":38,"line":10570},[36,91510,53159],{"class":49},[36,91512,52555],{"class":52042},[36,91514,52049],{"class":49},[36,91516,91517,91519,91521],{"class":38,"line":10591},[36,91518,52527],{"class":49},[36,91520,52542],{"class":52042},[36,91522,52049],{"class":49},[36,91524,91525],{"class":38,"line":10597},[36,91526,194],{"emptyLinePlaceholder":193},[36,91528,91529,91531,91533],{"class":38,"line":10611},[36,91530,52527],{"class":49},[36,91532,51377],{"class":52042},[36,91534,52049],{"class":49},[868,91536,91538],{"id":91537},"_4172-节流","4.17.2 节流",[14,91540,91541],{},[2212,91542],{"alt":31,"src":91543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,91545,91546],{},[2212,91547],{"alt":31,"src":91548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,91550,91551],{},[1043,91552,91553],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,91555,91556],{},"实现方式：",[1886,91558,91559],{},[854,91560,91561],{},"lodash 提供的节流函数来处理",[14,91563,91564],{},"_.throttle(func,[wait=0],[options=])",[14,91566,91567],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[26,91569,91571],{"className":51375,"code":91570,"language":51377,"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,91572,91573,91583,91597,91601,91609,91623,91643,91655,91663,91669,91679,91691,91703,91713,91725,91735,91745,91757,91761,91769,91777,91781,91789,91807,91825,91833,91851,91861,91869,91879,91883,91887,91891,91896,91901,91922,91930,91938,91942],{"__ignoreMap":31},[36,91574,91575,91577,91579,91581],{"class":38,"line":39},[36,91576,52039],{"class":49},[36,91578,52043],{"class":52042},[36,91580,52046],{"class":2713},[36,91582,52049],{"class":49},[36,91584,91585,91587,91589,91591,91593,91595],{"class":38,"line":46},[36,91586,1789],{"class":49},[36,91588,51377],{"class":52042},[36,91590,52058],{"class":2713},[36,91592,54],{"class":49},[36,91594,52063],{"class":998},[36,91596,52049],{"class":49},[36,91598,91599],{"class":38,"line":78},[36,91600,194],{"emptyLinePlaceholder":193},[36,91602,91603,91605,91607],{"class":38,"line":125},[36,91604,1789],{"class":49},[36,91606,52076],{"class":52042},[36,91608,52049],{"class":49},[36,91610,91611,91613,91615,91617,91619,91621],{"class":38,"line":131},[36,91612,52886],{"class":49},[36,91614,52086],{"class":52042},[36,91616,52089],{"class":2713},[36,91618,54],{"class":49},[36,91620,52094],{"class":998},[36,91622,52049],{"class":49},[36,91624,91625,91627,91629,91631,91633,91635,91637,91639,91641],{"class":38,"line":396},[36,91626,52886],{"class":49},[36,91628,52086],{"class":52042},[36,91630,15664],{"class":2713},[36,91632,54],{"class":49},[36,91634,52133],{"class":998},[36,91636,52113],{"class":2713},[36,91638,54],{"class":49},[36,91640,52140],{"class":998},[36,91642,52049],{"class":49},[36,91644,91645,91647,91649,91651,91653],{"class":38,"line":407},[36,91646,52886],{"class":49},[36,91648,52149],{"class":52042},[36,91650,52152],{"class":49},[36,91652,52149],{"class":52042},[36,91654,52049],{"class":49},[36,91656,91657,91659,91661],{"class":38,"line":2061},[36,91658,52886],{"class":49},[36,91660,807],{"class":52042},[36,91662,52049],{"class":49},[36,91664,91665,91667],{"class":38,"line":2067},[36,91666,55494],{"class":2713},[36,91668,16316],{"class":49},[36,91670,91671,91673,91675,91677],{"class":38,"line":2079},[36,91672,73338],{"class":60},[36,91674,52179],{"class":49},[36,91676,61247],{"class":60},[36,91678,2040],{"class":49},[36,91680,91681,91683,91685,91687,91689],{"class":38,"line":2362},[36,91682,55513],{"class":60},[36,91684,52179],{"class":49},[36,91686,2472],{"class":60},[36,91688,52234],{"class":53},[36,91690,2040],{"class":49},[36,91692,91693,91695,91697,91699,91701],{"class":38,"line":2367},[36,91694,55527],{"class":60},[36,91696,52179],{"class":49},[36,91698,2472],{"class":60},[36,91700,52234],{"class":53},[36,91702,2040],{"class":49},[36,91704,91705,91707,91709,91711],{"class":38,"line":2373},[36,91706,55626],{"class":60},[36,91708,52179],{"class":49},[36,91710,90748],{"class":60},[36,91712,2040],{"class":49},[36,91714,91715,91717,91719,91721,91723],{"class":38,"line":2378},[36,91716,55664],{"class":60},[36,91718,52179],{"class":49},[36,91720,1705],{"class":60},[36,91722,52234],{"class":53},[36,91724,2040],{"class":49},[36,91726,91727,91729,91731,91733],{"class":38,"line":2392},[36,91728,58158],{"class":60},[36,91730,52179],{"class":49},[36,91732,61584],{"class":60},[36,91734,2040],{"class":49},[36,91736,91737,91739,91741,91743],{"class":38,"line":2397},[36,91738,58028],{"class":60},[36,91740,52179],{"class":49},[36,91742,52334],{"class":60},[36,91744,2040],{"class":49},[36,91746,91747,91749,91751,91753,91755],{"class":38,"line":2403},[36,91748,90787],{"class":60},[36,91750,52179],{"class":49},[36,91752,157],{"class":60},[36,91754,52234],{"class":53},[36,91756,2040],{"class":49},[36,91758,91759],{"class":38,"line":2424},[36,91760,2937],{"class":49},[36,91762,91763,91765,91767],{"class":38,"line":2429},[36,91764,53159],{"class":49},[36,91766,807],{"class":52042},[36,91768,52049],{"class":49},[36,91770,91771,91773,91775],{"class":38,"line":2443},[36,91772,52527],{"class":49},[36,91774,52076],{"class":52042},[36,91776,52049],{"class":49},[36,91778,91779],{"class":38,"line":2448},[36,91780,194],{"emptyLinePlaceholder":193},[36,91782,91783,91785,91787],{"class":38,"line":2477},[36,91784,1789],{"class":49},[36,91786,52542],{"class":52042},[36,91788,52049],{"class":49},[36,91790,91791,91793,91795,91797,91799,91801,91803,91805],{"class":38,"line":2482},[36,91792,52886],{"class":49},[36,91794,52353],{"class":52042},[36,91796,54228],{"class":2713},[36,91798,54],{"class":49},[36,91800,54233],{"class":998},[36,91802,56056],{"class":49},[36,91804,52353],{"class":52042},[36,91806,52049],{"class":49},[36,91808,91809,91811,91813,91815,91817,91819,91821,91823],{"class":38,"line":2499},[36,91810,52886],{"class":49},[36,91812,52555],{"class":52042},[36,91814,55981],{"class":2713},[36,91816,54],{"class":49},[36,91818,89016],{"class":998},[36,91820,56056],{"class":49},[36,91822,52555],{"class":52042},[36,91824,52049],{"class":49},[36,91826,91827,91829,91831],{"class":38,"line":2504},[36,91828,52886],{"class":49},[36,91830,52555],{"class":52042},[36,91832,52049],{"class":49},[36,91834,91835,91837,91839,91841,91843,91845,91847,91849],{"class":38,"line":2509},[36,91836,11966],{"class":53},[36,91838,87675],{"class":60},[36,91840,14308],{"class":53},[36,91842,55138],{"class":49},[36,91844,55141],{"class":2713},[36,91846,901],{"class":49},[36,91848,90888],{"class":998},[36,91850,75],{"class":49},[36,91852,91853,91855,91857,91859],{"class":38,"line":2514},[36,91854,52961],{"class":53},[36,91856,10185],{"class":49},[36,91858,54],{"class":53},[36,91860,48075],{"class":60},[36,91862,91863,91865,91867],{"class":38,"line":2528},[36,91864,70826],{"class":53},[36,91866,90907],{"class":2713},[36,91868,11600],{"class":49},[36,91870,91871,91873,91875,91877],{"class":38,"line":2533},[36,91872,90914],{"class":49},[36,91874,54],{"class":53},[36,91876,3781],{"class":49},[36,91878,3451],{"class":53},[36,91880,91881],{"class":38,"line":3326},[36,91882,90925],{"class":42},[36,91884,91885],{"class":38,"line":3340},[36,91886,2937],{"class":49},[36,91888,91889],{"class":38,"line":3348},[36,91890,90934],{"class":42},[36,91892,91893],{"class":38,"line":3353},[36,91894,91895],{"class":42},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[36,91897,91898],{"class":38,"line":3359},[36,91899,91900],{"class":42},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[36,91902,91903,91905,91907,91909,91911,91913,91916,91918,91920],{"class":38,"line":3365},[36,91904,90949],{"class":49},[36,91906,58555],{"class":2713},[36,91908,901],{"class":49},[36,91910,90956],{"class":998},[36,91912,90959],{"class":49},[36,91914,91915],{"class":2713},"throttle",[36,91917,90965],{"class":49},[36,91919,65816],{"class":60},[36,91921,31239],{"class":49},[36,91923,91924,91926,91928],{"class":38,"line":3370},[36,91925,53159],{"class":49},[36,91927,52555],{"class":52042},[36,91929,52049],{"class":49},[36,91931,91932,91934,91936],{"class":38,"line":8695},[36,91933,52527],{"class":49},[36,91935,52542],{"class":52042},[36,91937,52049],{"class":49},[36,91939,91940],{"class":38,"line":8719},[36,91941,194],{"emptyLinePlaceholder":193},[36,91943,91944,91946,91948],{"class":38,"line":8724},[36,91945,52527],{"class":49},[36,91947,51377],{"class":52042},[36,91949,52049],{"class":49},[1886,91951,91952],{},[854,91953,91954],{},"手写一个节流函数来处理",[14,91956,71694],{},[14,91958,91008],{},[14,91960,91961],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91963,91964],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[26,91966,91968],{"className":51375,"code":91967,"language":51377,"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,91969,91970,91980,91994,91998,92006,92020,92040,92052,92060,92066,92076,92088,92100,92110,92122,92132,92142,92154,92158,92166,92174,92178,92186,92204,92222,92230,92248,92258,92266,92276,92280,92284,92288,92293,92298,92303,92308,92313,92318,92335,92341,92349,92360,92375,92382,92387,92392,92402,92407,92412,92417,92421,92425,92429,92449,92457,92465,92469],{"__ignoreMap":31},[36,91971,91972,91974,91976,91978],{"class":38,"line":39},[36,91973,52039],{"class":49},[36,91975,52043],{"class":52042},[36,91977,52046],{"class":2713},[36,91979,52049],{"class":49},[36,91981,91982,91984,91986,91988,91990,91992],{"class":38,"line":46},[36,91983,1789],{"class":49},[36,91985,51377],{"class":52042},[36,91987,52058],{"class":2713},[36,91989,54],{"class":49},[36,91991,52063],{"class":998},[36,91993,52049],{"class":49},[36,91995,91996],{"class":38,"line":78},[36,91997,194],{"emptyLinePlaceholder":193},[36,91999,92000,92002,92004],{"class":38,"line":125},[36,92001,1789],{"class":49},[36,92003,52076],{"class":52042},[36,92005,52049],{"class":49},[36,92007,92008,92010,92012,92014,92016,92018],{"class":38,"line":131},[36,92009,52886],{"class":49},[36,92011,52086],{"class":52042},[36,92013,52089],{"class":2713},[36,92015,54],{"class":49},[36,92017,52094],{"class":998},[36,92019,52049],{"class":49},[36,92021,92022,92024,92026,92028,92030,92032,92034,92036,92038],{"class":38,"line":396},[36,92023,52886],{"class":49},[36,92025,52086],{"class":52042},[36,92027,15664],{"class":2713},[36,92029,54],{"class":49},[36,92031,52133],{"class":998},[36,92033,52113],{"class":2713},[36,92035,54],{"class":49},[36,92037,52140],{"class":998},[36,92039,52049],{"class":49},[36,92041,92042,92044,92046,92048,92050],{"class":38,"line":407},[36,92043,52886],{"class":49},[36,92045,52149],{"class":52042},[36,92047,52152],{"class":49},[36,92049,52149],{"class":52042},[36,92051,52049],{"class":49},[36,92053,92054,92056,92058],{"class":38,"line":2061},[36,92055,52886],{"class":49},[36,92057,807],{"class":52042},[36,92059,52049],{"class":49},[36,92061,92062,92064],{"class":38,"line":2067},[36,92063,55494],{"class":2713},[36,92065,16316],{"class":49},[36,92067,92068,92070,92072,92074],{"class":38,"line":2079},[36,92069,73338],{"class":60},[36,92071,52179],{"class":49},[36,92073,61247],{"class":60},[36,92075,2040],{"class":49},[36,92077,92078,92080,92082,92084,92086],{"class":38,"line":2362},[36,92079,55513],{"class":60},[36,92081,52179],{"class":49},[36,92083,2472],{"class":60},[36,92085,52234],{"class":53},[36,92087,2040],{"class":49},[36,92089,92090,92092,92094,92096,92098],{"class":38,"line":2367},[36,92091,55527],{"class":60},[36,92093,52179],{"class":49},[36,92095,2472],{"class":60},[36,92097,52234],{"class":53},[36,92099,2040],{"class":49},[36,92101,92102,92104,92106,92108],{"class":38,"line":2373},[36,92103,55626],{"class":60},[36,92105,52179],{"class":49},[36,92107,90748],{"class":60},[36,92109,2040],{"class":49},[36,92111,92112,92114,92116,92118,92120],{"class":38,"line":2378},[36,92113,55664],{"class":60},[36,92115,52179],{"class":49},[36,92117,1705],{"class":60},[36,92119,52234],{"class":53},[36,92121,2040],{"class":49},[36,92123,92124,92126,92128,92130],{"class":38,"line":2392},[36,92125,58158],{"class":60},[36,92127,52179],{"class":49},[36,92129,61584],{"class":60},[36,92131,2040],{"class":49},[36,92133,92134,92136,92138,92140],{"class":38,"line":2397},[36,92135,58028],{"class":60},[36,92137,52179],{"class":49},[36,92139,52334],{"class":60},[36,92141,2040],{"class":49},[36,92143,92144,92146,92148,92150,92152],{"class":38,"line":2403},[36,92145,90787],{"class":60},[36,92147,52179],{"class":49},[36,92149,157],{"class":60},[36,92151,52234],{"class":53},[36,92153,2040],{"class":49},[36,92155,92156],{"class":38,"line":2424},[36,92157,2937],{"class":49},[36,92159,92160,92162,92164],{"class":38,"line":2429},[36,92161,53159],{"class":49},[36,92163,807],{"class":52042},[36,92165,52049],{"class":49},[36,92167,92168,92170,92172],{"class":38,"line":2443},[36,92169,52527],{"class":49},[36,92171,52076],{"class":52042},[36,92173,52049],{"class":49},[36,92175,92176],{"class":38,"line":2448},[36,92177,194],{"emptyLinePlaceholder":193},[36,92179,92180,92182,92184],{"class":38,"line":2477},[36,92181,1789],{"class":49},[36,92183,52542],{"class":52042},[36,92185,52049],{"class":49},[36,92187,92188,92190,92192,92194,92196,92198,92200,92202],{"class":38,"line":2482},[36,92189,52886],{"class":49},[36,92191,52353],{"class":52042},[36,92193,54228],{"class":2713},[36,92195,54],{"class":49},[36,92197,54233],{"class":998},[36,92199,56056],{"class":49},[36,92201,52353],{"class":52042},[36,92203,52049],{"class":49},[36,92205,92206,92208,92210,92212,92214,92216,92218,92220],{"class":38,"line":2499},[36,92207,52886],{"class":49},[36,92209,52555],{"class":52042},[36,92211,55981],{"class":2713},[36,92213,54],{"class":49},[36,92215,89016],{"class":998},[36,92217,56056],{"class":49},[36,92219,52555],{"class":52042},[36,92221,52049],{"class":49},[36,92223,92224,92226,92228],{"class":38,"line":2504},[36,92225,52886],{"class":49},[36,92227,52555],{"class":52042},[36,92229,52049],{"class":49},[36,92231,92232,92234,92236,92238,92240,92242,92244,92246],{"class":38,"line":2509},[36,92233,11966],{"class":53},[36,92235,87675],{"class":60},[36,92237,14308],{"class":53},[36,92239,55138],{"class":49},[36,92241,55141],{"class":2713},[36,92243,901],{"class":49},[36,92245,90888],{"class":998},[36,92247,75],{"class":49},[36,92249,92250,92252,92254,92256],{"class":38,"line":2514},[36,92251,52961],{"class":53},[36,92253,10185],{"class":49},[36,92255,54],{"class":53},[36,92257,48075],{"class":60},[36,92259,92260,92262,92264],{"class":38,"line":2528},[36,92261,70826],{"class":53},[36,92263,90907],{"class":2713},[36,92265,11600],{"class":49},[36,92267,92268,92270,92272,92274],{"class":38,"line":2533},[36,92269,90914],{"class":49},[36,92271,54],{"class":53},[36,92273,3781],{"class":49},[36,92275,3451],{"class":53},[36,92277,92278],{"class":38,"line":3326},[36,92279,90925],{"class":42},[36,92281,92282],{"class":38,"line":3340},[36,92283,2937],{"class":49},[36,92285,92286],{"class":38,"line":3348},[36,92287,90934],{"class":42},[36,92289,92290],{"class":38,"line":3353},[36,92291,92292],{"class":42},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[36,92294,92295],{"class":38,"line":3359},[36,92296,92297],{"class":42},"    \u002F\u002F 1.声明一个定时器变量\n",[36,92299,92300],{"class":38,"line":3365},[36,92301,92302],{"class":42},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[36,92304,92305],{"class":38,"line":3370},[36,92306,92307],{"class":42},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[36,92309,92310],{"class":38,"line":8695},[36,92311,92312],{"class":42},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[36,92314,92315],{"class":38,"line":8719},[36,92316,92317],{"class":42},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[36,92319,92320,92322,92325,92327,92329,92331,92333],{"class":38,"line":8724},[36,92321,70826],{"class":53},[36,92323,92324],{"class":2713}," throttle",[36,92326,901],{"class":49},[36,92328,91379],{"class":416},[36,92330,154],{"class":49},[36,92332,1601],{"class":416},[36,92334,13186],{"class":49},[36,92336,92337,92339],{"class":38,"line":8730},[36,92338,80514],{"class":53},[36,92340,91392],{"class":49},[36,92342,92343,92345,92347],{"class":38,"line":8757},[36,92344,74724],{"class":53},[36,92346,59660],{"class":53},[36,92348,55194],{"class":49},[36,92350,92351,92353,92355,92357],{"class":38,"line":8762},[36,92352,3246],{"class":53},[36,92354,2408],{"class":49},[36,92356,1117],{"class":53},[36,92358,92359],{"class":49},"timer) {\n",[36,92361,92362,92365,92367,92369,92371,92373],{"class":38,"line":8768},[36,92363,92364],{"class":49},"          timer ",[36,92366,54],{"class":53},[36,92368,91433],{"class":2713},[36,92370,901],{"class":49},[36,92372,55191],{"class":53},[36,92374,55194],{"class":49},[36,92376,92377,92380],{"class":38,"line":8780},[36,92378,92379],{"class":2713},"            fn",[36,92381,2726],{"class":49},[36,92383,92384],{"class":38,"line":8792},[36,92385,92386],{"class":42},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[36,92388,92389],{"class":38,"line":8804},[36,92390,92391],{"class":42},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[36,92393,92394,92397,92399],{"class":38,"line":10463},[36,92395,92396],{"class":49},"            timer ",[36,92398,54],{"class":53},[36,92400,92401],{"class":60}," null\n",[36,92403,92404],{"class":38,"line":10488},[36,92405,92406],{"class":42},"            \u002F\u002F 不能用clearTimeout(timer)\n",[36,92408,92409],{"class":38,"line":10511},[36,92410,92411],{"class":42},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[36,92413,92414],{"class":38,"line":10535},[36,92415,92416],{"class":49},"          }, t)\n",[36,92418,92419],{"class":38,"line":10540},[36,92420,3278],{"class":49},[36,92422,92423],{"class":38,"line":10545},[36,92424,53140],{"class":49},[36,92426,92427],{"class":38,"line":10550},[36,92428,2937],{"class":49},[36,92430,92431,92433,92435,92437,92439,92441,92443,92445,92447],{"class":38,"line":10559},[36,92432,90949],{"class":49},[36,92434,58555],{"class":2713},[36,92436,901],{"class":49},[36,92438,90956],{"class":998},[36,92440,154],{"class":49},[36,92442,91915],{"class":2713},[36,92444,90965],{"class":49},[36,92446,65816],{"class":60},[36,92448,31239],{"class":49},[36,92450,92451,92453,92455],{"class":38,"line":10564},[36,92452,53159],{"class":49},[36,92454,52555],{"class":52042},[36,92456,52049],{"class":49},[36,92458,92459,92461,92463],{"class":38,"line":10570},[36,92460,52527],{"class":49},[36,92462,52542],{"class":52042},[36,92464,52049],{"class":49},[36,92466,92467],{"class":38,"line":10591},[36,92468,194],{"emptyLinePlaceholder":193},[36,92470,92471,92473,92475],{"class":38,"line":10597},[36,92472,52527],{"class":49},[36,92474,51377],{"class":52042},[36,92476,52049],{"class":49},[868,92478,92480],{"id":92479},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[26,92482,92484],{"className":53809,"code":92483,"language":53811,"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,92485,92486,92494,92502,92507,92512,92517,92522,92526,92534],{"__ignoreMap":31},[36,92487,92488,92490,92492],{"class":38,"line":39},[36,92489,1789],{"class":49},[36,92491,52542],{"class":52042},[36,92493,52049],{"class":49},[36,92495,92496,92498,92500],{"class":38,"line":46},[36,92497,52886],{"class":49},[36,92499,52555],{"class":52042},[36,92501,52049],{"class":49},[36,92503,92504],{"class":38,"line":78},[36,92505,92506],{"class":49},"    let timer = null\n",[36,92508,92509],{"class":38,"line":125},[36,92510,92511],{"class":49},"    timer = setTimeout(() => {\n",[36,92513,92514],{"class":38,"line":131},[36,92515,92516],{"class":49},"      clearTimeout(timer)\n",[36,92518,92519],{"class":38,"line":396},[36,92520,92521],{"class":49},"      console.log(timer)\n",[36,92523,92524],{"class":38,"line":407},[36,92525,60967],{"class":49},[36,92527,92528,92530,92532],{"class":38,"line":2061},[36,92529,53159],{"class":49},[36,92531,52555],{"class":52042},[36,92533,52049],{"class":49},[36,92535,92536,92538,92540],{"class":38,"line":2067},[36,92537,52527],{"class":49},[36,92539,52542],{"class":52042},[36,92541,52049],{"class":49},[14,92543,92544],{},"输出为1",[14,92546,92547],{},"在开启的定时器里边写清除定时器",[14,92549,92550],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[868,92552,92554],{"id":92553},"_4174-节流综合案例","4.17.4 节流综合案例",[14,92556,92557],{},"页面打开，可以记录上一次的视频播放位置",[14,92559,92560],{},[2212,92561],{"alt":31,"src":92562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,92564,92565],{},[2212,92566],{"alt":31,"src":92567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[26,92569,92571],{"className":51375,"code":92570,"language":51377,"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,92572,92573,92583,92597,92601,92609,92623,92643,92663,92685,92698,92706,92712,92722,92732,92742,92746,92750,92757,92770,92782,92786,92790,92800,92812,92826,92830,92834,92841,92851,92864,92876,92886,92896,92912,92924,92928,92932,92940,92950,92962,92972,92982,92992,92996,93000,93010,93021,93025,93033,93041,93045,93053,93068,93083,93098,93119,93127,93135,93150,93172,93180,93195,93221,93247,93273,93281,93289,93308,93316,93321,93340,93345,93363,93368,93373,93381,93386,93400,93408,93413,93430,93434,93439,93461,93465,93473,93481,93485],{"__ignoreMap":31},[36,92574,92575,92577,92579,92581],{"class":38,"line":39},[36,92576,52039],{"class":49},[36,92578,52043],{"class":52042},[36,92580,52046],{"class":2713},[36,92582,52049],{"class":49},[36,92584,92585,92587,92589,92591,92593,92595],{"class":38,"line":46},[36,92586,1789],{"class":49},[36,92588,51377],{"class":52042},[36,92590,52058],{"class":2713},[36,92592,54],{"class":49},[36,92594,52063],{"class":998},[36,92596,52049],{"class":49},[36,92598,92599],{"class":38,"line":78},[36,92600,194],{"emptyLinePlaceholder":193},[36,92602,92603,92605,92607],{"class":38,"line":125},[36,92604,1789],{"class":49},[36,92606,52076],{"class":52042},[36,92608,52049],{"class":49},[36,92610,92611,92613,92615,92617,92619,92621],{"class":38,"line":131},[36,92612,52886],{"class":49},[36,92614,52086],{"class":52042},[36,92616,52089],{"class":2713},[36,92618,54],{"class":49},[36,92620,52094],{"class":998},[36,92622,59869],{"class":49},[36,92624,92625,92627,92629,92631,92633,92635,92637,92639,92641],{"class":38,"line":396},[36,92626,52886],{"class":49},[36,92628,52086],{"class":52042},[36,92630,52105],{"class":2713},[36,92632,54],{"class":49},[36,92634,52110],{"class":998},[36,92636,52113],{"class":2713},[36,92638,54],{"class":49},[36,92640,52118],{"class":998},[36,92642,59869],{"class":49},[36,92644,92645,92647,92649,92651,92653,92655,92657,92659,92661],{"class":38,"line":407},[36,92646,52886],{"class":49},[36,92648,52086],{"class":52042},[36,92650,15664],{"class":2713},[36,92652,54],{"class":49},[36,92654,52133],{"class":998},[36,92656,52113],{"class":2713},[36,92658,54],{"class":49},[36,92660,52140],{"class":998},[36,92662,59869],{"class":49},[36,92664,92665,92667,92669,92671,92673,92676,92678,92680,92683],{"class":38,"line":2061},[36,92666,52886],{"class":49},[36,92668,52086],{"class":52042},[36,92670,15664],{"class":2713},[36,92672,54],{"class":49},[36,92674,92675],{"class":998},"\"referrer\"",[36,92677,52113],{"class":2713},[36,92679,54],{"class":49},[36,92681,92682],{"class":998},"\"never\"",[36,92684,59869],{"class":49},[36,92686,92687,92689,92691,92694,92696],{"class":38,"line":2067},[36,92688,52886],{"class":49},[36,92690,52149],{"class":52042},[36,92692,92693],{"class":49},">综合案例\u003C\u002F",[36,92695,52149],{"class":52042},[36,92697,52049],{"class":49},[36,92699,92700,92702,92704],{"class":38,"line":2079},[36,92701,52886],{"class":49},[36,92703,807],{"class":52042},[36,92705,52049],{"class":49},[36,92707,92708,92710],{"class":38,"line":2362},[36,92709,7150],{"class":52042},[36,92711,16316],{"class":49},[36,92713,92714,92716,92718,92720],{"class":38,"line":2367},[36,92715,55437],{"class":60},[36,92717,52179],{"class":49},[36,92719,643],{"class":60},[36,92721,2040],{"class":49},[36,92723,92724,92726,92728,92730],{"class":38,"line":2373},[36,92725,55448],{"class":60},[36,92727,52179],{"class":49},[36,92729,643],{"class":60},[36,92731,2040],{"class":49},[36,92733,92734,92736,92738,92740],{"class":38,"line":2378},[36,92735,73338],{"class":60},[36,92737,52179],{"class":49},[36,92739,61247],{"class":60},[36,92741,2040],{"class":49},[36,92743,92744],{"class":38,"line":2392},[36,92745,2937],{"class":49},[36,92747,92748],{"class":38,"line":2397},[36,92749,194],{"emptyLinePlaceholder":193},[36,92751,92752,92755],{"class":38,"line":2403},[36,92753,92754],{"class":2713},"    .container",[36,92756,16316],{"class":49},[36,92758,92759,92761,92763,92766,92768],{"class":38,"line":2424},[36,92760,55513],{"class":60},[36,92762,52179],{"class":49},[36,92764,92765],{"class":60},"1200",[36,92767,52234],{"class":53},[36,92769,2040],{"class":49},[36,92771,92772,92774,92776,92778,92780],{"class":38,"line":2429},[36,92773,55448],{"class":60},[36,92775,52179],{"class":49},[36,92777,643],{"class":60},[36,92779,52298],{"class":60},[36,92781,2040],{"class":49},[36,92783,92784],{"class":38,"line":2443},[36,92785,2937],{"class":49},[36,92787,92788],{"class":38,"line":2448},[36,92789,194],{"emptyLinePlaceholder":193},[36,92791,92792,92795,92798],{"class":38,"line":2477},[36,92793,92794],{"class":2713},"    .video",[36,92796,92797],{"class":52042}," video",[36,92799,16316],{"class":49},[36,92801,92802,92804,92806,92808,92810],{"class":38,"line":2482},[36,92803,55513],{"class":60},[36,92805,52179],{"class":49},[36,92807,67],{"class":60},[36,92809,1214],{"class":53},[36,92811,2040],{"class":49},[36,92813,92814,92816,92818,92820,92822,92824],{"class":38,"line":2499},[36,92815,55437],{"class":60},[36,92817,52179],{"class":49},[36,92819,72],{"class":60},[36,92821,52234],{"class":53},[36,92823,4842],{"class":60},[36,92825,2040],{"class":49},[36,92827,92828],{"class":38,"line":2504},[36,92829,2937],{"class":49},[36,92831,92832],{"class":38,"line":2509},[36,92833,194],{"emptyLinePlaceholder":193},[36,92835,92836,92839],{"class":38,"line":2514},[36,92837,92838],{"class":2713},"    .elevator",[36,92840,16316],{"class":49},[36,92842,92843,92845,92847,92849],{"class":38,"line":2528},[36,92844,55501],{"class":60},[36,92846,52179],{"class":49},[36,92848,86975],{"class":60},[36,92850,2040],{"class":49},[36,92852,92853,92855,92857,92860,92862],{"class":38,"line":2533},[36,92854,55689],{"class":60},[36,92856,52179],{"class":49},[36,92858,92859],{"class":60},"280",[36,92861,52234],{"class":53},[36,92863,2040],{"class":49},[36,92865,92866,92868,92870,92872,92874],{"class":38,"line":3326},[36,92867,87169],{"class":60},[36,92869,52179],{"class":49},[36,92871,72],{"class":60},[36,92873,52234],{"class":53},[36,92875,2040],{"class":49},[36,92877,92878,92880,92882,92884],{"class":38,"line":3340},[36,92879,86982],{"class":60},[36,92881,52179],{"class":49},[36,92883,86987],{"class":60},[36,92885,2040],{"class":49},[36,92887,92888,92890,92892,92894],{"class":38,"line":3348},[36,92889,62463],{"class":60},[36,92891,52179],{"class":49},[36,92893,61584],{"class":60},[36,92895,2040],{"class":49},[36,92897,92898,92900,92902,92904,92906,92908,92910],{"class":38,"line":3353},[36,92899,62719],{"class":60},[36,92901,52179],{"class":49},[36,92903,61],{"class":60},[36,92905,52234],{"class":53},[36,92907,52263],{"class":60},[36,92909,62986],{"class":60},[36,92911,2040],{"class":49},[36,92913,92914,92916,92918,92920,92922],{"class":38,"line":3359},[36,92915,55513],{"class":60},[36,92917,52179],{"class":49},[36,92919,1786],{"class":60},[36,92921,52234],{"class":53},[36,92923,2040],{"class":49},[36,92925,92926],{"class":38,"line":3365},[36,92927,2937],{"class":49},[36,92929,92930],{"class":38,"line":3370},[36,92931,194],{"emptyLinePlaceholder":193},[36,92933,92934,92936,92938],{"class":38,"line":8695},[36,92935,92838],{"class":2713},[36,92937,2148],{"class":52042},[36,92939,16316],{"class":49},[36,92941,92942,92944,92946,92948],{"class":38,"line":8719},[36,92943,55751],{"class":60},[36,92945,52179],{"class":49},[36,92947,61611],{"class":60},[36,92949,2040],{"class":49},[36,92951,92952,92954,92956,92958,92960],{"class":38,"line":8724},[36,92953,55437],{"class":60},[36,92955,52179],{"class":49},[36,92957,332],{"class":60},[36,92959,52234],{"class":53},[36,92961,2040],{"class":49},[36,92963,92964,92966,92968,92970],{"class":38,"line":8730},[36,92965,64712],{"class":60},[36,92967,52179],{"class":49},[36,92969,55479],{"class":60},[36,92971,2040],{"class":49},[36,92973,92974,92976,92978,92980],{"class":38,"line":8757},[36,92975,58028],{"class":60},[36,92977,52179],{"class":49},[36,92979,52334],{"class":60},[36,92981,2040],{"class":49},[36,92983,92984,92986,92988,92990],{"class":38,"line":8762},[36,92985,58158],{"class":60},[36,92987,52179],{"class":49},[36,92989,62812],{"class":60},[36,92991,2040],{"class":49},[36,92993,92994],{"class":38,"line":8768},[36,92995,2937],{"class":49},[36,92997,92998],{"class":38,"line":8780},[36,92999,194],{"emptyLinePlaceholder":193},[36,93001,93002,93004,93006,93008],{"class":38,"line":8792},[36,93003,92838],{"class":2713},[36,93005,2148],{"class":52042},[36,93007,64766],{"class":2713},[36,93009,16316],{"class":49},[36,93011,93012,93014,93016,93019],{"class":38,"line":8804},[36,93013,58158],{"class":60},[36,93015,52179],{"class":49},[36,93017,93018],{"class":60},"#1286ff",[36,93020,2040],{"class":49},[36,93022,93023],{"class":38,"line":10463},[36,93024,2937],{"class":49},[36,93026,93027,93029,93031],{"class":38,"line":10488},[36,93028,53159],{"class":49},[36,93030,807],{"class":52042},[36,93032,52049],{"class":49},[36,93034,93035,93037,93039],{"class":38,"line":10511},[36,93036,52527],{"class":49},[36,93038,52076],{"class":52042},[36,93040,52049],{"class":49},[36,93042,93043],{"class":38,"line":10535},[36,93044,194],{"emptyLinePlaceholder":193},[36,93046,93047,93049,93051],{"class":38,"line":10540},[36,93048,1789],{"class":49},[36,93050,52542],{"class":52042},[36,93052,52049],{"class":49},[36,93054,93055,93057,93059,93061,93063,93066],{"class":38,"line":10545},[36,93056,52886],{"class":49},[36,93058,52353],{"class":52042},[36,93060,54228],{"class":2713},[36,93062,54],{"class":49},[36,93064,93065],{"class":998},"\"container\"",[36,93067,52049],{"class":49},[36,93069,93070,93072,93074,93076,93078,93081],{"class":38,"line":10550},[36,93071,52083],{"class":49},[36,93073,52353],{"class":52042},[36,93075,54228],{"class":2713},[36,93077,54],{"class":49},[36,93079,93080],{"class":998},"\"header\"",[36,93082,52049],{"class":49},[36,93084,93085,93087,93089,93091,93093,93096],{"class":38,"line":10559},[36,93086,55976],{"class":49},[36,93088,50],{"class":52042},[36,93090,61799],{"class":2713},[36,93092,54],{"class":49},[36,93094,93095],{"class":998},"\"http:\u002F\u002Fpip.itcast.cn\"",[36,93097,52049],{"class":49},[36,93099,93100,93102,93104,93106,93108,93111,93113,93115,93117],{"class":38,"line":10564},[36,93101,56044],{"class":49},[36,93103,2212],{"class":52042},[36,93105,55981],{"class":2713},[36,93107,54],{"class":49},[36,93109,93110],{"class":998},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[36,93112,55989],{"class":2713},[36,93114,54],{"class":49},[36,93116,8399],{"class":998},[36,93118,59869],{"class":49},[36,93120,93121,93123,93125],{"class":38,"line":10570},[36,93122,56149],{"class":49},[36,93124,50],{"class":52042},[36,93126,52049],{"class":49},[36,93128,93129,93131,93133],{"class":38,"line":10591},[36,93130,52518],{"class":49},[36,93132,52353],{"class":52042},[36,93134,52049],{"class":49},[36,93136,93137,93139,93141,93143,93145,93148],{"class":38,"line":10597},[36,93138,52083],{"class":49},[36,93140,52353],{"class":52042},[36,93142,54228],{"class":2713},[36,93144,54],{"class":49},[36,93146,93147],{"class":998},"\"video\"",[36,93149,52049],{"class":49},[36,93151,93152,93154,93156,93158,93160,93163,93166,93168,93170],{"class":38,"line":10611},[36,93153,55976],{"class":49},[36,93155,28928],{"class":52042},[36,93157,55981],{"class":2713},[36,93159,54],{"class":49},[36,93161,93162],{"class":998},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[36,93164,93165],{"class":2713}," controls",[36,93167,56056],{"class":49},[36,93169,28928],{"class":52042},[36,93171,52049],{"class":49},[36,93173,93174,93176,93178],{"class":38,"line":10617},[36,93175,52518],{"class":49},[36,93177,52353],{"class":52042},[36,93179,52049],{"class":49},[36,93181,93182,93184,93186,93188,93190,93193],{"class":38,"line":10644},[36,93183,52083],{"class":49},[36,93185,52353],{"class":52042},[36,93187,54228],{"class":2713},[36,93189,54],{"class":49},[36,93191,93192],{"class":998},"\"elevator\"",[36,93194,52049],{"class":49},[36,93196,93197,93199,93201,93203,93205,93207,93210,93212,93214,93217,93219],{"class":38,"line":10653},[36,93198,55976],{"class":49},[36,93200,50],{"class":52042},[36,93202,61799],{"class":2713},[36,93204,54],{"class":49},[36,93206,64978],{"class":998},[36,93208,93209],{"class":2713}," data-ref",[36,93211,54],{"class":49},[36,93213,93147],{"class":998},[36,93215,93216],{"class":49},">视频介绍\u003C\u002F",[36,93218,50],{"class":52042},[36,93220,52049],{"class":49},[36,93222,93223,93225,93227,93229,93231,93233,93235,93237,93240,93243,93245],{"class":38,"line":10659},[36,93224,55976],{"class":49},[36,93226,50],{"class":52042},[36,93228,61799],{"class":2713},[36,93230,54],{"class":49},[36,93232,64978],{"class":998},[36,93234,93209],{"class":2713},[36,93236,54],{"class":49},[36,93238,93239],{"class":998},"\"intro\"",[36,93241,93242],{"class":49},">课程简介\u003C\u002F",[36,93244,50],{"class":52042},[36,93246,52049],{"class":49},[36,93248,93249,93251,93253,93255,93257,93259,93261,93263,93266,93269,93271],{"class":38,"line":10667},[36,93250,55976],{"class":49},[36,93252,50],{"class":52042},[36,93254,61799],{"class":2713},[36,93256,54],{"class":49},[36,93258,64978],{"class":998},[36,93260,93209],{"class":2713},[36,93262,54],{"class":49},[36,93264,93265],{"class":998},"\"outline\"",[36,93267,93268],{"class":49},">评论列表\u003C\u002F",[36,93270,50],{"class":52042},[36,93272,52049],{"class":49},[36,93274,93275,93277,93279],{"class":38,"line":10672},[36,93276,52518],{"class":49},[36,93278,52353],{"class":52042},[36,93280,52049],{"class":49},[36,93282,93283,93285,93287],{"class":38,"line":17348},[36,93284,53159],{"class":49},[36,93286,52353],{"class":52042},[36,93288,52049],{"class":49},[36,93290,93291,93293,93295,93297,93299,93302,93304,93306],{"class":38,"line":17354},[36,93292,52886],{"class":49},[36,93294,52555],{"class":52042},[36,93296,55981],{"class":2713},[36,93298,54],{"class":49},[36,93300,93301],{"class":998},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[36,93303,56056],{"class":49},[36,93305,52555],{"class":52042},[36,93307,52049],{"class":49},[36,93309,93310,93312,93314],{"class":38,"line":17377},[36,93311,52886],{"class":49},[36,93313,52555],{"class":52042},[36,93315,52049],{"class":49},[36,93317,93318],{"class":38,"line":17383},[36,93319,93320],{"class":42},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[36,93322,93323,93325,93327,93329,93331,93333,93335,93338],{"class":38,"line":17406},[36,93324,11966],{"class":53},[36,93326,92797],{"class":60},[36,93328,14308],{"class":53},[36,93330,55138],{"class":49},[36,93332,55141],{"class":2713},[36,93334,901],{"class":49},[36,93336,93337],{"class":998},"'video'",[36,93339,75],{"class":49},[36,93341,93342],{"class":38,"line":17420},[36,93343,93344],{"class":42},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[36,93346,93347,93350,93352,93354,93356,93359,93361],{"class":38,"line":17440},[36,93348,93349],{"class":49},"    video.ontimeupdate ",[36,93351,54],{"class":53},[36,93353,89097],{"class":49},[36,93355,91915],{"class":2713},[36,93357,93358],{"class":49},"(() ",[36,93360,85464],{"class":53},[36,93362,16316],{"class":49},[36,93364,93365],{"class":38,"line":17446},[36,93366,93367],{"class":42},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[36,93369,93370],{"class":38,"line":17457},[36,93371,93372],{"class":42},"      \u002F\u002F 控制台输出当前的时间\n",[36,93374,93375,93378],{"class":38,"line":17480},[36,93376,93377],{"class":42},"      \u002F\u002F console.log(video.currentTime)",[36,93379,93380],{"class":42},"  \u002F\u002F获得当前的视频时间\n",[36,93382,93383],{"class":38,"line":17502},[36,93384,93385],{"class":42},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[36,93387,93388,93390,93392,93394,93397],{"class":38,"line":17507},[36,93389,75425],{"class":49},[36,93391,72396],{"class":2713},[36,93393,901],{"class":49},[36,93395,93396],{"class":998},"'currentTime'",[36,93398,93399],{"class":49},", video.currentTime)\n",[36,93401,93402,93404,93406],{"class":38,"line":17513},[36,93403,55277],{"class":49},[36,93405,7157],{"class":60},[36,93407,75],{"class":49},[36,93409,93410],{"class":38,"line":17527},[36,93411,93412],{"class":42},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[36,93414,93415,93418,93421,93423,93426,93428],{"class":38,"line":17540},[36,93416,93417],{"class":49},"    video.",[36,93419,93420],{"class":2713},"onloadeddata",[36,93422,14308],{"class":53},[36,93424,93425],{"class":49}," () ",[36,93427,85464],{"class":53},[36,93429,16316],{"class":49},[36,93431,93432],{"class":38,"line":17545},[36,93433,60754],{"class":42},[36,93435,93436],{"class":38,"line":17559},[36,93437,93438],{"class":42},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[36,93440,93441,93444,93446,93449,93451,93453,93455,93457,93459],{"class":38,"line":17564},[36,93442,93443],{"class":49},"      video.currentTime ",[36,93445,54],{"class":53},[36,93447,93448],{"class":49}," localStorage.",[36,93450,72427],{"class":2713},[36,93452,901],{"class":49},[36,93454,93396],{"class":998},[36,93456,14458],{"class":49},[36,93458,72099],{"class":53},[36,93460,48075],{"class":60},[36,93462,93463],{"class":38,"line":17570},[36,93464,2937],{"class":49},[36,93466,93467,93469,93471],{"class":38,"line":17575},[36,93468,53159],{"class":49},[36,93470,52555],{"class":52042},[36,93472,52049],{"class":49},[36,93474,93475,93477,93479],{"class":38,"line":17589},[36,93476,52527],{"class":49},[36,93478,52542],{"class":52042},[36,93480,52049],{"class":49},[36,93482,93483],{"class":38,"line":17594},[36,93484,194],{"emptyLinePlaceholder":193},[36,93486,93487,93489,93491],{"class":38,"line":17599},[36,93488,52527],{"class":49},[36,93490,51377],{"class":52042},[36,93492,52049],{"class":49},[807,93494,93495],{},"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":46,"depth":46,"links":93497},[93498,93503,93507,93508,93509,93514,93519,93520,93521,93522,93529,93534,93535,93545,93549,93550,93554],{"id":77433,"depth":46,"text":77434,"children":93499},[93500,93501,93502],{"id":77437,"depth":78,"text":77438},{"id":77462,"depth":78,"text":77463},{"id":77474,"depth":78,"text":77475},{"id":77486,"depth":46,"text":77487,"children":93504},[93505,93506],{"id":77490,"depth":78,"text":77491},{"id":77505,"depth":78,"text":77506},{"id":77557,"depth":46,"text":77558},{"id":77601,"depth":46,"text":77602},{"id":77618,"depth":46,"text":77619,"children":93510},[93511,93512,93513],{"id":77622,"depth":78,"text":77623},{"id":77635,"depth":78,"text":77636},{"id":77740,"depth":78,"text":77741},{"id":78029,"depth":46,"text":78030,"children":93515},[93516,93517,93518],{"id":78033,"depth":78,"text":78034},{"id":78476,"depth":78,"text":78477},{"id":78887,"depth":78,"text":78888},{"id":78950,"depth":46,"text":78951},{"id":79029,"depth":46,"text":79030},{"id":79122,"depth":46,"text":79123},{"id":80967,"depth":46,"text":80968,"children":93523},[93524,93525,93526,93527,93528],{"id":80971,"depth":78,"text":80972},{"id":80983,"depth":78,"text":80984},{"id":81202,"depth":78,"text":81203},{"id":81220,"depth":78,"text":81221},{"id":81280,"depth":78,"text":81281},{"id":85548,"depth":46,"text":85549,"children":93530},[93531,93532,93533],{"id":85552,"depth":78,"text":85553},{"id":85570,"depth":78,"text":85571},{"id":85596,"depth":78,"text":85597},{"id":85605,"depth":46,"text":85606},{"id":85627,"depth":46,"text":85628,"children":93536},[93537,93538,93539,93540,93541,93542,93543,93544],{"id":85631,"depth":78,"text":85632},{"id":85892,"depth":78,"text":85893},{"id":86078,"depth":78,"text":86079},{"id":86445,"depth":78,"text":86446},{"id":86561,"depth":78,"text":86562},{"id":86597,"depth":78,"text":86598},{"id":86644,"depth":78,"text":86645},{"id":86678,"depth":78,"text":86679},{"id":88041,"depth":46,"text":88042,"children":93546},[93547,93548],{"id":88045,"depth":78,"text":88046},{"id":88082,"depth":78,"text":88083},{"id":89437,"depth":46,"text":89438},{"id":89808,"depth":46,"text":89809,"children":93551},[93552,93553],{"id":89812,"depth":78,"text":89813},{"id":89846,"depth":78,"text":89847},{"id":90575,"depth":46,"text":90576,"children":93555},[93556,93557,93558,93559],{"id":90579,"depth":78,"text":90580},{"id":91537,"depth":78,"text":91538},{"id":92479,"depth":78,"text":92480},{"id":92553,"depth":78,"text":92554},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77422,"description":823},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93566,"title":93567,"body":93568,"description":93579,"extension":824,"meta":93580,"navigation":193,"path":93582,"seo":93583,"stem":93584,"__hash__":93585},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93569,"toc":93577},[93570],[14,93571,93572,93573],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[50,93574,93575],{"href":93575,"rel":93576},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24609],{"title":31,"searchDepth":46,"depth":46,"links":93578},[],"三件套第三套学习",{"category":93581},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93567,"description":93579},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93587,"title":93588,"body":93589,"description":823,"extension":824,"meta":93694,"navigation":193,"path":93695,"seo":93696,"stem":93697,"__hash__":93698},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93590,"toc":93689},[93591,93598,93601,93604,93607,93611,93620,93623,93626,93630,93639,93642,93646,93649,93669,93672,93686],[14,93592,93593],{},[50,93594,93597],{"href":93595,"rel":93596},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24609],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93599,93588],{"id":93600},"_1安装",[14,93602,93603],{},"numpy是科学计算基础库,底层是C语言",[14,93605,93606],{},"三种方式：",[21,93608,93610],{"id":93609},"_11-通过pip安装","1.1 通过pip安装",[26,93612,93614],{"className":28,"code":93613,"language":30,"meta":31,"style":31},"pip install numpy\n",[33,93615,93616],{"__ignoreMap":31},[36,93617,93618],{"class":38,"line":39},[36,93619,93613],{"class":49},[14,93621,93622],{},"首选方式，自动处理依赖项",[14,93624,93625],{},"在提示系统命令符中使用cmd",[21,93627,93629],{"id":93628},"_12-通过anaconda安装","1.2 通过Anaconda安装",[26,93631,93633],{"className":28,"code":93632,"language":30,"meta":31,"style":31},"conda install numpy\n",[33,93634,93635],{"__ignoreMap":31},[36,93636,93637],{"class":38,"line":39},[36,93638,93632],{"class":49},[14,93640,93641],{},"自动解决环境依赖",[21,93643,93645],{"id":93644},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,93647,93648],{},"对于Debian\u002FUbuntu",[26,93650,93652],{"className":28,"code":93651,"language":30,"meta":31,"style":31},"sudo apt-get install python3-numpy\n",[33,93653,93654],{"__ignoreMap":31},[36,93655,93656,93659,93661,93664,93666],{"class":38,"line":39},[36,93657,93658],{"class":49},"sudo apt",[36,93660,1414],{"class":53},[36,93662,93663],{"class":49},"get install python3",[36,93665,1414],{"class":53},[36,93667,93668],{"class":49},"numpy\n",[14,93670,93671],{},"对于Fedora:",[26,93673,93675],{"className":28,"code":93674,"language":30,"meta":31,"style":31},"sudo dnf install python3-numpy\n",[33,93676,93677],{"__ignoreMap":31},[36,93678,93679,93682,93684],{"class":38,"line":39},[36,93680,93681],{"class":49},"sudo dnf install python3",[36,93683,1414],{"class":53},[36,93685,93668],{"class":49},[807,93687,93688],{},"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":46,"depth":46,"links":93690},[93691,93692,93693],{"id":93609,"depth":46,"text":93610},{"id":93628,"depth":46,"text":93629},{"id":93644,"depth":46,"text":93645},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93588,"description":823},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93700,"title":93701,"body":93702,"description":823,"extension":824,"meta":93811,"navigation":193,"path":93812,"seo":93813,"stem":93814,"__hash__":93815},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93703,"toc":93809},[93704,93707,93710,93713,93716,93719,93722,93725,93728,93731,93803,93806],[10,93705,93701],{"id":93706},"_10算数函数",[14,93708,93709],{},"加减乘除运算跟python基础语法没区别",[14,93711,93712],{},"除了python那种方法外还可以使用函数",[14,93714,93715],{},"加：np.add(a,b)",[14,93717,93718],{},"减：np.subtract(a,b)",[14,93720,93721],{},"乘：np.multiply(a,b)",[14,93723,93724],{},"除：np.divide(a,b) == a\u002Fb",[14,93726,93727],{},"取余：np.mod(a,b) == a%b",[14,93729,93730],{},"必须会的用法：",[26,93732,93734],{"className":28,"code":93733,"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,93735,93736,93756,93776,93786,93798],{"__ignoreMap":31},[36,93737,93738,93740,93742,93744,93746,93748,93750,93752,93754],{"class":38,"line":39},[36,93739,50],{"class":49},[36,93741,54],{"class":53},[36,93743,274],{"class":49},[36,93745,1305],{"class":60},[36,93747,284],{"class":49},[36,93749,162],{"class":60},[36,93751,64],{"class":49},[36,93753,162],{"class":60},[36,93755,75],{"class":49},[36,93757,93758,93760,93762,93764,93766,93768,93770,93772,93774],{"class":38,"line":46},[36,93759,321],{"class":49},[36,93761,54],{"class":53},[36,93763,610],{"class":49},[36,93765,332],{"class":60},[36,93767,64],{"class":49},[36,93769,332],{"class":60},[36,93771,64],{"class":49},[36,93773,332],{"class":60},[36,93775,165],{"class":49},[36,93777,93778,93781,93783],{"class":38,"line":78},[36,93779,93780],{"class":49},"result",[36,93782,54],{"class":53},[36,93784,93785],{"class":49},"np.empty_like(a)\n",[36,93787,93788,93791,93793,93795],{"class":38,"line":125},[36,93789,93790],{"class":49},"np.add(a,b,",[36,93792,417],{"class":416},[36,93794,54],{"class":53},[36,93796,93797],{"class":49},"result)\n",[36,93799,93800],{"class":38,"line":131},[36,93801,93802],{"class":49},"result\n",[14,93804,93805],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[807,93807,93808],{},"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":46,"depth":46,"links":93810},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93701,"description":823},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":4,"title":5,"body":93817,"description":823,"extension":824,"meta":94490,"navigation":193,"path":826,"seo":94491,"stem":828,"__hash__":829},{"type":7,"value":93818,"toc":94477},[93819,93821,93823,93825,93827,93861,93863,93903,93959,93961,93963,93999,94001,94041,94043,94075,94077,94139,94141,94199,94201,94203,94205,94207,94209,94241,94243,94279,94281,94349,94351,94353,94413,94415,94475],[10,93820,5],{"id":12},[14,93822,16],{},[14,93824,19],{},[21,93826,24],{"id":23},[26,93828,93829],{"className":28,"code":29,"language":30,"meta":31,"style":31},[33,93830,93831,93835,93855],{"__ignoreMap":31},[36,93832,93833],{"class":38,"line":39},[36,93834,43],{"class":42},[36,93836,93837,93839,93841,93843,93845,93847,93849,93851,93853],{"class":38,"line":46},[36,93838,50],{"class":49},[36,93840,54],{"class":53},[36,93842,57],{"class":49},[36,93844,61],{"class":60},[36,93846,64],{"class":49},[36,93848,67],{"class":60},[36,93850,64],{"class":49},[36,93852,72],{"class":60},[36,93854,75],{"class":49},[36,93856,93857,93859],{"class":38,"line":78},[36,93858,81],{"class":49},[36,93860,84],{"class":42},[21,93862,88],{"id":87},[26,93864,93865],{"className":28,"code":91,"language":30,"meta":31,"style":31},[33,93866,93867,93871,93891,93895,93899],{"__ignoreMap":31},[36,93868,93869],{"class":38,"line":39},[36,93870,43],{"class":42},[36,93872,93873,93875,93877,93879,93881,93883,93885,93887,93889],{"class":38,"line":46},[36,93874,50],{"class":49},[36,93876,54],{"class":53},[36,93878,57],{"class":49},[36,93880,61],{"class":60},[36,93882,64],{"class":49},[36,93884,67],{"class":60},[36,93886,64],{"class":49},[36,93888,72],{"class":60},[36,93890,75],{"class":49},[36,93892,93893],{"class":38,"line":78},[36,93894,122],{"class":49},[36,93896,93897],{"class":38,"line":125},[36,93898,128],{"class":42},[36,93900,93901],{"class":38,"line":131},[36,93902,134],{"class":49},[26,93904,93905],{"className":28,"code":137,"language":30,"meta":31,"style":31},[33,93906,93907,93927,93947,93951],{"__ignoreMap":31},[36,93908,93909,93911,93913,93915,93917,93919,93921,93923,93925],{"class":38,"line":39},[36,93910,144],{"class":49},[36,93912,54],{"class":53},[36,93914,149],{"class":49},[36,93916,61],{"class":60},[36,93918,154],{"class":49},[36,93920,157],{"class":60},[36,93922,154],{"class":49},[36,93924,162],{"class":60},[36,93926,165],{"class":49},[36,93928,93929,93931,93933,93935,93937,93939,93941,93943,93945],{"class":38,"line":46},[36,93930,170],{"class":49},[36,93932,54],{"class":53},[36,93934,149],{"class":49},[36,93936,162],{"class":60},[36,93938,154],{"class":49},[36,93940,181],{"class":60},[36,93942,154],{"class":49},[36,93944,186],{"class":60},[36,93946,165],{"class":49},[36,93948,93949],{"class":38,"line":78},[36,93950,194],{"emptyLinePlaceholder":193},[36,93952,93953,93955,93957],{"class":38,"line":125},[36,93954,199],{"class":60},[36,93956,202],{"class":49},[36,93958,205],{"class":42},[21,93960,209],{"id":208},[14,93962,212],{},[26,93964,93965],{"className":28,"code":215,"language":30,"meta":31,"style":31},[33,93966,93967,93971,93991,93995],{"__ignoreMap":31},[36,93968,93969],{"class":38,"line":39},[36,93970,43],{"class":42},[36,93972,93973,93975,93977,93979,93981,93983,93985,93987,93989],{"class":38,"line":46},[36,93974,50],{"class":49},[36,93976,54],{"class":53},[36,93978,57],{"class":49},[36,93980,61],{"class":60},[36,93982,64],{"class":49},[36,93984,67],{"class":60},[36,93986,64],{"class":49},[36,93988,72],{"class":60},[36,93990,75],{"class":49},[36,93992,93993],{"class":38,"line":78},[36,93994,246],{"class":42},[36,93996,93997],{"class":38,"line":125},[36,93998,251],{"class":49},[14,94000,254],{},[26,94002,94003],{"className":28,"code":257,"language":30,"meta":31,"style":31},[33,94004,94005,94009,94033,94037],{"__ignoreMap":31},[36,94006,94007],{"class":38,"line":39},[36,94008,264],{"class":42},[36,94010,94011,94013,94015,94017,94019,94021,94023,94025,94027,94029,94031],{"class":38,"line":46},[36,94012,269],{"class":49},[36,94014,54],{"class":53},[36,94016,274],{"class":49},[36,94018,61],{"class":60},[36,94020,64],{"class":49},[36,94022,281],{"class":60},[36,94024,284],{"class":49},[36,94026,162],{"class":60},[36,94028,64],{"class":49},[36,94030,186],{"class":60},[36,94032,75],{"class":49},[36,94034,94035],{"class":38,"line":78},[36,94036,297],{"class":42},[36,94038,94039],{"class":38,"line":125},[36,94040,302],{"class":49},[21,94042,306],{"id":305},[26,94044,94045],{"className":28,"code":309,"language":30,"meta":31,"style":31},[33,94046,94047,94051,94067,94071],{"__ignoreMap":31},[36,94048,94049],{"class":38,"line":39},[36,94050,316],{"class":42},[36,94052,94053,94055,94057,94059,94061,94063,94065],{"class":38,"line":46},[36,94054,321],{"class":49},[36,94056,54],{"class":53},[36,94058,274],{"class":49},[36,94060,61],{"class":60},[36,94062,64],{"class":49},[36,94064,332],{"class":60},[36,94066,75],{"class":49},[36,94068,94069],{"class":38,"line":78},[36,94070,339],{"class":49},[36,94072,94073],{"class":38,"line":125},[36,94074,344],{"class":42},[21,94076,348],{"id":347},[26,94078,94079],{"className":28,"code":351,"language":30,"meta":31,"style":31},[33,94080,94081,94097,94101,94105,94113,94117,94125],{"__ignoreMap":31},[36,94082,94083,94085,94087,94089,94091,94093,94095],{"class":38,"line":39},[36,94084,321],{"class":49},[36,94086,54],{"class":53},[36,94088,274],{"class":49},[36,94090,61],{"class":60},[36,94092,64],{"class":49},[36,94094,332],{"class":60},[36,94096,75],{"class":49},[36,94098,94099],{"class":38,"line":46},[36,94100,374],{"class":42},[36,94102,94103],{"class":38,"line":78},[36,94104,379],{"class":42},[36,94106,94107,94109,94111],{"class":38,"line":125},[36,94108,384],{"class":49},[36,94110,181],{"class":60},[36,94112,75],{"class":49},[36,94114,94115],{"class":38,"line":131},[36,94116,393],{"class":42},[36,94118,94119,94121,94123],{"class":38,"line":396},[36,94120,399],{"class":49},[36,94122,54],{"class":53},[36,94124,404],{"class":49},[36,94126,94127,94129,94131,94133,94135,94137],{"class":38,"line":407},[36,94128,384],{"class":49},[36,94130,181],{"class":60},[36,94132,64],{"class":49},[36,94134,417],{"class":416},[36,94136,54],{"class":53},[36,94138,422],{"class":49},[21,94140,426],{"id":425},[26,94142,94143],{"className":28,"code":429,"language":30,"meta":31,"style":31},[33,94144,94145,94161,94165,94169,94173,94189],{"__ignoreMap":31},[36,94146,94147,94149,94151,94153,94155,94157,94159],{"class":38,"line":39},[36,94148,321],{"class":49},[36,94150,54],{"class":53},[36,94152,274],{"class":49},[36,94154,61],{"class":60},[36,94156,64],{"class":49},[36,94158,332],{"class":60},[36,94160,75],{"class":49},[36,94162,94163],{"class":38,"line":46},[36,94164,452],{"class":42},[36,94166,94167],{"class":38,"line":78},[36,94168,457],{"class":49},[36,94170,94171],{"class":38,"line":125},[36,94172,393],{"class":42},[36,94174,94175,94177,94179,94181,94183,94185,94187],{"class":38,"line":131},[36,94176,399],{"class":49},[36,94178,54],{"class":53},[36,94180,470],{"class":49},[36,94182,473],{"class":416},[36,94184,54],{"class":53},[36,94186,478],{"class":60},[36,94188,75],{"class":49},[36,94190,94191,94193,94195,94197],{"class":38,"line":396},[36,94192,485],{"class":49},[36,94194,417],{"class":416},[36,94196,54],{"class":53},[36,94198,422],{"class":49},[21,94200,495],{"id":494},[14,94202,498],{},[14,94204,501],{},[14,94206,504],{},[14,94208,507],{},[26,94210,94211],{"className":28,"code":510,"language":30,"meta":31,"style":31},[33,94212,94213,94229,94233,94237],{"__ignoreMap":31},[36,94214,94215,94217,94219,94221,94223,94225,94227],{"class":38,"line":39},[36,94216,321],{"class":49},[36,94218,54],{"class":53},[36,94220,274],{"class":49},[36,94222,61],{"class":60},[36,94224,64],{"class":49},[36,94226,332],{"class":60},[36,94228,75],{"class":49},[36,94230,94231],{"class":38,"line":46},[36,94232,533],{"class":49},[36,94234,94235],{"class":38,"line":78},[36,94236,538],{"class":42},[36,94238,94239],{"class":38,"line":125},[36,94240,543],{"class":42},[21,94242,547],{"id":546},[26,94244,94245],{"className":28,"code":550,"language":30,"meta":31,"style":31},[33,94246,94247,94263,94267,94271,94275],{"__ignoreMap":31},[36,94248,94249,94251,94253,94255,94257,94259,94261],{"class":38,"line":39},[36,94250,321],{"class":49},[36,94252,54],{"class":53},[36,94254,274],{"class":49},[36,94256,61],{"class":60},[36,94258,64],{"class":49},[36,94260,332],{"class":60},[36,94262,75],{"class":49},[36,94264,94265],{"class":38,"line":46},[36,94266,573],{"class":42},[36,94268,94269],{"class":38,"line":78},[36,94270,578],{"class":49},[36,94272,94273],{"class":38,"line":125},[36,94274,538],{"class":42},[36,94276,94277],{"class":38,"line":131},[36,94278,587],{"class":42},[21,94280,591],{"id":590},[26,94282,94283],{"className":28,"code":594,"language":30,"meta":31,"style":31},[33,94284,94285,94289,94337,94341,94345],{"__ignoreMap":31},[36,94286,94287],{"class":38,"line":39},[36,94288,601],{"class":42},[36,94290,94291,94293,94295,94297,94299,94301,94303,94305,94307,94309,94311,94313,94315,94317,94319,94321,94323,94325,94327,94329,94331,94333,94335],{"class":38,"line":46},[36,94292,50],{"class":49},[36,94294,54],{"class":53},[36,94296,610],{"class":49},[36,94298,61],{"class":60},[36,94300,64],{"class":49},[36,94302,181],{"class":60},[36,94304,64],{"class":49},[36,94306,162],{"class":60},[36,94308,64],{"class":49},[36,94310,625],{"class":60},[36,94312,64],{"class":49},[36,94314,162],{"class":60},[36,94316,64],{"class":49},[36,94318,332],{"class":60},[36,94320,64],{"class":49},[36,94322,638],{"class":60},[36,94324,64],{"class":49},[36,94326,643],{"class":60},[36,94328,64],{"class":49},[36,94330,648],{"class":60},[36,94332,64],{"class":49},[36,94334,186],{"class":60},[36,94336,165],{"class":49},[36,94338,94339],{"class":38,"line":78},[36,94340,659],{"class":49},[36,94342,94343],{"class":38,"line":125},[36,94344,538],{"class":42},[36,94346,94347],{"class":38,"line":131},[36,94348,668],{"class":42},[14,94350,671],{},[21,94352,675],{"id":674},[26,94354,94355],{"className":28,"code":678,"language":30,"meta":31,"style":31},[33,94356,94357,94405,94409],{"__ignoreMap":31},[36,94358,94359,94361,94363,94365,94367,94369,94371,94373,94375,94377,94379,94381,94383,94385,94387,94389,94391,94393,94395,94397,94399,94401,94403],{"class":38,"line":39},[36,94360,50],{"class":49},[36,94362,54],{"class":53},[36,94364,610],{"class":49},[36,94366,61],{"class":60},[36,94368,64],{"class":49},[36,94370,181],{"class":60},[36,94372,64],{"class":49},[36,94374,162],{"class":60},[36,94376,64],{"class":49},[36,94378,625],{"class":60},[36,94380,64],{"class":49},[36,94382,162],{"class":60},[36,94384,64],{"class":49},[36,94386,332],{"class":60},[36,94388,64],{"class":49},[36,94390,638],{"class":60},[36,94392,64],{"class":49},[36,94394,643],{"class":60},[36,94396,64],{"class":49},[36,94398,648],{"class":60},[36,94400,64],{"class":49},[36,94402,186],{"class":60},[36,94404,165],{"class":49},[36,94406,94407],{"class":38,"line":46},[36,94408,733],{"class":42},[36,94410,94411],{"class":38,"line":78},[36,94412,738],{"class":49},[21,94414,742],{"id":741},[26,94416,94417],{"className":28,"code":745,"language":30,"meta":31,"style":31},[33,94418,94419,94467,94471],{"__ignoreMap":31},[36,94420,94421,94423,94425,94427,94429,94431,94433,94435,94437,94439,94441,94443,94445,94447,94449,94451,94453,94455,94457,94459,94461,94463,94465],{"class":38,"line":39},[36,94422,50],{"class":49},[36,94424,54],{"class":53},[36,94426,610],{"class":49},[36,94428,61],{"class":60},[36,94430,64],{"class":49},[36,94432,181],{"class":60},[36,94434,64],{"class":49},[36,94436,162],{"class":60},[36,94438,64],{"class":49},[36,94440,625],{"class":60},[36,94442,64],{"class":49},[36,94444,162],{"class":60},[36,94446,64],{"class":49},[36,94448,332],{"class":60},[36,94450,64],{"class":49},[36,94452,638],{"class":60},[36,94454,64],{"class":49},[36,94456,643],{"class":60},[36,94458,64],{"class":49},[36,94460,648],{"class":60},[36,94462,64],{"class":49},[36,94464,186],{"class":60},[36,94466,165],{"class":49},[36,94468,94469],{"class":38,"line":46},[36,94470,800],{"class":42},[36,94472,94473],{"class":38,"line":78},[36,94474,805],{"class":49},[807,94476,809],{},{"title":31,"searchDepth":46,"depth":46,"links":94478},[94479,94480,94481,94482,94483,94484,94485,94486,94487,94488,94489],{"id":23,"depth":46,"text":24},{"id":87,"depth":46,"text":88},{"id":208,"depth":46,"text":209},{"id":305,"depth":46,"text":306},{"id":347,"depth":46,"text":348},{"id":425,"depth":46,"text":426},{"id":494,"depth":46,"text":495},{"id":546,"depth":46,"text":547},{"id":590,"depth":46,"text":591},{"id":674,"depth":46,"text":675},{"id":741,"depth":46,"text":742},{},{"title":5,"description":823},{"id":94493,"title":94494,"body":94495,"description":823,"extension":824,"meta":95150,"navigation":193,"path":95151,"seo":95152,"stem":95153,"__hash__":95154},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94496,"toc":95138},[94497,94500,94504,94507,94723,94727,94730,94939,94943,95009,95014,95018,95021,95024,95062,95066,95069,95074,95078,95081,95084,95089,95093,95096,95100,95103,95106,95111,95115,95118,95121,95126,95130,95135],[10,94498,94494],{"id":94499},"_12其他常用函数",[21,94501,94503],{"id":94502},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,94505,94506],{},"将数组的数据按照行列复制扩展",[26,94508,94510],{"className":28,"code":94509,"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,94511,94512,94528,94537,94541,94546,94551,94564,94568,94573,94578,94583,94587,94592,94616,94628,94632,94636,94641,94646,94651,94656,94660,94673,94677,94681,94686,94691,94696,94701,94706,94710,94714,94719],{"__ignoreMap":31},[36,94513,94514,94516,94518,94520,94522,94524,94526],{"class":38,"line":39},[36,94515,50],{"class":49},[36,94517,54],{"class":53},[36,94519,274],{"class":49},[36,94521,61],{"class":60},[36,94523,64],{"class":49},[36,94525,157],{"class":60},[36,94527,75],{"class":49},[36,94529,94530,94533,94535],{"class":38,"line":46},[36,94531,94532],{"class":49},"np.tile(a,",[36,94534,181],{"class":60},[36,94536,75],{"class":49},[36,94538,94539],{"class":38,"line":78},[36,94540,538],{"class":42},[36,94542,94543],{"class":38,"line":125},[36,94544,94545],{"class":42},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[36,94547,94548],{"class":38,"line":131},[36,94549,94550],{"class":42},"#行复制两次，列复制三次\n",[36,94552,94553,94556,94558,94560,94562],{"class":38,"line":396},[36,94554,94555],{"class":49},"np.tile(a,(",[36,94557,181],{"class":60},[36,94559,64],{"class":49},[36,94561,162],{"class":60},[36,94563,31239],{"class":49},[36,94565,94566],{"class":38,"line":407},[36,94567,538],{"class":42},[36,94569,94570],{"class":38,"line":2061},[36,94571,94572],{"class":998},"'''\n",[36,94574,94575],{"class":38,"line":2067},[36,94576,94577],{"class":998},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[36,94579,94580],{"class":38,"line":2079},[36,94581,94582],{"class":998},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[36,94584,94585],{"class":38,"line":2362},[36,94586,94572],{"class":998},[36,94588,94589],{"class":38,"line":2367},[36,94590,94591],{"class":42},"#创建二维数组\n",[36,94593,94594,94596,94598,94600,94602,94604,94606,94608,94610,94612,94614],{"class":38,"line":2373},[36,94595,269],{"class":49},[36,94597,54],{"class":53},[36,94599,274],{"class":49},[36,94601,61],{"class":60},[36,94603,64],{"class":49},[36,94605,281],{"class":60},[36,94607,284],{"class":49},[36,94609,186],{"class":60},[36,94611,64],{"class":49},[36,94613,162],{"class":60},[36,94615,75],{"class":49},[36,94617,94618,94621,94623,94625],{"class":38,"line":2378},[36,94619,94620],{"class":49},"np.tile(aa,",[36,94622,181],{"class":60},[36,94624,1314],{"class":49},[36,94626,94627],{"class":42},"#一个数的时候就是行\n",[36,94629,94630],{"class":38,"line":2392},[36,94631,538],{"class":42},[36,94633,94634],{"class":38,"line":2397},[36,94635,94572],{"class":998},[36,94637,94638],{"class":38,"line":2403},[36,94639,94640],{"class":998},"array([[ 1,  2,  3,  1,  2,  3],\n",[36,94642,94643],{"class":38,"line":2424},[36,94644,94645],{"class":998},"       [ 4,  5,  6,  4,  5,  6],\n",[36,94647,94648],{"class":38,"line":2429},[36,94649,94650],{"class":998},"       [ 7,  8,  9,  7,  8,  9],\n",[36,94652,94653],{"class":38,"line":2443},[36,94654,94655],{"class":998},"       [10, 11, 12, 10, 11, 12]])\n",[36,94657,94658],{"class":38,"line":2448},[36,94659,94572],{"class":998},[36,94661,94662,94665,94667,94669,94671],{"class":38,"line":2477},[36,94663,94664],{"class":49},"np.tile(aa,(",[36,94666,181],{"class":60},[36,94668,64],{"class":49},[36,94670,162],{"class":60},[36,94672,31239],{"class":49},[36,94674,94675],{"class":38,"line":2482},[36,94676,538],{"class":42},[36,94678,94679],{"class":38,"line":2499},[36,94680,94572],{"class":998},[36,94682,94683],{"class":38,"line":2504},[36,94684,94685],{"class":998},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[36,94687,94688],{"class":38,"line":2509},[36,94689,94690],{"class":998},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[36,94692,94693],{"class":38,"line":2514},[36,94694,94695],{"class":998},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[36,94697,94698],{"class":38,"line":2528},[36,94699,94700],{"class":998},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[36,94702,94703],{"class":38,"line":2533},[36,94704,94705],{"class":998},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[36,94707,94708],{"class":38,"line":3326},[36,94709,94690],{"class":998},[36,94711,94712],{"class":38,"line":3340},[36,94713,94695],{"class":998},[36,94715,94716],{"class":38,"line":3348},[36,94717,94718],{"class":998},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[36,94720,94721],{"class":38,"line":3353},[36,94722,94572],{"class":998},[21,94724,94726],{"id":94725},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94728,94729],{},"repeat()将数组中的每个元素重复若干次",[26,94731,94733],{"className":28,"code":94732,"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,94734,94735,94751,94760,94764,94769,94793,94798,94807,94811,94816,94820,94825,94841,94845,94849,94854,94859,94864,94868,94873,94877,94882,94887,94891,94907,94911,94915,94920,94925,94930,94935],{"__ignoreMap":31},[36,94736,94737,94739,94741,94743,94745,94747,94749],{"class":38,"line":39},[36,94738,50],{"class":49},[36,94740,54],{"class":53},[36,94742,274],{"class":49},[36,94744,61],{"class":60},[36,94746,64],{"class":49},[36,94748,157],{"class":60},[36,94750,75],{"class":49},[36,94752,94753,94756,94758],{"class":38,"line":46},[36,94754,94755],{"class":49},"np.repeat(a,",[36,94757,162],{"class":60},[36,94759,75],{"class":49},[36,94761,94762],{"class":38,"line":78},[36,94763,538],{"class":42},[36,94765,94766],{"class":38,"line":125},[36,94767,94768],{"class":42},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[36,94770,94771,94773,94775,94777,94779,94781,94783,94785,94787,94789,94791],{"class":38,"line":131},[36,94772,269],{"class":49},[36,94774,54],{"class":53},[36,94776,274],{"class":49},[36,94778,61],{"class":60},[36,94780,64],{"class":49},[36,94782,281],{"class":60},[36,94784,284],{"class":49},[36,94786,186],{"class":60},[36,94788,64],{"class":49},[36,94790,162],{"class":60},[36,94792,75],{"class":49},[36,94794,94795],{"class":38,"line":396},[36,94796,94797],{"class":42},"#这个重复之后二维变成一维\n",[36,94799,94800,94803,94805],{"class":38,"line":407},[36,94801,94802],{"class":49},"np.repeat(aa,",[36,94804,181],{"class":60},[36,94806,75],{"class":49},[36,94808,94809],{"class":38,"line":2061},[36,94810,94572],{"class":998},[36,94812,94813],{"class":38,"line":2067},[36,94814,94815],{"class":998},"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,94817,94818],{"class":38,"line":2079},[36,94819,94572],{"class":998},[36,94821,94822],{"class":38,"line":2362},[36,94823,94824],{"class":42},"#指定axis\n",[36,94826,94827,94829,94831,94833,94835,94837,94839],{"class":38,"line":2367},[36,94828,94802],{"class":49},[36,94830,181],{"class":60},[36,94832,64],{"class":49},[36,94834,48256],{"class":416},[36,94836,54],{"class":53},[36,94838,643],{"class":60},[36,94840,75],{"class":49},[36,94842,94843],{"class":38,"line":2373},[36,94844,538],{"class":42},[36,94846,94847],{"class":38,"line":2378},[36,94848,94572],{"class":998},[36,94850,94851],{"class":38,"line":2392},[36,94852,94853],{"class":998},"array([[ 1,  2,  3],\n",[36,94855,94856],{"class":38,"line":2397},[36,94857,94858],{"class":998},"       [ 1,  2,  3],\n",[36,94860,94861],{"class":38,"line":2403},[36,94862,94863],{"class":998},"       [ 4,  5,  6],\n",[36,94865,94866],{"class":38,"line":2424},[36,94867,94863],{"class":998},[36,94869,94870],{"class":38,"line":2429},[36,94871,94872],{"class":998},"       [ 7,  8,  9],\n",[36,94874,94875],{"class":38,"line":2443},[36,94876,94872],{"class":998},[36,94878,94879],{"class":38,"line":2448},[36,94880,94881],{"class":998},"       [10, 11, 12],\n",[36,94883,94884],{"class":38,"line":2477},[36,94885,94886],{"class":998},"       [10, 11, 12]])\n",[36,94888,94889],{"class":38,"line":2482},[36,94890,94572],{"class":998},[36,94892,94893,94895,94897,94899,94901,94903,94905],{"class":38,"line":2499},[36,94894,94802],{"class":49},[36,94896,181],{"class":60},[36,94898,64],{"class":49},[36,94900,48256],{"class":416},[36,94902,54],{"class":53},[36,94904,61],{"class":60},[36,94906,75],{"class":49},[36,94908,94909],{"class":38,"line":2504},[36,94910,538],{"class":42},[36,94912,94913],{"class":38,"line":2509},[36,94914,94572],{"class":998},[36,94916,94917],{"class":38,"line":2514},[36,94918,94919],{"class":998},"array([[ 1,  1,  2,  2,  3,  3],\n",[36,94921,94922],{"class":38,"line":2528},[36,94923,94924],{"class":998},"       [ 4,  4,  5,  5,  6,  6],\n",[36,94926,94927],{"class":38,"line":2533},[36,94928,94929],{"class":998},"       [ 7,  7,  8,  8,  9,  9],\n",[36,94931,94932],{"class":38,"line":3326},[36,94933,94934],{"class":998},"       [10, 10, 11, 11, 12, 12]])\n",[36,94936,94937],{"class":38,"line":3340},[36,94938,94572],{"class":998},[21,94940,94942],{"id":94941},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[26,94944,94946],{"className":28,"code":94945,"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,94947,94948,94964,94969,94981,94985,94990,95000,95004],{"__ignoreMap":31},[36,94949,94950,94952,94954,94956,94958,94960,94962],{"class":38,"line":39},[36,94951,50],{"class":49},[36,94953,54],{"class":53},[36,94955,274],{"class":49},[36,94957,61],{"class":60},[36,94959,64],{"class":49},[36,94961,157],{"class":60},[36,94963,75],{"class":49},[36,94965,94966],{"class":38,"line":46},[36,94967,94968],{"class":42},"#array([，2，3，4])\n",[36,94970,94971,94974,94976,94978],{"class":38,"line":78},[36,94972,94973],{"class":49},"np.roll(a,",[36,94975,181],{"class":60},[36,94977,1314],{"class":49},[36,94979,94980],{"class":42},"#传正数向后调多少位，传负数向前调多少位\n",[36,94982,94983],{"class":38,"line":125},[36,94984,538],{"class":42},[36,94986,94987],{"class":38,"line":131},[36,94988,94989],{"class":42},"#array([3, 4, 1, 2])\n",[36,94991,94992,94994,94996,94998],{"class":38,"line":396},[36,94993,94973],{"class":49},[36,94995,1414],{"class":53},[36,94997,61],{"class":60},[36,94999,75],{"class":49},[36,95001,95002],{"class":38,"line":407},[36,95003,538],{"class":42},[36,95005,95006],{"class":38,"line":2061},[36,95007,95008],{"class":42},"#array([2, 3, 4, 1])\n",[14,95010,95011],{},[2212,95012],{"alt":31,"src":95013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[21,95015,95017],{"id":95016},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,95019,95020],{},"resize()重新调整数组的大小",[14,95022,95023],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[26,95025,95027],{"className":28,"code":95026,"language":30,"meta":31,"style":31},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[33,95028,95029,95034,95047],{"__ignoreMap":31},[36,95030,95031],{"class":38,"line":39},[36,95032,95033],{"class":42},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[36,95035,95036,95039,95041,95043,95045],{"class":38,"line":46},[36,95037,95038],{"class":49},"np.resize(aa,(",[36,95040,181],{"class":60},[36,95042,64],{"class":49},[36,95044,1230],{"class":60},[36,95046,31239],{"class":49},[36,95048,95049,95051,95053,95055,95057,95059],{"class":38,"line":78},[36,95050,95038],{"class":49},[36,95052,181],{"class":60},[36,95054,64],{"class":49},[36,95056,1305],{"class":60},[36,95058,83513],{"class":49},[36,95060,95061],{"class":42},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[21,95063,95065],{"id":95064},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,95067,95068],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,95070,95071],{},[2212,95072],{"alt":31,"src":95073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[21,95075,95077],{"id":95076},"_126-保存加载文件","12.6 保存加载文件",[14,95079,95080],{},"savetxt():将数据保存到txt文件中",[14,95082,95083],{},"loadtxt():从文件加载数据",[14,95085,95086],{},[2212,95087],{"alt":31,"src":95088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[21,95090,95092],{"id":95091},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,95094,95095],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[21,95097,95099],{"id":95098},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,95101,95102],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,95104,95105],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,95107,95108],{},[2212,95109],{"alt":31,"src":95110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[21,95112,95114],{"id":95113},"_129-where语句","12.9 where语句",[14,95116,95117],{},"np.where(条件,x,y)",[14,95119,95120],{},"如果条件为True,对应值为x,否则对应值为y",[14,95122,95123],{},[2212,95124],{"alt":31,"src":95125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[21,95127,95129],{"id":95128},"_1210-dot矩阵","12.10 dot()矩阵",[14,95131,95132],{},[2212,95133],{"alt":31,"src":95134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[807,95136,95137],{},"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":46,"depth":46,"links":95139},[95140,95141,95142,95143,95144,95145,95146,95147,95148,95149],{"id":94502,"depth":46,"text":94503},{"id":94725,"depth":46,"text":94726},{"id":94941,"depth":46,"text":94942},{"id":95016,"depth":46,"text":95017},{"id":95064,"depth":46,"text":95065},{"id":95076,"depth":46,"text":95077},{"id":95091,"depth":46,"text":95092},{"id":95098,"depth":46,"text":95099},{"id":95113,"depth":46,"text":95114},{"id":95128,"depth":46,"text":95129},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94494,"description":823},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":95156,"title":95157,"body":95158,"description":823,"extension":824,"meta":95511,"navigation":193,"path":95512,"seo":95513,"stem":95514,"__hash__":95515},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":95159,"toc":95509},[95160,95163,95166,95169,95172,95175,95240,95242,95506],[10,95161,95157],{"id":95162},"_13数组排序",[14,95164,95165],{},"排序主要用到的方法是np.sort和np.argsort",[14,95167,95168],{},"其中np.sort()对数组直接排序",[14,95170,95171],{},"而np.argsort()是返回排序后的原始索引",[14,95173,95174],{},"①一维数组",[26,95176,95178],{"className":28,"code":95177,"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,95179,95180,95184,95224,95232],{"__ignoreMap":31},[36,95181,95182],{"class":38,"line":39},[36,95183,43],{"class":42},[36,95185,95186,95188,95190,95192,95194,95196,95198,95200,95202,95204,95206,95208,95210,95212,95214,95216,95218,95220,95222],{"class":38,"line":46},[36,95187,50],{"class":49},[36,95189,54],{"class":53},[36,95191,610],{"class":49},[36,95193,162],{"class":60},[36,95195,64],{"class":49},[36,95197,625],{"class":60},[36,95199,64],{"class":49},[36,95201,1280],{"class":60},[36,95203,64],{"class":49},[36,95205,648],{"class":60},[36,95207,64],{"class":49},[36,95209,1168],{"class":60},[36,95211,64],{"class":49},[36,95213,1772],{"class":60},[36,95215,64],{"class":49},[36,95217,1230],{"class":60},[36,95219,64],{"class":49},[36,95221,332],{"class":60},[36,95223,165],{"class":49},[36,95225,95226,95229],{"class":38,"line":78},[36,95227,95228],{"class":49},"np.sort(a)",[36,95230,95231],{"class":42},"#升序排序\n",[36,95233,95234,95237],{"class":38,"line":125},[36,95235,95236],{"class":49},"np.argsort(a)",[36,95238,95239],{"class":42},"#按照元素大小来索引排序\n",[14,95241,254],{},[26,95243,95245],{"className":28,"code":95244,"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,95246,95247,95259,95285,95290,95294,95299,95304,95309,95314,95318,95326,95330,95335,95340,95345,95350,95354,95359,95372,95376,95381,95386,95391,95396,95400,95405,95417,95421,95425,95429,95433,95437,95441,95446,95461,95466,95475,95480,95484,95488,95493,95497,95502],{"__ignoreMap":31},[36,95248,95249,95252,95254,95256],{"class":38,"line":39},[36,95250,95251],{"class":49},"np.random.seed(",[36,95253,643],{"class":60},[36,95255,1314],{"class":49},[36,95257,95258],{"class":42},"#保证每次值一样\n",[36,95260,95261,95263,95265,95267,95269,95271,95273,95275,95277,95279,95281,95283],{"class":38,"line":46},[36,95262,269],{"class":49},[36,95264,54],{"class":53},[36,95266,57],{"class":49},[36,95268,67],{"class":60},[36,95270,64],{"class":49},[36,95272,32238],{"class":416},[36,95274,54],{"class":53},[36,95276,901],{"class":49},[36,95278,186],{"class":60},[36,95280,64],{"class":49},[36,95282,1230],{"class":60},[36,95284,31239],{"class":49},[36,95286,95287],{"class":38,"line":78},[36,95288,95289],{"class":42},"#原数组：\n",[36,95291,95292],{"class":38,"line":125},[36,95293,94572],{"class":998},[36,95295,95296],{"class":38,"line":131},[36,95297,95298],{"class":998},"array([[44, 47, 64, 67, 67,  9],\n",[36,95300,95301],{"class":38,"line":396},[36,95302,95303],{"class":998},"       [83, 21, 36, 87, 70, 88],\n",[36,95305,95306],{"class":38,"line":407},[36,95307,95308],{"class":998},"       [88, 12, 58, 65, 39, 87],\n",[36,95310,95311],{"class":38,"line":2061},[36,95312,95313],{"class":998},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[36,95315,95316],{"class":38,"line":2067},[36,95317,94572],{"class":998},[36,95319,95320,95323],{"class":38,"line":2079},[36,95321,95322],{"class":49},"np.sort(aa)",[36,95324,95325],{"class":42},"#每行进行了排序\n",[36,95327,95328],{"class":38,"line":2362},[36,95329,94572],{"class":998},[36,95331,95332],{"class":38,"line":2367},[36,95333,95334],{"class":998},"array([[ 9, 44, 47, 64, 67, 67],\n",[36,95336,95337],{"class":38,"line":2373},[36,95338,95339],{"class":998},"       [21, 36, 70, 83, 87, 88],\n",[36,95341,95342],{"class":38,"line":2378},[36,95343,95344],{"class":998},"       [12, 39, 58, 65, 87, 88],\n",[36,95346,95347],{"class":38,"line":2392},[36,95348,95349],{"class":998},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[36,95351,95352],{"class":38,"line":2397},[36,95353,94572],{"class":998},[36,95355,95356],{"class":38,"line":2403},[36,95357,95358],{"class":42},"#axis=0时\n",[36,95360,95361,95364,95366,95368,95370],{"class":38,"line":2424},[36,95362,95363],{"class":49},"np.sort(aa,",[36,95365,48256],{"class":416},[36,95367,54],{"class":53},[36,95369,643],{"class":60},[36,95371,75],{"class":49},[36,95373,95374],{"class":38,"line":2429},[36,95375,94572],{"class":998},[36,95377,95378],{"class":38,"line":2443},[36,95379,95380],{"class":998},"array([[44, 12, 36, 37, 25,  9],\n",[36,95382,95383],{"class":38,"line":2448},[36,95384,95385],{"class":998},"       [46, 21, 58, 65, 39, 77],\n",[36,95387,95388],{"class":38,"line":2477},[36,95389,95390],{"class":998},"       [83, 47, 64, 67, 67, 87],\n",[36,95392,95393],{"class":38,"line":2482},[36,95394,95395],{"class":998},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[36,95397,95398],{"class":38,"line":2499},[36,95399,94572],{"class":998},[36,95401,95402],{"class":38,"line":2504},[36,95403,95404],{"class":42},"#axis=1时,为默认值\n",[36,95406,95407,95409,95411,95413,95415],{"class":38,"line":2509},[36,95408,95363],{"class":49},[36,95410,48256],{"class":416},[36,95412,54],{"class":53},[36,95414,61],{"class":60},[36,95416,75],{"class":49},[36,95418,95419],{"class":38,"line":2514},[36,95420,94572],{"class":998},[36,95422,95423],{"class":38,"line":2528},[36,95424,95334],{"class":998},[36,95426,95427],{"class":38,"line":2533},[36,95428,95339],{"class":998},[36,95430,95431],{"class":38,"line":3326},[36,95432,95344],{"class":998},[36,95434,95435],{"class":38,"line":3340},[36,95436,95349],{"class":998},[36,95438,95439],{"class":38,"line":3348},[36,95440,94572],{"class":998},[36,95442,95443],{"class":38,"line":3353},[36,95444,95445],{"class":42},"#按最后一列排序\n",[36,95447,95448,95450,95452,95455,95457,95459],{"class":38,"line":3359},[36,95449,321],{"class":49},[36,95451,54],{"class":53},[36,95453,95454],{"class":49},"aa[:,",[36,95456,1414],{"class":53},[36,95458,61],{"class":60},[36,95460,33988],{"class":49},[36,95462,95463],{"class":38,"line":3365},[36,95464,95465],{"class":42},"#获取最后一列排好序的索引\n",[36,95467,95468,95470,95472],{"class":38,"line":3370},[36,95469,74800],{"class":49},[36,95471,54],{"class":53},[36,95473,95474],{"class":49},"np.argsort(b)\n",[36,95476,95477],{"class":38,"line":8695},[36,95478,95479],{"class":49},"aa[index]\n",[36,95481,95482],{"class":38,"line":8719},[36,95483,94572],{"class":998},[36,95485,95486],{"class":38,"line":8724},[36,95487,95298],{"class":998},[36,95489,95490],{"class":38,"line":8730},[36,95491,95492],{"class":998},"       [46, 88, 81, 37, 25, 77],\n",[36,95494,95495],{"class":38,"line":8757},[36,95496,95308],{"class":998},[36,95498,95499],{"class":38,"line":8762},[36,95500,95501],{"class":998},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[36,95503,95504],{"class":38,"line":8768},[36,95505,94572],{"class":998},[807,95507,95508],{},"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":46,"depth":46,"links":95510},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":95157,"description":823},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95517,"title":95518,"body":95519,"description":823,"extension":824,"meta":95549,"navigation":193,"path":95550,"seo":95551,"stem":95552,"__hash__":95553},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95520,"toc":95547},[95521,95524,95527,95530,95533,95536,95539,95542],[10,95522,95518],{"id":95523},"_14广播机制",[14,95525,95526],{},"广播的规则：",[14,95528,95529],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,95531,95532],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,95534,95535],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,95537,95538],{},"3.如果没有维度形状为1，则会引发异常",[14,95540,95541],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,95543,95544],{},[2212,95545],{"alt":31,"src":95546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":31,"searchDepth":46,"depth":46,"links":95548},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95518,"description":823},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95555,"title":95556,"body":95557,"description":823,"extension":824,"meta":95655,"navigation":193,"path":95656,"seo":95657,"stem":95658,"__hash__":95659},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95558,"toc":95653},[95559,95562,95565,95650],[10,95560,95556],{"id":95561},"_15比较掩码",[14,95563,95564],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[26,95566,95568],{"className":28,"code":95567,"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,95569,95570,95616,95627,95641,95645],{"__ignoreMap":31},[36,95571,95572,95574,95576,95579,95581,95583,95585,95587,95589,95591,95593,95595,95597,95599,95601,95603,95605,95607,95609,95611,95613],{"class":38,"line":39},[36,95573,50],{"class":49},[36,95575,54],{"class":53},[36,95577,95578],{"class":49},"np.array([[",[36,95580,61],{"class":60},[36,95582,64],{"class":49},[36,95584,181],{"class":60},[36,95586,64],{"class":49},[36,95588,162],{"class":60},[36,95590,48772],{"class":49},[36,95592,1356],{"class":60},[36,95594,64],{"class":49},[36,95596,625],{"class":60},[36,95598,64],{"class":49},[36,95600,281],{"class":60},[36,95602,48772],{"class":49},[36,95604,1606],{"class":60},[36,95606,64],{"class":49},[36,95608,1631],{"class":60},[36,95610,64],{"class":49},[36,95612,648],{"class":60},[36,95614,95615],{"class":49},"]])\n",[36,95617,95618,95620,95622,95624],{"class":38,"line":46},[36,95619,50],{"class":49},[36,95621,1789],{"class":53},[36,95623,72],{"class":60},[36,95625,95626],{"class":42},"#结果是一个由True,False组成的数组\n",[36,95628,95629,95632,95634,95636,95638],{"class":38,"line":78},[36,95630,95631],{"class":49},"a[a",[36,95633,1789],{"class":53},[36,95635,72],{"class":60},[36,95637,1819],{"class":49},[36,95639,95640],{"class":42},"#小于20的元素会存到这个数组中\n",[36,95642,95643],{"class":38,"line":125},[36,95644,538],{"class":42},[36,95646,95647],{"class":38,"line":131},[36,95648,95649],{"class":42},"#array([ 1,  2,  3, 11, 12, 13])\n",[807,95651,95652],{},"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":46,"depth":46,"links":95654},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95556,"description":823},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95661,"title":95662,"body":95663,"description":823,"extension":824,"meta":95755,"navigation":193,"path":95756,"seo":95757,"stem":95758,"__hash__":95759},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95664,"toc":95753},[95665,95668,95671,95674,95677,95680,95745,95750],[10,95666,95662],{"id":95667},"_16魔法命令time",[14,95669,95670],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,95672,95673],{},"%:行模式",[14,95675,95676],{},"%%:单元格模式",[14,95678,95679],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[26,95681,95683],{"className":28,"code":95682,"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,95684,95685,95690,95697,95702,95711,95724,95728,95736],{"__ignoreMap":31},[36,95686,95687],{"class":38,"line":39},[36,95688,95689],{"class":42},"#程序执行时间\n",[36,95691,95692,95694],{"class":38,"line":46},[36,95693,31135],{"class":53},[36,95695,95696],{"class":49}," time \n",[36,95698,95699],{"class":38,"line":78},[36,95700,95701],{"class":42},"#获取时间\n",[36,95703,95704,95707,95709],{"class":38,"line":125},[36,95705,95706],{"class":49},"start",[36,95708,54],{"class":53},[36,95710,33160],{"class":49},[36,95712,95713,95716,95719,95721],{"class":38,"line":131},[36,95714,95715],{"class":49},"time.sleep(",[36,95717,95718],{"class":60},"0.4",[36,95720,1314],{"class":49},[36,95722,95723],{"class":42},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[36,95725,95726],{"class":38,"line":396},[36,95727,95701],{"class":42},[36,95729,95730,95732,95734],{"class":38,"line":407},[36,95731,46543],{"class":49},[36,95733,54],{"class":53},[36,95735,33160],{"class":49},[36,95737,95738,95740,95742],{"class":38,"line":2061},[36,95739,46543],{"class":49},[36,95741,1414],{"class":53},[36,95743,95744],{"class":49},"start\n",[14,95746,95747],{},[2212,95748],{"alt":31,"src":95749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[807,95751,95752],{},"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":46,"depth":46,"links":95754},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95662,"description":823},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95761,"title":95762,"body":95763,"description":823,"extension":824,"meta":95798,"navigation":193,"path":95799,"seo":95800,"stem":95801,"__hash__":95802},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95764,"toc":95796},[95765,95768,95771,95774,95777,95780,95783,95786,95791],[10,95766,95762],{"id":95767},"_17魔法命令timeit",[14,95769,95770],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,95772,95773],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,95775,95776],{},"单元格模式：",[14,95778,95779],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,95781,95782],{},"初始化语句执行次数由轮数来决定",[14,95784,95785],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,95787,95788],{},[2212,95789],{"alt":31,"src":95790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,95792,95793],{},[2212,95794],{"alt":31,"src":95795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":31,"searchDepth":46,"depth":46,"links":95797},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95762,"description":823},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95804,"title":95805,"body":95806,"description":823,"extension":824,"meta":95824,"navigation":193,"path":95825,"seo":95826,"stem":95827,"__hash__":95828},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95807,"toc":95822},[95808,95811,95814,95817],[10,95809,95805],{"id":95810},"_18魔法命令writefile和run",[14,95812,95813],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,95815,95816],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,95818,95819],{},[2212,95820],{"alt":31,"src":95821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":31,"searchDepth":46,"depth":46,"links":95823},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95805,"description":823},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95830,"title":95831,"body":95832,"description":823,"extension":824,"meta":95885,"navigation":193,"path":95886,"seo":95887,"stem":95888,"__hash__":95889},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95833,"toc":95883},[95834,95837,95840,95842,95845,95848,95853,95856,95859,95862,95865,95868,95871,95874,95877,95880],[10,95835,95831],{"id":95836},"_19魔法命令memit",[14,95838,95839],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,95841,25344],{},[14,95843,95844],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,95846,95847],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,95849,95850],{},[2212,95851],{"alt":31,"src":95852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,95854,95855],{},"补充：",[14,95857,95858],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,95860,95861],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,95863,95864],{},"解决方法：",[14,95866,95867],{},"1.cmd",[14,95869,95870],{},"2.依次输入以下代码：",[14,95872,95873],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,95875,95876],{},"pip install --upgrade ipython",[14,95878,95879],{},"#升级 memory_profiler 和 setuptools",[14,95881,95882],{},"pip install --upgrade memory_profiler setuptools",{"title":31,"searchDepth":46,"depth":46,"links":95884},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95831,"description":823},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95891,"title":95892,"body":95893,"description":823,"extension":824,"meta":97539,"navigation":193,"path":97540,"seo":97541,"stem":97542,"__hash__":97543},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95894,"toc":97509},[95895,95898,95902,95906,95967,95970,95975,95979,95984,95989,95994,95999,96002,96007,96011,96015,96048,96051,96054,96057,96109,96112,96148,96151,96193,96197,96218,96220,96257,96259,96264,96266,96271,96275,96278,96306,96310,96314,96367,96371,96463,96467,96471,96474,96479,96483,96508,96513,96517,96520,96523,96526,96529,96532,96535,96538,96550,96554,96558,96561,96593,96596,96619,96622,96648,96651,96677,96680,96714,96717,96779,96783,96786,96790,96793,96819,96822,96825,96830,96833,96902,96904,96909,96970,96973,96984,96990,96995,96999,97002,97015,97019,97034,97036,97059,97061,97087,97090,97093,97096,97144,97146,97151,97155,97159,97186,97190,97217,97220,97225,97230,97320,97324,97382,97387,97390,97393,97435,97439,97495,97500,97503,97506],[10,95896,95892],{"id":95897},"_2创建数组",[21,95899,95901],{"id":95900},"_21-array函数创建数组","2.1 array()函数创建数组",[868,95903,95905],{"id":95904},"_221-函数语句","2.2.1 函数语句",[26,95907,95909],{"className":28,"code":95908,"language":30,"meta":31,"style":31},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[33,95910,95911],{"__ignoreMap":31},[36,95912,95913,95916,95919,95921,95923,95925,95927,95929,95932,95934,95937,95939,95942,95944,95946,95948,95951,95953,95956,95958,95961,95963,95965],{"class":38,"line":39},[36,95914,95915],{"class":49},"numpy.array(",[36,95917,95918],{"class":60},"object",[36,95920,154],{"class":49},[36,95922,473],{"class":416},[36,95924,14308],{"class":53},[36,95926,39675],{"class":60},[36,95928,154],{"class":49},[36,95930,95931],{"class":416},"copy",[36,95933,14308],{"class":53},[36,95935,95936],{"class":60}," True",[36,95938,154],{"class":49},[36,95940,95941],{"class":416},"order",[36,95943,14308],{"class":53},[36,95945,39675],{"class":60},[36,95947,154],{"class":49},[36,95949,95950],{"class":416},"subok",[36,95952,14308],{"class":53},[36,95954,95955],{"class":60}," False",[36,95957,154],{"class":49},[36,95959,95960],{"class":416},"ndmin",[36,95962,14308],{"class":53},[36,95964,4842],{"class":60},[36,95966,75],{"class":49},[14,95968,95969],{},"参数：",[14,95971,95972],{},[2212,95973],{"alt":31,"src":95974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[868,95976,95978],{"id":95977},"_222-实例","2.2.2 实例",[14,95980,95981],{},[2212,95982],{"alt":31,"src":95983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,95985,95986],{},[2212,95987],{"alt":31,"src":95988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,95990,95991],{},[2212,95992],{"alt":31,"src":95993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,95995,95996],{},[2212,95997],{"alt":31,"src":95998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,96000,96001],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,96003,96004],{},[2212,96005],{"alt":31,"src":96006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[21,96008,96010],{"id":96009},"_22-随机数创建数组","2.2 随机数创建数组",[868,96012,96014],{"id":96013},"_221-random语句","2.2.1 random语句",[26,96016,96018],{"className":28,"code":96017,"language":30,"meta":31,"style":31},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[33,96019,96020,96025,96030,96038,96043],{"__ignoreMap":31},[36,96021,96022],{"class":38,"line":39},[36,96023,96024],{"class":42},"#random.random()\n",[36,96026,96027],{"class":38,"line":46},[36,96028,96029],{"class":42},"#确定随机种子,就是每次运行结果是相同的\n",[36,96031,96032,96034,96036],{"class":38,"line":78},[36,96033,95251],{"class":49},[36,96035,643],{"class":60},[36,96037,75],{"class":49},[36,96039,96040],{"class":38,"line":125},[36,96041,96042],{"class":49},"np.random.random()\n",[36,96044,96045],{"class":38,"line":131},[36,96046,96047],{"class":42},"#生成一个随机的数目\n",[14,96049,96050],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,96052,96053],{},"可以指定数组形状 size",[14,96055,96056],{},"①生成一维数组",[26,96058,96060],{"className":28,"code":96059,"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,96061,96062,96067,96080,96085,96101],{"__ignoreMap":31},[36,96063,96064],{"class":38,"line":39},[36,96065,96066],{"class":42},"#random.random(size())\n",[36,96068,96069,96072,96074,96076,96078],{"class":38,"line":46},[36,96070,96071],{"class":49},"np.random.random(",[36,96073,32238],{"class":416},[36,96075,54],{"class":53},[36,96077,157],{"class":60},[36,96079,75],{"class":49},[36,96081,96082],{"class":38,"line":78},[36,96083,96084],{"class":42},"#生成一位的五个元素\n",[36,96086,96087,96089,96091,96093,96095,96097,96099],{"class":38,"line":125},[36,96088,50],{"class":49},[36,96090,54],{"class":53},[36,96092,96071],{"class":49},[36,96094,32238],{"class":416},[36,96096,54],{"class":53},[36,96098,186],{"class":60},[36,96100,75],{"class":49},[36,96102,96103,96106],{"class":38,"line":131},[36,96104,96105],{"class":49},"a.shape ",[36,96107,96108],{"class":42},"#输出数组形状\n",[14,96110,96111],{},"②生成二维数组",[26,96113,96115],{"className":28,"code":96114,"language":30,"meta":31,"style":31},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[33,96116,96117,96121,96143],{"__ignoreMap":31},[36,96118,96119],{"class":38,"line":39},[36,96120,264],{"class":42},[36,96122,96123,96125,96127,96129,96131,96133,96135,96137,96139,96141],{"class":38,"line":46},[36,96124,269],{"class":49},[36,96126,54],{"class":53},[36,96128,96071],{"class":49},[36,96130,32238],{"class":416},[36,96132,54],{"class":53},[36,96134,901],{"class":49},[36,96136,186],{"class":60},[36,96138,64],{"class":49},[36,96140,157],{"class":60},[36,96142,31239],{"class":49},[36,96144,96145],{"class":38,"line":78},[36,96146,96147],{"class":42},"#生成四行五列的数组\n",[14,96149,96150],{},"③生成三维数组",[26,96152,96154],{"className":28,"code":96153,"language":30,"meta":31,"style":31},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[33,96155,96156,96161,96188],{"__ignoreMap":31},[36,96157,96158],{"class":38,"line":39},[36,96159,96160],{"class":42},"#三维数组\n",[36,96162,96163,96166,96168,96170,96172,96174,96176,96178,96180,96182,96184,96186],{"class":38,"line":46},[36,96164,96165],{"class":49},"aaa",[36,96167,54],{"class":53},[36,96169,96071],{"class":49},[36,96171,32238],{"class":416},[36,96173,54],{"class":53},[36,96175,901],{"class":49},[36,96177,181],{"class":60},[36,96179,64],{"class":49},[36,96181,162],{"class":60},[36,96183,64],{"class":49},[36,96185,186],{"class":60},[36,96187,31239],{"class":49},[36,96189,96190],{"class":38,"line":78},[36,96191,96192],{"class":49},"aaa.shape\n",[868,96194,96196],{"id":96195},"_222-randint语句","2.2.2 randint语句",[26,96198,96200],{"className":28,"code":96199,"language":30,"meta":31,"style":31},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[33,96201,96202,96207],{"__ignoreMap":31},[36,96203,96204],{"class":38,"line":39},[36,96205,96206],{"class":42},"#生成随机的整数 random.randint(low,high,size)\n",[36,96208,96209,96211,96213,96215],{"class":38,"line":46},[36,96210,57],{"class":49},[36,96212,157],{"class":60},[36,96214,14458],{"class":49},[36,96216,96217],{"class":42},"#0~5中的随机一个数\n",[14,96219,96056],{},[26,96221,96223],{"className":28,"code":96222,"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,96224,96225,96230,96252],{"__ignoreMap":31},[36,96226,96227],{"class":38,"line":39},[36,96228,96229],{"class":42},"#一维\n",[36,96231,96232,96234,96236,96238,96240,96242,96244,96246,96248,96250],{"class":38,"line":46},[36,96233,57],{"class":49},[36,96235,61],{"class":60},[36,96237,64],{"class":49},[36,96239,1356],{"class":60},[36,96241,64],{"class":49},[36,96243,32238],{"class":416},[36,96245,54],{"class":53},[36,96247,901],{"class":49},[36,96249,332],{"class":60},[36,96251,31239],{"class":49},[36,96253,96254],{"class":38,"line":78},[36,96255,96256],{"class":42},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,96258,96111],{},[14,96260,96261],{},[2212,96262],{"alt":31,"src":96263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,96265,96150],{},[14,96267,96268],{},[2212,96269],{"alt":31,"src":96270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[868,96272,96274],{"id":96273},"_222-rand语句","2.2.2 rand语句",[14,96276,96277],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[26,96279,96281],{"className":28,"code":96280,"language":30,"meta":31,"style":31},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[33,96282,96283,96296,96301],{"__ignoreMap":31},[36,96284,96285,96288,96290,96292,96294],{"class":38,"line":39},[36,96286,96287],{"class":49},"np.random.rand(",[36,96289,67],{"class":60},[36,96291,64],{"class":49},[36,96293,332],{"class":60},[36,96295,75],{"class":49},[36,96297,96298],{"class":38,"line":46},[36,96299,96300],{"class":42},"#第一个参数100：行数，表示有100个样本\n",[36,96302,96303],{"class":38,"line":78},[36,96304,96305],{"class":42},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[21,96307,96309],{"id":96308},"_23-arange创建数组","2.3 arange()创建数组",[868,96311,96313],{"id":96312},"_231-函数语句","2.3.1 函数语句",[26,96315,96317],{"className":28,"code":96316,"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,96318,96319,96333,96338,96343,96348,96353,96358,96363],{"__ignoreMap":31},[36,96320,96321,96324,96326,96328,96331],{"class":38,"line":39},[36,96322,96323],{"class":49},"numpy.arange([start,] stop[, step], ",[36,96325,473],{"class":416},[36,96327,54],{"class":53},[36,96329,96330],{"class":60},"None",[36,96332,75],{"class":49},[36,96334,96335],{"class":38,"line":46},[36,96336,96337],{"class":42},"#参数\n",[36,96339,96340],{"class":38,"line":78},[36,96341,96342],{"class":998},"\"\"\"\n",[36,96344,96345],{"class":38,"line":125},[36,96346,96347],{"class":998},"start:起始值，可选，默认从 0 开始。\n",[36,96349,96350],{"class":38,"line":131},[36,96351,96352],{"class":998},"stop:结束值（不包含该值）。\n",[36,96354,96355],{"class":38,"line":396},[36,96356,96357],{"class":998},"step:步长，可选，默认是 1。可以为浮点数。\n",[36,96359,96360],{"class":38,"line":407},[36,96361,96362],{"class":998},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[36,96364,96365],{"class":38,"line":2061},[36,96366,96342],{"class":998},[868,96368,96370],{"id":96369},"_232-实例","2.3.2 实例",[26,96372,96374],{"className":28,"code":96373,"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,96375,96376,96380,96404,96409,96414,96418,96441,96445,96449,96454,96459],{"__ignoreMap":31},[36,96377,96378],{"class":38,"line":39},[36,96379,43],{"class":42},[36,96381,96382,96384,96386,96388,96390,96392,96394,96396,96398,96400,96402],{"class":38,"line":46},[36,96383,274],{"class":49},[36,96385,61],{"class":60},[36,96387,64],{"class":49},[36,96389,1606],{"class":60},[36,96391,64],{"class":49},[36,96393,61],{"class":60},[36,96395,64],{"class":49},[36,96397,473],{"class":416},[36,96399,54],{"class":53},[36,96401,904],{"class":60},[36,96403,75],{"class":49},[36,96405,96406],{"class":38,"line":78},[36,96407,96408],{"class":42},"#输出结果：\n",[36,96410,96411],{"class":38,"line":125},[36,96412,96413],{"class":42},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[36,96415,96416],{"class":38,"line":131},[36,96417,94591],{"class":42},[36,96419,96420,96423,96425,96427,96429,96432,96434,96436,96438],{"class":38,"line":396},[36,96421,96422],{"class":49},"np.array([np.arange(",[36,96424,61],{"class":60},[36,96426,64],{"class":49},[36,96428,186],{"class":60},[36,96430,96431],{"class":49},"),np.arange(",[36,96433,186],{"class":60},[36,96435,64],{"class":49},[36,96437,1255],{"class":60},[36,96439,96440],{"class":49},")])\n",[36,96442,96443],{"class":38,"line":407},[36,96444,538],{"class":42},[36,96446,96447],{"class":38,"line":2061},[36,96448,96342],{"class":998},[36,96450,96451],{"class":38,"line":2067},[36,96452,96453],{"class":998},"array([[1, 2, 3],\n",[36,96455,96456],{"class":38,"line":2079},[36,96457,96458],{"class":998},"       [4, 5, 6]])\n",[36,96460,96461],{"class":38,"line":2362},[36,96462,96342],{"class":998},[21,96464,96466],{"id":96465},"_24-生态分布","2.4 生态分布",[868,96468,96470],{"id":96469},"_241-标准正态分布","2.4.1 标准正态分布",[14,96472,96473],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,96475,96476],{},[2212,96477],{"alt":31,"src":96478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[868,96480,96482],{"id":96481},"_242-常规正态分布","2.4.2 常规正态分布",[26,96484,96486],{"className":28,"code":96485,"language":30,"meta":31,"style":31},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[33,96487,96488,96493,96498,96503],{"__ignoreMap":31},[36,96489,96490],{"class":38,"line":39},[36,96491,96492],{"class":49},"random.normal(loc,scale,size)也可以生成正态分布\n",[36,96494,96495],{"class":38,"line":46},[36,96496,96497],{"class":42},"#loc:期望\n",[36,96499,96500],{"class":38,"line":78},[36,96501,96502],{"class":42},"#scale:方差\n",[36,96504,96505],{"class":38,"line":125},[36,96506,96507],{"class":42},"#size:用于确定是几维的数列\n",[14,96509,96510],{},[2212,96511],{"alt":31,"src":96512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[21,96514,96516],{"id":96515},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,96518,96519],{},"ndim:秩，维度个数",[14,96521,96522],{},"size:数组元素的个数",[14,96524,96525],{},"shape:数组的形状",[14,96527,96528],{},"dtype:数组元素的类型",[14,96530,96531],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,96533,96534],{},"他们都是属性，通过数组.属性的形式来确定",[14,96536,96537],{},"如果需要输出多个可以通过以下方式：",[26,96539,96541],{"className":28,"code":96540,"language":30,"meta":31,"style":31},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[33,96542,96543],{"__ignoreMap":31},[36,96544,96545,96547],{"class":38,"line":39},[36,96546,199],{"class":60},[36,96548,96549],{"class":49},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[21,96551,96553],{"id":96552},"_26-其他方式创建数组","2.6 其他方式创建数组",[868,96555,96557],{"id":96556},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,96559,96560],{},"①创建一维数组",[26,96562,96564],{"className":28,"code":96563,"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,96565,96566,96575,96579,96584,96589],{"__ignoreMap":31},[36,96567,96568,96571,96573],{"class":38,"line":39},[36,96569,96570],{"class":49},"np.zeros(",[36,96572,332],{"class":60},[36,96574,75],{"class":49},[36,96576,96577],{"class":38,"line":46},[36,96578,96342],{"class":998},[36,96580,96581],{"class":38,"line":78},[36,96582,96583],{"class":998},"输出结果：\n",[36,96585,96586],{"class":38,"line":125},[36,96587,96588],{"class":998},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[36,96590,96591],{"class":38,"line":131},[36,96592,96342],{"class":998},[14,96594,96595],{},"上方代码等价于：",[26,96597,96599],{"className":28,"code":96598,"language":30,"meta":31,"style":31},"np.zeros(shape=(10))#创建10个元素的0数组\n",[33,96600,96601],{"__ignoreMap":31},[36,96602,96603,96605,96608,96610,96612,96614,96616],{"class":38,"line":39},[36,96604,96570],{"class":49},[36,96606,96607],{"class":416},"shape",[36,96609,54],{"class":53},[36,96611,901],{"class":49},[36,96613,332],{"class":60},[36,96615,83513],{"class":49},[36,96617,96618],{"class":42},"#创建10个元素的0数组\n",[14,96620,96621],{},"也可以指定类型",[26,96623,96625],{"className":28,"code":96624,"language":30,"meta":31,"style":31},"#指定类型\nnp.zeros(5,dtype=int)\n",[33,96626,96627,96632],{"__ignoreMap":31},[36,96628,96629],{"class":38,"line":39},[36,96630,96631],{"class":42},"#指定类型\n",[36,96633,96634,96636,96638,96640,96642,96644,96646],{"class":38,"line":46},[36,96635,96570],{"class":49},[36,96637,157],{"class":60},[36,96639,64],{"class":49},[36,96641,473],{"class":416},[36,96643,54],{"class":53},[36,96645,904],{"class":60},[36,96647,75],{"class":49},[14,96649,96650],{},"②创建二维数组",[26,96652,96654],{"className":28,"code":96653,"language":30,"meta":31,"style":31},"np.zeros((3,4),dtype=int)\n",[33,96655,96656],{"__ignoreMap":31},[36,96657,96658,96661,96663,96665,96667,96669,96671,96673,96675],{"class":38,"line":39},[36,96659,96660],{"class":49},"np.zeros((",[36,96662,162],{"class":60},[36,96664,64],{"class":49},[36,96666,186],{"class":60},[36,96668,42998],{"class":49},[36,96670,473],{"class":416},[36,96672,54],{"class":53},[36,96674,904],{"class":60},[36,96676,75],{"class":49},[14,96678,96679],{},"③创建三维数组",[26,96681,96683],{"className":28,"code":96682,"language":30,"meta":31,"style":31},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[33,96684,96685,96690],{"__ignoreMap":31},[36,96686,96687],{"class":38,"line":39},[36,96688,96689],{"class":42},"#创建三维数组\n",[36,96691,96692,96694,96696,96698,96700,96702,96704,96706,96708,96710,96712],{"class":38,"line":46},[36,96693,96660],{"class":49},[36,96695,162],{"class":60},[36,96697,64],{"class":49},[36,96699,186],{"class":60},[36,96701,64],{"class":49},[36,96703,157],{"class":60},[36,96705,42998],{"class":49},[36,96707,473],{"class":416},[36,96709,54],{"class":53},[36,96711,904],{"class":60},[36,96713,75],{"class":49},[14,96715,96716],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[26,96718,96720],{"className":28,"code":96719,"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,96721,96722,96727,96742,96747,96752,96774],{"__ignoreMap":31},[36,96723,96724],{"class":38,"line":39},[36,96725,96726],{"class":42},"#使用zeros_like将创建的一维数组变成全0的数组\n",[36,96728,96729,96731,96733,96735,96737,96739],{"class":38,"line":46},[36,96730,50],{"class":49},[36,96732,54],{"class":53},[36,96734,274],{"class":49},[36,96736,186],{"class":60},[36,96738,1314],{"class":49},[36,96740,96741],{"class":42},"#这个得到的结果：一维数组0，1，2，3\n",[36,96743,96744],{"class":38,"line":78},[36,96745,96746],{"class":49},"np.zeros_like(a)\n",[36,96748,96749],{"class":38,"line":125},[36,96750,96751],{"class":42},"#使用zeros_like将创建的二维数组变成全0的数组\n",[36,96753,96754,96756,96758,96760,96762,96764,96766,96768,96770,96772],{"class":38,"line":131},[36,96755,269],{"class":49},[36,96757,54],{"class":53},[36,96759,96071],{"class":49},[36,96761,32238],{"class":416},[36,96763,54],{"class":53},[36,96765,901],{"class":49},[36,96767,186],{"class":60},[36,96769,64],{"class":49},[36,96771,157],{"class":60},[36,96773,31239],{"class":49},[36,96775,96776],{"class":38,"line":396},[36,96777,96778],{"class":49},"np.zeros_like(aa)\n",[868,96780,96782],{"id":96781},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96784,96785],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[868,96787,96789],{"id":96788},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96791,96792],{},"①empty()用法",[26,96794,96796],{"className":28,"code":96795,"language":30,"meta":31,"style":31},"numpy.empty(shape,dtype=float,order='c')\n",[33,96797,96798],{"__ignoreMap":31},[36,96799,96800,96803,96805,96807,96809,96811,96813,96815,96817],{"class":38,"line":39},[36,96801,96802],{"class":49},"numpy.empty(shape,",[36,96804,473],{"class":416},[36,96806,54],{"class":53},[36,96808,478],{"class":60},[36,96810,64],{"class":49},[36,96812,95941],{"class":416},[36,96814,54],{"class":53},[36,96816,76770],{"class":998},[36,96818,75],{"class":49},[14,96820,96821],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96823,96824],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96826,96827],{},[2212,96828],{"alt":31,"src":96829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96831,96832],{},"②empty()用法",[26,96834,96836],{"className":28,"code":96835,"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,96837,96838,96859,96871,96892,96897],{"__ignoreMap":31},[36,96839,96840,96842,96844,96847,96849,96851,96853,96855,96857],{"class":38,"line":39},[36,96841,399],{"class":49},[36,96843,54],{"class":53},[36,96845,96846],{"class":49},"np.empty(",[36,96848,332],{"class":60},[36,96850,64],{"class":49},[36,96852,473],{"class":416},[36,96854,54],{"class":53},[36,96856,904],{"class":60},[36,96858,75],{"class":49},[36,96860,96861,96863,96865,96867,96869],{"class":38,"line":46},[36,96862,1700],{"class":49},[36,96864,54],{"class":53},[36,96866,274],{"class":49},[36,96868,157],{"class":60},[36,96870,75],{"class":49},[36,96872,96873,96876,96878,96881,96883,96885,96888,96890],{"class":38,"line":78},[36,96874,96875],{"class":49},"np.add(",[36,96877,181],{"class":60},[36,96879,96880],{"class":49},",x,",[36,96882,417],{"class":416},[36,96884,54],{"class":53},[36,96886,96887],{"class":49},"y[:",[36,96889,157],{"class":60},[36,96891,165],{"class":49},[36,96893,96894],{"class":38,"line":125},[36,96895,96896],{"class":42},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[36,96898,96899],{"class":38,"line":131},[36,96900,96901],{"class":49},"y\n",[14,96903,12259],{},[14,96905,96906],{},[2212,96907],{"alt":31,"src":96908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[26,96910,96912],{"className":28,"code":96911,"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,96913,96914,96930,96950,96965],{"__ignoreMap":31},[36,96915,96916,96918,96920,96922,96924,96926,96928],{"class":38,"line":39},[36,96917,1700],{"class":49},[36,96919,54],{"class":53},[36,96921,274],{"class":49},[36,96923,61],{"class":60},[36,96925,64],{"class":49},[36,96927,1230],{"class":60},[36,96929,75],{"class":49},[36,96931,96932,96934,96936,96938,96940,96942,96944,96946,96948],{"class":38,"line":46},[36,96933,399],{"class":49},[36,96935,54],{"class":53},[36,96937,96846],{"class":49},[36,96939,157],{"class":60},[36,96941,64],{"class":49},[36,96943,473],{"class":416},[36,96945,54],{"class":53},[36,96947,904],{"class":60},[36,96949,75],{"class":49},[36,96951,96952,96955,96957,96959,96961,96963],{"class":38,"line":78},[36,96953,96954],{"class":49},"np.add(x,",[36,96956,181],{"class":60},[36,96958,64],{"class":49},[36,96960,417],{"class":416},[36,96962,54],{"class":53},[36,96964,422],{"class":49},[36,96966,96967],{"class":38,"line":125},[36,96968,96969],{"class":42},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,96971,96972],{},"③empty_like()",[14,96974,96975],{},[1043,96976,96977,96978,96983],{},"创建一个",[1043,96979,96980],{},[1043,96981,96982],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,96985,96986,96989],{},[33,96987,96988],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,96991,96992],{},[2212,96993],{"alt":31,"src":96994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[868,96996,96998],{"id":96997},"_264-用法","2.6.4 ？？用法",[14,97000,97001],{},"当想查看一个函数的参数时，可以通过？？来实现",[26,97003,97005],{"className":28,"code":97004,"language":30,"meta":31,"style":31},"np.full??\n",[33,97006,97007],{"__ignoreMap":31},[36,97008,97009,97012],{"class":38,"line":39},[36,97010,97011],{"class":49},"np.full",[36,97013,97014],{"class":78145},"??\n",[868,97016,97018],{"id":97017},"_265-full创建数组","2.6.5 full()创建数组",[26,97020,97022],{"className":28,"code":97021,"language":30,"meta":31,"style":31},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[33,97023,97024,97029],{"__ignoreMap":31},[36,97025,97026],{"class":38,"line":39},[36,97027,97028],{"class":49},"full(shape,fill_value)\n",[36,97030,97031],{"class":38,"line":46},[36,97032,97033],{"class":49},"创建全为某个指定值的数组\n",[14,97035,95174],{},[26,97037,97039],{"className":28,"code":97038,"language":30,"meta":31,"style":31},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[33,97040,97041,97046],{"__ignoreMap":31},[36,97042,97043],{"class":38,"line":39},[36,97044,97045],{"class":42},"#创建一个一维数组,以20进行填充\n",[36,97047,97048,97051,97053,97055,97057],{"class":38,"line":46},[36,97049,97050],{"class":49},"np.full(",[36,97052,332],{"class":60},[36,97054,64],{"class":49},[36,97056,72],{"class":60},[36,97058,75],{"class":49},[14,97060,254],{},[26,97062,97064],{"className":28,"code":97063,"language":30,"meta":31,"style":31},"#创建二维数组\nnp.full((3,5),11)\n",[33,97065,97066,97070],{"__ignoreMap":31},[36,97067,97068],{"class":38,"line":39},[36,97069,94591],{"class":42},[36,97071,97072,97075,97077,97079,97081,97083,97085],{"class":38,"line":46},[36,97073,97074],{"class":49},"np.full((",[36,97076,162],{"class":60},[36,97078,64],{"class":49},[36,97080,157],{"class":60},[36,97082,42998],{"class":49},[36,97084,1356],{"class":60},[36,97086,75],{"class":49},[14,97088,97089],{},"③full_like用法",[14,97091,97092],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,97094,97095],{},"这里是指定填充而已",[26,97097,97099],{"className":28,"code":97098,"language":30,"meta":31,"style":31},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[33,97100,97101,97106,97130,97135],{"__ignoreMap":31},[36,97102,97103],{"class":38,"line":39},[36,97104,97105],{"class":42},"#创建一个指定形状数组\n",[36,97107,97108,97110,97112,97114,97116,97118,97120,97122,97124,97126,97128],{"class":38,"line":46},[36,97109,50],{"class":49},[36,97111,54],{"class":53},[36,97113,274],{"class":49},[36,97115,61],{"class":60},[36,97117,64],{"class":49},[36,97119,1211],{"class":60},[36,97121,284],{"class":49},[36,97123,186],{"class":60},[36,97125,64],{"class":49},[36,97127,1305],{"class":60},[36,97129,75],{"class":49},[36,97131,97132],{"class":38,"line":78},[36,97133,97134],{"class":42},"#进行指定填充\n",[36,97136,97137,97140,97142],{"class":38,"line":125},[36,97138,97139],{"class":49},"np.full_like(a,",[36,97141,332],{"class":60},[36,97143,75],{"class":49},[14,97145,12259],{},[14,97147,97148],{},[2212,97149],{"alt":31,"src":97150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[868,97152,97154],{"id":97153},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22742,97156,97158],{"id":97157},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[26,97160,97162],{"className":28,"code":97161,"language":30,"meta":31,"style":31},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[33,97163,97164,97181],{"__ignoreMap":31},[36,97165,97166,97169,97171,97173,97175,97177,97179],{"class":38,"line":39},[36,97167,97168],{"class":49},"np.eye(",[36,97170,186],{"class":60},[36,97172,64],{"class":49},[36,97174,473],{"class":416},[36,97176,54],{"class":53},[36,97178,904],{"class":60},[36,97180,75],{"class":49},[36,97182,97183],{"class":38,"line":46},[36,97184,97185],{"class":42},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22742,97187,97189],{"id":97188},"_2662-法2identity","2.6.6.2 法2：identity()",[26,97191,97193],{"className":28,"code":97192,"language":30,"meta":31,"style":31},"#identity()\nnp.identity(5,dtype=int)\n",[33,97194,97195,97200],{"__ignoreMap":31},[36,97196,97197],{"class":38,"line":39},[36,97198,97199],{"class":42},"#identity()\n",[36,97201,97202,97205,97207,97209,97211,97213,97215],{"class":38,"line":46},[36,97203,97204],{"class":49},"np.identity(",[36,97206,157],{"class":60},[36,97208,64],{"class":49},[36,97210,473],{"class":416},[36,97212,54],{"class":53},[36,97214,904],{"class":60},[36,97216,75],{"class":49},[14,97218,97219],{},"两个函数是有区别的",[14,97221,97222],{},[2212,97223],{"alt":31,"src":97224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,97226,97227],{},[2212,97228],{"alt":31,"src":97229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[26,97231,97233],{"className":28,"code":97232,"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,97234,97235,97240,97252,97257,97262,97267,97272,97276,97281,97301,97305,97310,97315],{"__ignoreMap":31},[36,97236,97237],{"class":38,"line":39},[36,97238,97239],{"class":42},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[36,97241,97242,97244,97246,97248,97250],{"class":38,"line":46},[36,97243,97168],{"class":49},[36,97245,162],{"class":60},[36,97247,154],{"class":49},[36,97249,186],{"class":60},[36,97251,75],{"class":49},[36,97253,97254],{"class":38,"line":78},[36,97255,97256],{"class":42},"# 输出:\n",[36,97258,97259],{"class":38,"line":125},[36,97260,97261],{"class":42},"# [[1. 0. 0. 0.]\n",[36,97263,97264],{"class":38,"line":131},[36,97265,97266],{"class":42},"#  [0. 1. 0. 0.]\n",[36,97268,97269],{"class":38,"line":396},[36,97270,97271],{"class":42},"#  [0. 0. 1. 0.]]\n",[36,97273,97274],{"class":38,"line":407},[36,97275,194],{"emptyLinePlaceholder":193},[36,97277,97278],{"class":38,"line":2061},[36,97279,97280],{"class":42},"# 对角线向上偏移1\n",[36,97282,97283,97285,97287,97289,97291,97293,97295,97297,97299],{"class":38,"line":2067},[36,97284,97168],{"class":49},[36,97286,162],{"class":60},[36,97288,154],{"class":49},[36,97290,186],{"class":60},[36,97292,154],{"class":49},[36,97294,1377],{"class":416},[36,97296,54],{"class":53},[36,97298,61],{"class":60},[36,97300,75],{"class":49},[36,97302,97303],{"class":38,"line":2079},[36,97304,97256],{"class":42},[36,97306,97307],{"class":38,"line":2362},[36,97308,97309],{"class":42},"# [[0. 1. 0. 0.]\n",[36,97311,97312],{"class":38,"line":2367},[36,97313,97314],{"class":42},"#  [0. 0. 1. 0.]\n",[36,97316,97317],{"class":38,"line":2373},[36,97318,97319],{"class":42},"#  [0. 0. 0. 1.]]\n",[868,97321,97323],{"id":97322},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[26,97325,97327],{"className":28,"code":97326,"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,97328,97329,97334,97338,97343,97348,97353,97358,97363,97368,97373,97378],{"__ignoreMap":31},[36,97330,97331],{"class":38,"line":39},[36,97332,97333],{"class":42},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[36,97335,97336],{"class":38,"line":46},[36,97337,96342],{"class":998},[36,97339,97340],{"class":38,"line":78},[36,97341,97342],{"class":998},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[36,97344,97345],{"class":38,"line":125},[36,97346,97347],{"class":998},"参数介绍：\n",[36,97349,97350],{"class":38,"line":131},[36,97351,97352],{"class":998},"start：序列的起始值\n",[36,97354,97355],{"class":38,"line":396},[36,97356,97357],{"class":998},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[36,97359,97360],{"class":38,"line":407},[36,97361,97362],{"class":998},"num：要生长的等步长的样本数量，默认为50\n",[36,97364,97365],{"class":38,"line":2061},[36,97366,97367],{"class":998},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[36,97369,97370],{"class":38,"line":2067},[36,97371,97372],{"class":998},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[36,97374,97375],{"class":38,"line":2079},[36,97376,97377],{"class":998},"dtype：ndarry的数据类型\n",[36,97379,97380],{"class":38,"line":2362},[36,97381,96342],{"class":998},[14,97383,97384],{},[2212,97385],{"alt":31,"src":97386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,97388,97389],{},"这里num=是可以省略的",[14,97391,97392],{},"也就是下方两行代码结果是一模一样的",[26,97394,97396],{"className":28,"code":97395,"language":30,"meta":31,"style":31},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[33,97397,97398,97415],{"__ignoreMap":31},[36,97399,97400,97403,97405,97407,97409,97411,97413],{"class":38,"line":39},[36,97401,97402],{"class":49},"np.linspace(",[36,97404,61],{"class":60},[36,97406,64],{"class":49},[36,97408,157],{"class":60},[36,97410,64],{"class":49},[36,97412,157],{"class":60},[36,97414,75],{"class":49},[36,97416,97417,97419,97421,97423,97425,97427,97429,97431,97433],{"class":38,"line":46},[36,97418,97402],{"class":49},[36,97420,61],{"class":60},[36,97422,64],{"class":49},[36,97424,157],{"class":60},[36,97426,64],{"class":49},[36,97428,2415],{"class":416},[36,97430,54],{"class":53},[36,97432,157],{"class":60},[36,97434,75],{"class":49},[868,97436,97438],{"id":97437},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[26,97440,97442],{"className":28,"code":97441,"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,97443,97444,97449,97453,97458,97463,97468,97473,97477,97482,97487,97491],{"__ignoreMap":31},[36,97445,97446],{"class":38,"line":39},[36,97447,97448],{"class":42},"#logspace函数用于创建一个等比数列，格式如下：\n",[36,97450,97451],{"class":38,"line":46},[36,97452,96342],{"class":998},[36,97454,97455],{"class":38,"line":78},[36,97456,97457],{"class":998},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[36,97459,97460],{"class":38,"line":125},[36,97461,97462],{"class":998},"参数为：\n",[36,97464,97465],{"class":38,"line":131},[36,97466,97467],{"class":998},"start:序列的起始位置为：base**start\n",[36,97469,97470],{"class":38,"line":396},[36,97471,97472],{"class":998},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[36,97474,97475],{"class":38,"line":407},[36,97476,97362],{"class":998},[36,97478,97479],{"class":38,"line":2061},[36,97480,97481],{"class":998},"endpoint：是否包含 stop 这个值，默认是 True\n",[36,97483,97484],{"class":38,"line":2067},[36,97485,97486],{"class":998},"base：对数的底数，默认是 10（常见对数）\n",[36,97488,97489],{"class":38,"line":2079},[36,97490,97377],{"class":998},[36,97492,97493],{"class":38,"line":2362},[36,97494,96342],{"class":998},[14,97496,97497],{},[2212,97498],{"alt":31,"src":97499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,97501,97502],{},"logspace()函数中的num参数也是可以不写num=的",[14,97504,97505],{},"endpoint是不可以省略的",[807,97507,97508],{},"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":46,"depth":46,"links":97510},[97511,97515,97520,97524,97528,97529],{"id":95900,"depth":46,"text":95901,"children":97512},[97513,97514],{"id":95904,"depth":78,"text":95905},{"id":95977,"depth":78,"text":95978},{"id":96009,"depth":46,"text":96010,"children":97516},[97517,97518,97519],{"id":96013,"depth":78,"text":96014},{"id":96195,"depth":78,"text":96196},{"id":96273,"depth":78,"text":96274},{"id":96308,"depth":46,"text":96309,"children":97521},[97522,97523],{"id":96312,"depth":78,"text":96313},{"id":96369,"depth":78,"text":96370},{"id":96465,"depth":46,"text":96466,"children":97525},[97526,97527],{"id":96469,"depth":78,"text":96470},{"id":96481,"depth":78,"text":96482},{"id":96515,"depth":46,"text":96516},{"id":96552,"depth":46,"text":96553,"children":97530},[97531,97532,97533,97534,97535,97536,97537,97538],{"id":96556,"depth":78,"text":96557},{"id":96781,"depth":78,"text":96782},{"id":96788,"depth":78,"text":96789},{"id":96997,"depth":78,"text":96998},{"id":97017,"depth":78,"text":97018},{"id":97153,"depth":78,"text":97154},{"id":97322,"depth":78,"text":97323},{"id":97437,"depth":78,"text":97438},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95892,"description":823},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97545,"title":97546,"body":97547,"description":823,"extension":824,"meta":97640,"navigation":193,"path":97641,"seo":97642,"stem":97643,"__hash__":97644},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97548,"toc":97638},[97549,97552,97555,97558,97561,97564,97567,97570,97573,97576,97579,97582,97584,97587,97590,97595,97598,97601,97635],[10,97550,97546],{"id":97551},"_20魔法命令mprun",[14,97553,97554],{},"逐行分析数据内存的使用情况",[14,97556,97557],{},"语法格式：",[14,97559,97560],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,97562,97563],{},"分析结果列如下：",[14,97565,97566],{},"Line行号",[14,97568,97569],{},"Mem usage内存使用大小",[14,97571,97572],{},"increment内存增量",[14,97574,97575],{},"Line content代码内容",[14,97577,97578],{},"补充说明：",[14,97580,97581],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,97583,95847],{},[14,97585,97586],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,97588,97589],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,97591,97592],{},[2212,97593],{"alt":31,"src":97594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,97596,97597],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,97599,97600],{},"这时候需要重新加载模块",[26,97602,97604],{"className":28,"code":97603,"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,97605,97606,97611,97618,97623],{"__ignoreMap":31},[36,97607,97608],{"class":38,"line":39},[36,97609,97610],{"class":42},"#重新加载模块\n",[36,97612,97613,97615],{"class":38,"line":46},[36,97614,31135],{"class":53},[36,97616,97617],{"class":49}," importlib\n",[36,97619,97620],{"class":38,"line":78},[36,97621,97622],{"class":49},"importlib.reload(mprun_test)\n",[36,97624,97625,97627,97630,97632],{"class":38,"line":125},[36,97626,1214],{"class":53},[36,97628,97629],{"class":49},"mprun ",[36,97631,1414],{"class":53},[36,97633,97634],{"class":49},"f mprun_test.fun_test mprun_test.fun_test()\n",[807,97636,97637],{},"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":46,"depth":46,"links":97639},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97546,"description":823},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97646,"title":97647,"body":97648,"description":823,"extension":824,"meta":97665,"navigation":193,"path":97666,"seo":97667,"stem":97668,"__hash__":97669},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97649,"toc":97663},[97650,97653,97658],[10,97651,97647],{"id":97652},"_3一维数组的索引和切片",[14,97654,97655],{},[2212,97656],{"alt":31,"src":97657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,97659,97660],{},[2212,97661],{"alt":31,"src":97662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":31,"searchDepth":46,"depth":46,"links":97664},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97647,"description":823},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97671,"title":97672,"body":97673,"description":823,"extension":824,"meta":98156,"navigation":193,"path":98157,"seo":98158,"stem":98159,"__hash__":98160},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97674,"toc":98154},[97675,97678,97681,97686,97719,97722,97760,97763,97797,97800,97905,97908,97945,97948,98049,98052,98103,98106,98148,98151],[10,97676,97672],{"id":97677},"_4二维数组的索引与切片",[14,97679,97680],{},"①获取指定单个元素",[14,97682,97683],{},[2212,97684],{"alt":31,"src":97685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[26,97687,97689],{"className":28,"code":97688,"language":30,"meta":31,"style":31},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[33,97690,97691,97696,97701,97706],{"__ignoreMap":31},[36,97692,97693],{"class":38,"line":39},[36,97694,97695],{"class":42},"#获取元素9\n",[36,97697,97698],{"class":38,"line":46},[36,97699,97700],{"class":42},"#先获取所在行，再获取所在列\n",[36,97702,97703],{"class":38,"line":78},[36,97704,97705],{"class":42},"#数组[行索引号，列索引号]\n",[36,97707,97708,97711,97713,97715,97717],{"class":38,"line":125},[36,97709,97710],{"class":49},"a[",[36,97712,61],{"class":60},[36,97714,64],{"class":49},[36,97716,181],{"class":60},[36,97718,33988],{"class":49},[14,97720,97721],{},"②获取整行元素",[26,97723,97725],{"className":28,"code":97724,"language":30,"meta":31,"style":31},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[33,97726,97727,97732,97737,97745,97750],{"__ignoreMap":31},[36,97728,97729],{"class":38,"line":39},[36,97730,97731],{"class":42},"#获取整行 数组[行索引号]\n",[36,97733,97734],{"class":38,"line":46},[36,97735,97736],{"class":42},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[36,97738,97739,97741,97743],{"class":38,"line":78},[36,97740,97710],{"class":49},[36,97742,181],{"class":60},[36,97744,33988],{"class":49},[36,97746,97747],{"class":38,"line":125},[36,97748,97749],{"class":42},"#也可以负索引获取一行\n",[36,97751,97752,97754,97756,97758],{"class":38,"line":131},[36,97753,97710],{"class":49},[36,97755,1414],{"class":53},[36,97757,61],{"class":60},[36,97759,33988],{"class":49},[14,97761,97762],{},"③获取整列元素",[26,97764,97766],{"className":28,"code":97765,"language":30,"meta":31,"style":31},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[33,97767,97768,97773,97782,97787],{"__ignoreMap":31},[36,97769,97770],{"class":38,"line":39},[36,97771,97772],{"class":42},"#获取整列 数组名[:,列索引]\n",[36,97774,97775,97778,97780],{"class":38,"line":46},[36,97776,97777],{"class":49},"a[:,",[36,97779,181],{"class":60},[36,97781,33988],{"class":49},[36,97783,97784],{"class":38,"line":78},[36,97785,97786],{"class":42},"#也可以负索引获取一列\n",[36,97788,97789,97791,97793,97795],{"class":38,"line":125},[36,97790,97777],{"class":49},[36,97792,1414],{"class":53},[36,97794,61],{"class":60},[36,97796,33988],{"class":49},[14,97798,97799],{},"④部分行部分列的元素",[26,97801,97803],{"className":28,"code":97802,"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,97804,97805,97810,97820,97824,97828,97833,97838,97842,97854,97858,97862,97867,97872,97877,97882,97886,97891],{"__ignoreMap":31},[36,97806,97807],{"class":38,"line":39},[36,97808,97809],{"class":42},"#部分行部分列 数组名[行切片，列切片]\n",[36,97811,97812,97815,97817],{"class":38,"line":46},[36,97813,97814],{"class":49},"a[:",[36,97816,181],{"class":60},[36,97818,97819],{"class":49},",:]\n",[36,97821,97822],{"class":38,"line":78},[36,97823,538],{"class":42},[36,97825,97826],{"class":38,"line":125},[36,97827,94572],{"class":998},[36,97829,97830],{"class":38,"line":131},[36,97831,97832],{"class":998},"array([[ 1,  2,  3,  4,  5,  6],\n",[36,97834,97835],{"class":38,"line":396},[36,97836,97837],{"class":998},"       [ 7,  8,  9, 10, 11, 12]])\n",[36,97839,97840],{"class":38,"line":407},[36,97841,94572],{"class":998},[36,97843,97844,97846,97848,97850,97852],{"class":38,"line":2061},[36,97845,97777],{"class":49},[36,97847,61],{"class":60},[36,97849,1738],{"class":49},[36,97851,186],{"class":60},[36,97853,33988],{"class":49},[36,97855,97856],{"class":38,"line":2067},[36,97857,538],{"class":42},[36,97859,97860],{"class":38,"line":2079},[36,97861,94572],{"class":998},[36,97863,97864],{"class":38,"line":2362},[36,97865,97866],{"class":998},"array([[ 2,  3,  4],\n",[36,97868,97869],{"class":38,"line":2367},[36,97870,97871],{"class":998},"       [ 8,  9, 10],\n",[36,97873,97874],{"class":38,"line":2373},[36,97875,97876],{"class":998},"       [14, 15, 16],\n",[36,97878,97879],{"class":38,"line":2378},[36,97880,97881],{"class":998},"       [20, 21, 22]])\n",[36,97883,97884],{"class":38,"line":2392},[36,97885,94572],{"class":998},[36,97887,97888],{"class":38,"line":2397},[36,97889,97890],{"class":42},"#对列行同时进行切片，使用了step参数\n",[36,97892,97893,97896,97898,97901,97903],{"class":38,"line":2403},[36,97894,97895],{"class":49},"a[::",[36,97897,181],{"class":60},[36,97899,97900],{"class":49},",::",[36,97902,181],{"class":60},[36,97904,33988],{"class":49},[14,97906,97907],{},"⑤同时获取两个元素",[26,97909,97911],{"className":28,"code":97910,"language":30,"meta":31,"style":31},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[33,97912,97913,97918,97923],{"__ignoreMap":31},[36,97914,97915],{"class":38,"line":39},[36,97916,97917],{"class":42},"#同时获取第三行第二列，第四行第一列\n",[36,97919,97920],{"class":38,"line":46},[36,97921,97922],{"class":42},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[36,97924,97925,97928,97930,97932,97934,97936,97938,97940,97942],{"class":38,"line":78},[36,97926,97927],{"class":49},"a[(",[36,97929,181],{"class":60},[36,97931,64],{"class":49},[36,97933,162],{"class":60},[36,97935,42989],{"class":49},[36,97937,61],{"class":60},[36,97939,64],{"class":49},[36,97941,643],{"class":60},[36,97943,97944],{"class":49},")]\n",[14,97946,97947],{},"⑥切片，对行进行反向获取",[26,97949,97951],{"className":28,"code":97950,"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,97952,97953,97958,97968,97972,97976,97981,97986,97991,97996,98000,98005,98021,98025,98030,98035,98040,98045],{"__ignoreMap":31},[36,97954,97955],{"class":38,"line":39},[36,97956,97957],{"class":42},"#切片 对所有行进行反向获取\n",[36,97959,97960,97962,97964,97966],{"class":38,"line":46},[36,97961,97895],{"class":49},[36,97963,1414],{"class":53},[36,97965,61],{"class":60},[36,97967,33988],{"class":49},[36,97969,97970],{"class":38,"line":78},[36,97971,538],{"class":42},[36,97973,97974],{"class":38,"line":125},[36,97975,94572],{"class":998},[36,97977,97978],{"class":38,"line":131},[36,97979,97980],{"class":998},"array([[19, 20, 21, 22, 23, 24],\n",[36,97982,97983],{"class":38,"line":396},[36,97984,97985],{"class":998},"       [13, 14, 15, 16, 17, 18],\n",[36,97987,97988],{"class":38,"line":407},[36,97989,97990],{"class":998},"       [ 7,  8,  9, 10, 11, 12],\n",[36,97992,97993],{"class":38,"line":2061},[36,97994,97995],{"class":998},"       [ 1,  2,  3,  4,  5,  6]])\n",[36,97997,97998],{"class":38,"line":2067},[36,97999,94572],{"class":998},[36,98001,98002],{"class":38,"line":2079},[36,98003,98004],{"class":42},"#对行列都进行反向切片获取\n",[36,98006,98007,98009,98011,98013,98015,98017,98019],{"class":38,"line":2362},[36,98008,97895],{"class":49},[36,98010,1414],{"class":53},[36,98012,61],{"class":60},[36,98014,97900],{"class":49},[36,98016,1414],{"class":53},[36,98018,61],{"class":60},[36,98020,33988],{"class":49},[36,98022,98023],{"class":38,"line":2367},[36,98024,94572],{"class":998},[36,98026,98027],{"class":38,"line":2373},[36,98028,98029],{"class":998},"array([[24, 23, 22, 21, 20, 19],\n",[36,98031,98032],{"class":38,"line":2378},[36,98033,98034],{"class":998},"       [18, 17, 16, 15, 14, 13],\n",[36,98036,98037],{"class":38,"line":2392},[36,98038,98039],{"class":998},"       [12, 11, 10,  9,  8,  7],\n",[36,98041,98042],{"class":38,"line":2397},[36,98043,98044],{"class":998},"       [ 6,  5,  4,  3,  2,  1]])\n",[36,98046,98047],{"class":38,"line":2403},[36,98048,94572],{"class":998},[14,98050,98051],{},"⑦修改元素",[26,98053,98055],{"className":28,"code":98054,"language":30,"meta":31,"style":31},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[33,98056,98057,98062,98080,98085],{"__ignoreMap":31},[36,98058,98059],{"class":38,"line":39},[36,98060,98061],{"class":42},"#获取前两行和前两列\n",[36,98063,98064,98067,98069,98071,98073,98076,98078],{"class":38,"line":46},[36,98065,98066],{"class":49},"sub_a",[36,98068,54],{"class":53},[36,98070,97814],{"class":49},[36,98072,181],{"class":60},[36,98074,98075],{"class":49},",:",[36,98077,181],{"class":60},[36,98079,33988],{"class":49},[36,98081,98082],{"class":38,"line":78},[36,98083,98084],{"class":42},"#修改sub_a第一个元素的值\n",[36,98086,98087,98090,98092,98094,98096,98098,98100],{"class":38,"line":125},[36,98088,98089],{"class":49},"sub_a[",[36,98091,643],{"class":60},[36,98093,64],{"class":49},[36,98095,643],{"class":60},[36,98097,1819],{"class":49},[36,98099,54],{"class":53},[36,98101,98102],{"class":60},"100\n",[14,98104,98105],{},"⑧数组复制copy()",[26,98107,98109],{"className":28,"code":98108,"language":30,"meta":31,"style":31},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[33,98110,98111,98116,98126,98131],{"__ignoreMap":31},[36,98112,98113],{"class":38,"line":39},[36,98114,98115],{"class":42},"#数组复制\n",[36,98117,98118,98121,98123],{"class":38,"line":46},[36,98119,98120],{"class":49},"copy_a",[36,98122,54],{"class":53},[36,98124,98125],{"class":49},"np.copy(sub_a)\n",[36,98127,98128],{"class":38,"line":78},[36,98129,98130],{"class":42},"#修改copy_a后不影响原数组\n",[36,98132,98133,98136,98138,98140,98142,98144,98146],{"class":38,"line":125},[36,98134,98135],{"class":49},"copy_a[",[36,98137,643],{"class":60},[36,98139,64],{"class":49},[36,98141,643],{"class":60},[36,98143,1819],{"class":49},[36,98145,54],{"class":53},[36,98147,98102],{"class":60},[14,98149,98150],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[807,98152,98153],{},"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":46,"depth":46,"links":98155},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97672,"description":823},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98162,"title":98163,"body":98164,"description":823,"extension":824,"meta":98656,"navigation":193,"path":98657,"seo":98658,"stem":98659,"__hash__":98660},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98165,"toc":98648},[98166,98169,98173,98176,98179,98232,98235,98260,98263,98282,98302,98305,98321,98325,98371,98375,98417,98421,98424,98427,98430,98433,98436,98498,98558,98562,98565,98622,98626,98631,98640,98645],[10,98167,98163],{"id":98168},"_5改变数组的维度",[21,98170,98172],{"id":98171},"_51-使用reshape","5.1 使用reshape()",[14,98174,98175],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,98177,98178],{},"①一维数组转换为二维数组",[26,98180,98182],{"className":28,"code":98181,"language":30,"meta":31,"style":31},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[33,98183,98184,98200,98205,98210,98215],{"__ignoreMap":31},[36,98185,98186,98188,98190,98192,98194,98196,98198],{"class":38,"line":39},[36,98187,50],{"class":49},[36,98189,54],{"class":53},[36,98191,274],{"class":49},[36,98193,61],{"class":60},[36,98195,64],{"class":49},[36,98197,281],{"class":60},[36,98199,75],{"class":49},[36,98201,98202],{"class":38,"line":46},[36,98203,98204],{"class":42},"#将一维数组进行转换\n",[36,98206,98207],{"class":38,"line":78},[36,98208,98209],{"class":42},"#注意点：元素个数不可以变\n",[36,98211,98212],{"class":38,"line":125},[36,98213,98214],{"class":42},"#转换维度要保持一致，不一致就异常！！！\n",[36,98216,98217,98219,98221,98224,98226,98228,98230],{"class":38,"line":131},[36,98218,269],{"class":49},[36,98220,54],{"class":53},[36,98222,98223],{"class":49},"a.reshape(",[36,98225,181],{"class":60},[36,98227,64],{"class":49},[36,98229,1230],{"class":60},[36,98231,75],{"class":49},[14,98233,98234],{},"②一维数组转换为三维数组",[26,98236,98238],{"className":28,"code":98237,"language":30,"meta":31,"style":31},"aaa=a.reshape(2,3,2)\n",[33,98239,98240],{"__ignoreMap":31},[36,98241,98242,98244,98246,98248,98250,98252,98254,98256,98258],{"class":38,"line":39},[36,98243,96165],{"class":49},[36,98245,54],{"class":53},[36,98247,98223],{"class":49},[36,98249,181],{"class":60},[36,98251,64],{"class":49},[36,98253,162],{"class":60},[36,98255,64],{"class":49},[36,98257,181],{"class":60},[36,98259,75],{"class":49},[14,98261,98262],{},"③二维数组转化为一维数组",[26,98264,98266],{"className":28,"code":98265,"language":30,"meta":31,"style":31},"#知道元素个数：\naa.reshape(12)\n",[33,98267,98268,98273],{"__ignoreMap":31},[36,98269,98270],{"class":38,"line":39},[36,98271,98272],{"class":42},"#知道元素个数：\n",[36,98274,98275,98278,98280],{"class":38,"line":46},[36,98276,98277],{"class":49},"aa.reshape(",[36,98279,625],{"class":60},[36,98281,75],{"class":49},[26,98283,98285],{"className":28,"code":98284,"language":30,"meta":31,"style":31},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[33,98286,98287,98292],{"__ignoreMap":31},[36,98288,98289],{"class":38,"line":39},[36,98290,98291],{"class":42},"#不知道元素个数，参数传递-1\n",[36,98293,98294,98296,98298,98300],{"class":38,"line":46},[36,98295,98277],{"class":49},[36,98297,1414],{"class":53},[36,98299,61],{"class":60},[36,98301,75],{"class":49},[14,98303,98304],{},"④三维数组转换为一维数组",[26,98306,98308],{"className":28,"code":98307,"language":30,"meta":31,"style":31},"aaa.reshape(-1)\n",[33,98309,98310],{"__ignoreMap":31},[36,98311,98312,98315,98317,98319],{"class":38,"line":39},[36,98313,98314],{"class":49},"aaa.reshape(",[36,98316,1414],{"class":53},[36,98318,61],{"class":60},[36,98320,75],{"class":49},[21,98322,98324],{"id":98323},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[26,98326,98328],{"className":28,"code":98327,"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,98329,98330,98357,98362,98366],{"__ignoreMap":31},[36,98331,98332,98334,98336,98338,98340,98342,98344,98346,98348,98350,98352,98354],{"class":38,"line":39},[36,98333,269],{"class":49},[36,98335,54],{"class":53},[36,98337,274],{"class":49},[36,98339,61],{"class":60},[36,98341,64],{"class":49},[36,98343,281],{"class":60},[36,98345,284],{"class":49},[36,98347,181],{"class":60},[36,98349,64],{"class":49},[36,98351,1230],{"class":60},[36,98353,1314],{"class":49},[36,98355,98356],{"class":42},"#转换为2行6列的数组\n",[36,98358,98359],{"class":38,"line":46},[36,98360,98361],{"class":49},"aa.revel()\n",[36,98363,98364],{"class":38,"line":78},[36,98365,538],{"class":42},[36,98367,98368],{"class":38,"line":125},[36,98369,98370],{"class":42},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[21,98372,98374],{"id":98373},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[26,98376,98378],{"className":28,"code":98377,"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,98379,98380,98404,98409,98413],{"__ignoreMap":31},[36,98381,98382,98384,98386,98388,98390,98392,98394,98396,98398,98400,98402],{"class":38,"line":39},[36,98383,269],{"class":49},[36,98385,54],{"class":53},[36,98387,274],{"class":49},[36,98389,61],{"class":60},[36,98391,64],{"class":49},[36,98393,281],{"class":60},[36,98395,284],{"class":49},[36,98397,181],{"class":60},[36,98399,64],{"class":49},[36,98401,1230],{"class":60},[36,98403,75],{"class":49},[36,98405,98406],{"class":38,"line":46},[36,98407,98408],{"class":49},"aa.flatten()\n",[36,98410,98411],{"class":38,"line":78},[36,98412,538],{"class":42},[36,98414,98415],{"class":38,"line":125},[36,98416,98370],{"class":42},[21,98418,98420],{"id":98419},"_54-使用resize","5.4 使用resize()",[14,98422,98423],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,98425,98426],{},"通过resize方法可以改变数组的维度",[14,98428,98429],{},"#resize修改数组维度",[14,98431,98432],{},"#以元组的形式指定形状",[14,98434,98435],{},"#改变的是原数组",[26,98437,98439],{"className":28,"code":98438,"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,98440,98441,98457,98477,98490,98494],{"__ignoreMap":31},[36,98442,98443,98445,98447,98449,98451,98453,98455],{"class":38,"line":39},[36,98444,50],{"class":49},[36,98446,54],{"class":53},[36,98448,274],{"class":49},[36,98450,61],{"class":60},[36,98452,64],{"class":49},[36,98454,281],{"class":60},[36,98456,75],{"class":49},[36,98458,98459,98462,98464,98466,98468,98470,98472,98474],{"class":38,"line":46},[36,98460,98461],{"class":49},"a.shape",[36,98463,54],{"class":53},[36,98465,901],{"class":49},[36,98467,181],{"class":60},[36,98469,64],{"class":49},[36,98471,1230],{"class":60},[36,98473,1314],{"class":49},[36,98475,98476],{"class":42},"#改变了原数组\n",[36,98478,98479,98481,98483,98486,98488],{"class":38,"line":78},[36,98480,50],{"class":49},[36,98482,54],{"class":53},[36,98484,98485],{"class":49},"resize((",[36,98487,625],{"class":60},[36,98489,31239],{"class":49},[36,98491,98492],{"class":38,"line":125},[36,98493,538],{"class":42},[36,98495,98496],{"class":38,"line":131},[36,98497,98370],{"class":42},[26,98499,98501],{"className":28,"code":98500,"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,98502,98503,98516,98520,98524,98529,98534,98539,98544,98549,98554],{"__ignoreMap":31},[36,98504,98505,98508,98510,98512,98514],{"class":38,"line":39},[36,98506,98507],{"class":49},"a.resize((",[36,98509,1230],{"class":60},[36,98511,64],{"class":49},[36,98513,181],{"class":60},[36,98515,31239],{"class":49},[36,98517,98518],{"class":38,"line":46},[36,98519,538],{"class":42},[36,98521,98522],{"class":38,"line":78},[36,98523,94572],{"class":998},[36,98525,98526],{"class":38,"line":125},[36,98527,98528],{"class":998},"array([[ 1,  2],\n",[36,98530,98531],{"class":38,"line":131},[36,98532,98533],{"class":998},"       [ 3,  4],\n",[36,98535,98536],{"class":38,"line":396},[36,98537,98538],{"class":998},"       [ 5,  6],\n",[36,98540,98541],{"class":38,"line":407},[36,98542,98543],{"class":998},"       [ 7,  8],\n",[36,98545,98546],{"class":38,"line":2061},[36,98547,98548],{"class":998},"       [ 9, 10],\n",[36,98550,98551],{"class":38,"line":2067},[36,98552,98553],{"class":998},"       [11, 12]])\n",[36,98555,98556],{"class":38,"line":2079},[36,98557,94572],{"class":998},[21,98559,98561],{"id":98560},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,98563,98564],{},"改变了原数组",[26,98566,98568],{"className":28,"code":98567,"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,98569,98570,98586,98602,98606,98610,98614,98618],{"__ignoreMap":31},[36,98571,98572,98574,98576,98578,98580,98582,98584],{"class":38,"line":39},[36,98573,50],{"class":49},[36,98575,54],{"class":53},[36,98577,274],{"class":49},[36,98579,61],{"class":60},[36,98581,64],{"class":49},[36,98583,281],{"class":60},[36,98585,75],{"class":49},[36,98587,98588,98590,98592,98594,98596,98598,98600],{"class":38,"line":46},[36,98589,98461],{"class":49},[36,98591,54],{"class":53},[36,98593,901],{"class":49},[36,98595,181],{"class":60},[36,98597,64],{"class":49},[36,98599,1230],{"class":60},[36,98601,75],{"class":49},[36,98603,98604],{"class":38,"line":78},[36,98605,538],{"class":42},[36,98607,98608],{"class":38,"line":125},[36,98609,94572],{"class":998},[36,98611,98612],{"class":38,"line":131},[36,98613,97832],{"class":998},[36,98615,98616],{"class":38,"line":396},[36,98617,97837],{"class":998},[36,98619,98620],{"class":38,"line":407},[36,98621,94572],{"class":998},[21,98623,98625],{"id":98624},"_56-重要比较","5.6 重要比较：",[14,98627,98628],{},[2212,98629],{"alt":31,"src":98630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,98632,98633,98634,98636,98637,98639],{},"口诀：NumPy 函数要么用 ",[33,98635,96607],{},"，要么用 ",[33,98638,32238],{},"，创建结构用 shape，造数据用 size",[14,98641,98642],{},[2212,98643],{"alt":31,"src":98644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[807,98646,98647],{},"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":46,"depth":46,"links":98649},[98650,98651,98652,98653,98654,98655],{"id":98171,"depth":46,"text":98172},{"id":98323,"depth":46,"text":98324},{"id":98373,"depth":46,"text":98374},{"id":98419,"depth":46,"text":98420},{"id":98560,"depth":46,"text":98561},{"id":98624,"depth":46,"text":98625},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98163,"description":823},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98662,"title":98663,"body":98664,"description":823,"extension":824,"meta":99736,"navigation":193,"path":99737,"seo":99738,"stem":99739,"__hash__":99740},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98665,"toc":99730},[98666,98669,98673,98676,98679,98682,98747,98750,98790,98793,98875,98878,98883,98905,98907,98912,98917,98920,98923,99078,99081,99283,99287,99290,99293,99361,99363,99368,99371,99374,99454,99458,99461,99463,99536,99538,99543,99545,99625,99629,99632,99635,99638,99641,99644,99647,99727],[10,98667,98663],{"id":98668},"_6数组的拼接",[21,98670,98672],{"id":98671},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98674,98675],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98677,98678],{},"函数内部传两个数列构成的数列或者元组",[14,98680,98681],{},"①一维数组的拼接",[26,98683,98685],{"className":28,"code":98684,"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,98686,98687,98707,98727,98732,98737,98742],{"__ignoreMap":31},[36,98688,98689,98691,98693,98695,98697,98699,98701,98703,98705],{"class":38,"line":39},[36,98690,50],{"class":49},[36,98692,54],{"class":53},[36,98694,610],{"class":49},[36,98696,61],{"class":60},[36,98698,64],{"class":49},[36,98700,181],{"class":60},[36,98702,64],{"class":49},[36,98704,162],{"class":60},[36,98706,165],{"class":49},[36,98708,98709,98711,98713,98715,98717,98719,98721,98723,98725],{"class":38,"line":46},[36,98710,321],{"class":49},[36,98712,54],{"class":53},[36,98714,610],{"class":49},[36,98716,186],{"class":60},[36,98718,64],{"class":49},[36,98720,157],{"class":60},[36,98722,64],{"class":49},[36,98724,1230],{"class":60},[36,98726,165],{"class":49},[36,98728,98729],{"class":38,"line":78},[36,98730,98731],{"class":42},"#调用concatenate进行数组拼接\n",[36,98733,98734],{"class":38,"line":125},[36,98735,98736],{"class":49},"np.concatenate((a,b))\n",[36,98738,98739],{"class":38,"line":131},[36,98740,98741],{"class":42},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[36,98743,98744],{"class":38,"line":396},[36,98745,98746],{"class":42},"#np.concatenate([a,b])\n",[14,98748,98749],{},"②一维多个数组拼接",[26,98751,98753],{"className":28,"code":98752,"language":30,"meta":31,"style":31},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[33,98754,98755,98760,98780,98785],{"__ignoreMap":31},[36,98756,98757],{"class":38,"line":39},[36,98758,98759],{"class":42},"#也可以多个数组进行拼接\n",[36,98761,98762,98764,98766,98768,98770,98772,98774,98776,98778],{"class":38,"line":46},[36,98763,1177],{"class":49},[36,98765,54],{"class":53},[36,98767,610],{"class":49},[36,98769,332],{"class":60},[36,98771,64],{"class":49},[36,98773,1356],{"class":60},[36,98775,64],{"class":49},[36,98777,281],{"class":60},[36,98779,165],{"class":49},[36,98781,98782],{"class":38,"line":78},[36,98783,98784],{"class":49},"c\n",[36,98786,98787],{"class":38,"line":125},[36,98788,98789],{"class":49},"np.concatenate((a,b,c))\n",[14,98791,98792],{},"③二维数组拼接",[26,98794,98796],{"className":28,"code":98795,"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,98797,98798,98803,98827,98852,98857,98862],{"__ignoreMap":31},[36,98799,98800],{"class":38,"line":39},[36,98801,98802],{"class":42},"#二维数组使用concatenate进行拼接\n",[36,98804,98805,98807,98809,98811,98813,98815,98817,98819,98821,98823,98825],{"class":38,"line":46},[36,98806,269],{"class":49},[36,98808,54],{"class":53},[36,98810,274],{"class":49},[36,98812,61],{"class":60},[36,98814,64],{"class":49},[36,98816,281],{"class":60},[36,98818,284],{"class":49},[36,98820,162],{"class":60},[36,98822,64],{"class":49},[36,98824,186],{"class":60},[36,98826,75],{"class":49},[36,98828,98829,98832,98834,98836,98838,98840,98842,98844,98846,98848,98850],{"class":38,"line":78},[36,98830,98831],{"class":49},"bb",[36,98833,54],{"class":53},[36,98835,274],{"class":49},[36,98837,1223],{"class":60},[36,98839,64],{"class":49},[36,98841,1524],{"class":60},[36,98843,284],{"class":49},[36,98845,162],{"class":60},[36,98847,64],{"class":49},[36,98849,186],{"class":60},[36,98851,75],{"class":49},[36,98853,98854],{"class":38,"line":125},[36,98855,98856],{"class":42},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[36,98858,98859],{"class":38,"line":131},[36,98860,98861],{"class":42},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[36,98863,98864,98867,98869,98871,98873],{"class":38,"line":396},[36,98865,98866],{"class":49},"np.concatenate((aa,bb),",[36,98868,48256],{"class":416},[36,98870,54],{"class":53},[36,98872,643],{"class":60},[36,98874,75],{"class":49},[14,98876,98877],{},"结果：",[14,98879,98880],{},[2212,98881],{"alt":31,"src":98882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[26,98884,98886],{"className":28,"code":98885,"language":30,"meta":31,"style":31},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[33,98887,98888,98893],{"__ignoreMap":31},[36,98889,98890],{"class":38,"line":39},[36,98891,98892],{"class":42},"#指定axis为1进行拼接\n",[36,98894,98895,98897,98899,98901,98903],{"class":38,"line":46},[36,98896,98866],{"class":49},[36,98898,48256],{"class":416},[36,98900,54],{"class":53},[36,98902,61],{"class":60},[36,98904,75],{"class":49},[14,98906,98877],{},[14,98908,98909],{},[2212,98910],{"alt":31,"src":98911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98913,98914],{},[1043,98915,98916],{},"二维数组总结：0竖着方向，1横着方向",[14,98918,98919],{},"④三维数组拼接",[14,98921,98922],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[26,98924,98926],{"className":28,"code":98925,"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,98927,98928,98933,98961,98991,98996,99013,99018,99023,99028,99045,99050,99055,99060,99073],{"__ignoreMap":31},[36,98929,98930],{"class":38,"line":39},[36,98931,98932],{"class":42},"#两个三行六列\n",[36,98934,98935,98937,98939,98941,98943,98945,98947,98949,98951,98953,98955,98957,98959],{"class":38,"line":46},[36,98936,96165],{"class":49},[36,98938,54],{"class":53},[36,98940,274],{"class":49},[36,98942,61],{"class":60},[36,98944,64],{"class":49},[36,98946,1211],{"class":60},[36,98948,284],{"class":49},[36,98950,181],{"class":60},[36,98952,64],{"class":49},[36,98954,162],{"class":60},[36,98956,64],{"class":49},[36,98958,1230],{"class":60},[36,98960,75],{"class":49},[36,98962,98963,98966,98968,98970,98972,98974,98977,98979,98981,98983,98985,98987,98989],{"class":38,"line":78},[36,98964,98965],{"class":49},"bbb",[36,98967,54],{"class":53},[36,98969,274],{"class":49},[36,98971,1223],{"class":60},[36,98973,64],{"class":49},[36,98975,98976],{"class":60},"137",[36,98978,284],{"class":49},[36,98980,181],{"class":60},[36,98982,64],{"class":49},[36,98984,162],{"class":60},[36,98986,64],{"class":49},[36,98988,1230],{"class":60},[36,98990,75],{"class":49},[36,98992,98993],{"class":38,"line":125},[36,98994,98995],{"class":42},"#axis=0\n",[36,98997,98998,99000,99002,99005,99007,99009,99011],{"class":38,"line":131},[36,98999,1577],{"class":49},[36,99001,54],{"class":53},[36,99003,99004],{"class":49},"np.concatenate((aaa,bbb),",[36,99006,48256],{"class":416},[36,99008,54],{"class":53},[36,99010,643],{"class":60},[36,99012,75],{"class":49},[36,99014,99015],{"class":38,"line":396},[36,99016,99017],{"class":49},"s.shape\n",[36,99019,99020],{"class":38,"line":407},[36,99021,99022],{"class":42},"#输出：(4,3,6)\n",[36,99024,99025],{"class":38,"line":2061},[36,99026,99027],{"class":42},"#axis=1\n",[36,99029,99030,99033,99035,99037,99039,99041,99043],{"class":38,"line":2067},[36,99031,99032],{"class":49},"ss",[36,99034,54],{"class":53},[36,99036,99004],{"class":49},[36,99038,48256],{"class":416},[36,99040,54],{"class":53},[36,99042,61],{"class":60},[36,99044,75],{"class":49},[36,99046,99047],{"class":38,"line":2079},[36,99048,99049],{"class":49},"ss.shape\n",[36,99051,99052],{"class":38,"line":2362},[36,99053,99054],{"class":42},"#输出：(2,6,6)\n",[36,99056,99057],{"class":38,"line":2367},[36,99058,99059],{"class":42},"#axis=2\n",[36,99061,99062,99064,99066,99068,99070],{"class":38,"line":2373},[36,99063,99004],{"class":49},[36,99065,48256],{"class":416},[36,99067,54],{"class":53},[36,99069,181],{"class":60},[36,99071,99072],{"class":49},").shape\n",[36,99074,99075],{"class":38,"line":2378},[36,99076,99077],{"class":42},"#输出：（2，3，12）\n",[14,99079,99080],{},"⑤四维数组拼接",[26,99082,99084],{"className":28,"code":99083,"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,99085,99086,99090,99118,99146,99171,99197,99201,99214,99219,99223,99235,99240,99244,99256,99261,99266,99278],{"__ignoreMap":31},[36,99087,99088],{"class":38,"line":39},[36,99089,98932],{"class":42},[36,99091,99092,99094,99096,99098,99100,99102,99104,99106,99108,99110,99112,99114,99116],{"class":38,"line":46},[36,99093,96165],{"class":49},[36,99095,54],{"class":53},[36,99097,274],{"class":49},[36,99099,61],{"class":60},[36,99101,64],{"class":49},[36,99103,1211],{"class":60},[36,99105,284],{"class":49},[36,99107,181],{"class":60},[36,99109,64],{"class":49},[36,99111,162],{"class":60},[36,99113,64],{"class":49},[36,99115,1230],{"class":60},[36,99117,75],{"class":49},[36,99119,99120,99122,99124,99126,99128,99130,99132,99134,99136,99138,99140,99142,99144],{"class":38,"line":78},[36,99121,98965],{"class":49},[36,99123,54],{"class":53},[36,99125,274],{"class":49},[36,99127,1223],{"class":60},[36,99129,64],{"class":49},[36,99131,98976],{"class":60},[36,99133,284],{"class":49},[36,99135,181],{"class":60},[36,99137,64],{"class":49},[36,99139,162],{"class":60},[36,99141,64],{"class":49},[36,99143,1230],{"class":60},[36,99145,75],{"class":49},[36,99147,99148,99151,99153,99155,99157,99159,99161,99163,99165,99167,99169],{"class":38,"line":125},[36,99149,99150],{"class":49},"aaaa",[36,99152,54],{"class":53},[36,99154,98314],{"class":49},[36,99156,181],{"class":60},[36,99158,64],{"class":49},[36,99160,162],{"class":60},[36,99162,64],{"class":49},[36,99164,162],{"class":60},[36,99166,64],{"class":49},[36,99168,181],{"class":60},[36,99170,75],{"class":49},[36,99172,99173,99176,99178,99181,99183,99185,99187,99189,99191,99193,99195],{"class":38,"line":131},[36,99174,99175],{"class":49},"bbbb",[36,99177,54],{"class":53},[36,99179,99180],{"class":49},"bbb.reshape(",[36,99182,181],{"class":60},[36,99184,64],{"class":49},[36,99186,162],{"class":60},[36,99188,64],{"class":49},[36,99190,162],{"class":60},[36,99192,64],{"class":49},[36,99194,181],{"class":60},[36,99196,75],{"class":49},[36,99198,99199],{"class":38,"line":396},[36,99200,98995],{"class":42},[36,99202,99203,99206,99208,99210,99212],{"class":38,"line":407},[36,99204,99205],{"class":49},"np.concatenate((aaaa,bbbb),",[36,99207,48256],{"class":416},[36,99209,54],{"class":53},[36,99211,643],{"class":60},[36,99213,99072],{"class":49},[36,99215,99216],{"class":38,"line":2061},[36,99217,99218],{"class":42},"#结果：（4，3，3，2）\n",[36,99220,99221],{"class":38,"line":2067},[36,99222,99027],{"class":42},[36,99224,99225,99227,99229,99231,99233],{"class":38,"line":2079},[36,99226,99205],{"class":49},[36,99228,48256],{"class":416},[36,99230,54],{"class":53},[36,99232,61],{"class":60},[36,99234,99072],{"class":49},[36,99236,99237],{"class":38,"line":2362},[36,99238,99239],{"class":42},"#结果：（2，6，3，2）\n",[36,99241,99242],{"class":38,"line":2367},[36,99243,99059],{"class":42},[36,99245,99246,99248,99250,99252,99254],{"class":38,"line":2373},[36,99247,99205],{"class":49},[36,99249,48256],{"class":416},[36,99251,54],{"class":53},[36,99253,181],{"class":60},[36,99255,99072],{"class":49},[36,99257,99258],{"class":38,"line":2378},[36,99259,99260],{"class":42},"#结果：（2，3，6，2）\n",[36,99262,99263],{"class":38,"line":2392},[36,99264,99265],{"class":42},"#axis=3\n",[36,99267,99268,99270,99272,99274,99276],{"class":38,"line":2397},[36,99269,99205],{"class":49},[36,99271,48256],{"class":416},[36,99273,54],{"class":53},[36,99275,162],{"class":60},[36,99277,99072],{"class":49},[36,99279,99280],{"class":38,"line":2403},[36,99281,99282],{"class":42},"#结果：（2，3，3，4）\n",[21,99284,99286],{"id":99285},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,99288,99289],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,99291,99292],{},"①二维数组",[26,99294,99296],{"className":28,"code":99295,"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,99297,99298,99322,99346,99351,99356],{"__ignoreMap":31},[36,99299,99300,99302,99304,99306,99308,99310,99312,99314,99316,99318,99320],{"class":38,"line":39},[36,99301,269],{"class":49},[36,99303,54],{"class":53},[36,99305,274],{"class":49},[36,99307,61],{"class":60},[36,99309,64],{"class":49},[36,99311,281],{"class":60},[36,99313,284],{"class":49},[36,99315,162],{"class":60},[36,99317,64],{"class":49},[36,99319,186],{"class":60},[36,99321,75],{"class":49},[36,99323,99324,99326,99328,99330,99332,99334,99336,99338,99340,99342,99344],{"class":38,"line":46},[36,99325,98831],{"class":49},[36,99327,54],{"class":53},[36,99329,274],{"class":49},[36,99331,1223],{"class":60},[36,99333,64],{"class":49},[36,99335,1524],{"class":60},[36,99337,284],{"class":49},[36,99339,162],{"class":60},[36,99341,64],{"class":49},[36,99343,186],{"class":60},[36,99345,75],{"class":49},[36,99347,99348],{"class":38,"line":78},[36,99349,99350],{"class":49},"np.hstack((aa,bb))\n",[36,99352,99353],{"class":38,"line":125},[36,99354,99355],{"class":42},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[36,99357,99358],{"class":38,"line":131},[36,99359,99360],{"class":42},"#np.hstack([aa,bb])\n",[14,99362,98877],{},[14,99364,99365],{},[2212,99366],{"alt":31,"src":99367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,99369,99370],{},"等效于concatenate()函数中axis=1时的情况",[14,99372,99373],{},"②三维数组",[26,99375,99377],{"className":28,"code":99376,"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,99378,99379,99383,99411,99439,99444,99449],{"__ignoreMap":31},[36,99380,99381],{"class":38,"line":39},[36,99382,98932],{"class":42},[36,99384,99385,99387,99389,99391,99393,99395,99397,99399,99401,99403,99405,99407,99409],{"class":38,"line":46},[36,99386,96165],{"class":49},[36,99388,54],{"class":53},[36,99390,274],{"class":49},[36,99392,61],{"class":60},[36,99394,64],{"class":49},[36,99396,1211],{"class":60},[36,99398,284],{"class":49},[36,99400,181],{"class":60},[36,99402,64],{"class":49},[36,99404,162],{"class":60},[36,99406,64],{"class":49},[36,99408,1230],{"class":60},[36,99410,75],{"class":49},[36,99412,99413,99415,99417,99419,99421,99423,99425,99427,99429,99431,99433,99435,99437],{"class":38,"line":78},[36,99414,98965],{"class":49},[36,99416,54],{"class":53},[36,99418,274],{"class":49},[36,99420,1223],{"class":60},[36,99422,64],{"class":49},[36,99424,98976],{"class":60},[36,99426,284],{"class":49},[36,99428,181],{"class":60},[36,99430,64],{"class":49},[36,99432,162],{"class":60},[36,99434,64],{"class":49},[36,99436,1230],{"class":60},[36,99438,75],{"class":49},[36,99440,99441],{"class":38,"line":125},[36,99442,99443],{"class":42},"#使用hstack\n",[36,99445,99446],{"class":38,"line":131},[36,99447,99448],{"class":49},"np.hstack((aaa,bbb)).shape\n",[36,99450,99451],{"class":38,"line":396},[36,99452,99453],{"class":42},"#输出：（2，6，6）\n",[21,99455,99457],{"id":99456},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,99459,99460],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,99462,99292],{},[26,99464,99466],{"className":28,"code":99465,"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,99467,99468,99492,99516,99521,99526,99531],{"__ignoreMap":31},[36,99469,99470,99472,99474,99476,99478,99480,99482,99484,99486,99488,99490],{"class":38,"line":39},[36,99471,269],{"class":49},[36,99473,54],{"class":53},[36,99475,274],{"class":49},[36,99477,61],{"class":60},[36,99479,64],{"class":49},[36,99481,281],{"class":60},[36,99483,284],{"class":49},[36,99485,162],{"class":60},[36,99487,64],{"class":49},[36,99489,186],{"class":60},[36,99491,75],{"class":49},[36,99493,99494,99496,99498,99500,99502,99504,99506,99508,99510,99512,99514],{"class":38,"line":46},[36,99495,98831],{"class":49},[36,99497,54],{"class":53},[36,99499,274],{"class":49},[36,99501,1223],{"class":60},[36,99503,64],{"class":49},[36,99505,1524],{"class":60},[36,99507,284],{"class":49},[36,99509,162],{"class":60},[36,99511,64],{"class":49},[36,99513,186],{"class":60},[36,99515,75],{"class":49},[36,99517,99518],{"class":38,"line":78},[36,99519,99520],{"class":42},"#vstack 垂直方向进行堆叠\n",[36,99522,99523],{"class":38,"line":125},[36,99524,99525],{"class":49},"np.vstack((aa,bb))\n",[36,99527,99528],{"class":38,"line":131},[36,99529,99530],{"class":42},"#与hstack传的参数类似，等价于：\n",[36,99532,99533],{"class":38,"line":396},[36,99534,99535],{"class":49},"np.vstack([aa,bb])\n",[14,99537,98877],{},[14,99539,99540],{},[2212,99541],{"alt":31,"src":99542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,99544,99373],{},[26,99546,99548],{"className":28,"code":99547,"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,99549,99550,99554,99582,99610,99615,99620],{"__ignoreMap":31},[36,99551,99552],{"class":38,"line":39},[36,99553,98932],{"class":42},[36,99555,99556,99558,99560,99562,99564,99566,99568,99570,99572,99574,99576,99578,99580],{"class":38,"line":46},[36,99557,96165],{"class":49},[36,99559,54],{"class":53},[36,99561,274],{"class":49},[36,99563,61],{"class":60},[36,99565,64],{"class":49},[36,99567,1211],{"class":60},[36,99569,284],{"class":49},[36,99571,181],{"class":60},[36,99573,64],{"class":49},[36,99575,162],{"class":60},[36,99577,64],{"class":49},[36,99579,1230],{"class":60},[36,99581,75],{"class":49},[36,99583,99584,99586,99588,99590,99592,99594,99596,99598,99600,99602,99604,99606,99608],{"class":38,"line":78},[36,99585,98965],{"class":49},[36,99587,54],{"class":53},[36,99589,274],{"class":49},[36,99591,1223],{"class":60},[36,99593,64],{"class":49},[36,99595,98976],{"class":60},[36,99597,284],{"class":49},[36,99599,181],{"class":60},[36,99601,64],{"class":49},[36,99603,162],{"class":60},[36,99605,64],{"class":49},[36,99607,1230],{"class":60},[36,99609,75],{"class":49},[36,99611,99612],{"class":38,"line":125},[36,99613,99614],{"class":42},"#使用vstack\n",[36,99616,99617],{"class":38,"line":131},[36,99618,99619],{"class":49},"np.vstack((aaa,bbb)).shape\n",[36,99621,99622],{"class":38,"line":396},[36,99623,99624],{"class":42},"#输出：（4，3，6）\n",[21,99626,99628],{"id":99627},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,99630,99631],{},"该方法是三维数组特有的方法",[14,99633,99634],{},"也就是说",[14,99636,99637],{},"一维数组拼接方法用：concatenate()",[14,99639,99640],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,99642,99643],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,99645,99646],{},"四维数组及多维数组只能用concatenate进行拼接",[26,99648,99650],{"className":28,"code":99649,"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,99651,99652,99656,99684,99712,99717,99722],{"__ignoreMap":31},[36,99653,99654],{"class":38,"line":39},[36,99655,98932],{"class":42},[36,99657,99658,99660,99662,99664,99666,99668,99670,99672,99674,99676,99678,99680,99682],{"class":38,"line":46},[36,99659,96165],{"class":49},[36,99661,54],{"class":53},[36,99663,274],{"class":49},[36,99665,61],{"class":60},[36,99667,64],{"class":49},[36,99669,1211],{"class":60},[36,99671,284],{"class":49},[36,99673,181],{"class":60},[36,99675,64],{"class":49},[36,99677,162],{"class":60},[36,99679,64],{"class":49},[36,99681,1230],{"class":60},[36,99683,75],{"class":49},[36,99685,99686,99688,99690,99692,99694,99696,99698,99700,99702,99704,99706,99708,99710],{"class":38,"line":78},[36,99687,98965],{"class":49},[36,99689,54],{"class":53},[36,99691,274],{"class":49},[36,99693,1223],{"class":60},[36,99695,64],{"class":49},[36,99697,98976],{"class":60},[36,99699,284],{"class":49},[36,99701,181],{"class":60},[36,99703,64],{"class":49},[36,99705,162],{"class":60},[36,99707,64],{"class":49},[36,99709,1230],{"class":60},[36,99711,75],{"class":49},[36,99713,99714],{"class":38,"line":125},[36,99715,99716],{"class":42},"#使用dstack\n",[36,99718,99719],{"class":38,"line":131},[36,99720,99721],{"class":49},"np.dstack((aaa,bbb)).shape\n",[36,99723,99724],{"class":38,"line":396},[36,99725,99726],{"class":42},"#结果：（2，3，12）\n",[807,99728,99729],{},"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":46,"depth":46,"links":99731},[99732,99733,99734,99735],{"id":98671,"depth":46,"text":98672},{"id":99285,"depth":46,"text":99286},{"id":99456,"depth":46,"text":99457},{"id":99627,"depth":46,"text":99628},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98663,"description":823},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99742,"title":99743,"body":99744,"description":823,"extension":824,"meta":100019,"navigation":193,"path":100020,"seo":100021,"stem":100022,"__hash__":100023},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99745,"toc":100017},[99746,99749,99752,99846,99849,99852,99855,99858,99861,99864,99867,99870,100014],[10,99747,99743],{"id":99748},"_7数组转置",[14,99750,99751],{},"使用transpose()函数",[26,99753,99755],{"className":28,"code":99754,"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,99756,99757,99767,99791,99796,99801,99806,99811,99819,99823,99827,99832,99837,99842],{"__ignoreMap":31},[36,99758,99759,99761,99763,99765],{"class":38,"line":39},[36,99760,31135],{"class":53},[36,99762,32122],{"class":49},[36,99764,32125],{"class":53},[36,99766,32128],{"class":49},[36,99768,99769,99771,99773,99775,99777,99779,99781,99783,99785,99787,99789],{"class":38,"line":46},[36,99770,50],{"class":49},[36,99772,54],{"class":53},[36,99774,32459],{"class":49},[36,99776,61],{"class":60},[36,99778,64],{"class":49},[36,99780,281],{"class":60},[36,99782,284],{"class":49},[36,99784,186],{"class":60},[36,99786,64],{"class":49},[36,99788,162],{"class":60},[36,99790,75],{"class":49},[36,99792,99793],{"class":38,"line":78},[36,99794,99795],{"class":42},"#二维数组转置\n",[36,99797,99798],{"class":38,"line":125},[36,99799,99800],{"class":42},"#调用transpose()函数\n",[36,99802,99803],{"class":38,"line":131},[36,99804,99805],{"class":49},"a.transpose()\n",[36,99807,99808],{"class":38,"line":396},[36,99809,99810],{"class":42},"#对于二维数组也可以采用.T来实现\n",[36,99812,99813,99816],{"class":38,"line":407},[36,99814,99815],{"class":49},"a.T",[36,99817,99818],{"class":42},"#与上述代码一样\n",[36,99820,99821],{"class":38,"line":2061},[36,99822,538],{"class":42},[36,99824,99825],{"class":38,"line":2067},[36,99826,94572],{"class":998},[36,99828,99829],{"class":38,"line":2079},[36,99830,99831],{"class":998},"array([[ 1,  4,  7, 10],\n",[36,99833,99834],{"class":38,"line":2362},[36,99835,99836],{"class":998},"       [ 2,  5,  8, 11],\n",[36,99838,99839],{"class":38,"line":2367},[36,99840,99841],{"class":998},"       [ 3,  6,  9, 12]])\n",[36,99843,99844],{"class":38,"line":2373},[36,99845,94572],{"class":998},[14,99847,99848],{},"也可以使用np.transpose()的形式",[14,99850,99851],{},"#多维数组进行转置 np.transpose()",[14,99853,99854],{},"#对二维数组也可以使用np.transpose()进行转置",[14,99856,99857],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,99859,99860],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,99862,99863],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,99865,99866],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,99868,99869],{},"四维及以上的数组也是一样的道理",[26,99871,99873],{"className":28,"code":99872,"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,99874,99875,99903,99908,99913,99918,99936,99941,99973,99978,99983,99988,100009],{"__ignoreMap":31},[36,99876,99877,99879,99881,99883,99885,99887,99889,99891,99893,99895,99897,99899,99901],{"class":38,"line":39},[36,99878,1700],{"class":49},[36,99880,54],{"class":53},[36,99882,274],{"class":49},[36,99884,61],{"class":60},[36,99886,64],{"class":49},[36,99888,1211],{"class":60},[36,99890,284],{"class":49},[36,99892,162],{"class":60},[36,99894,64],{"class":49},[36,99896,1230],{"class":60},[36,99898,64],{"class":49},[36,99900,181],{"class":60},[36,99902,75],{"class":49},[36,99904,99905],{"class":38,"line":46},[36,99906,99907],{"class":49},"x.shape\n",[36,99909,99910],{"class":38,"line":78},[36,99911,99912],{"class":42},"#结果：（3,6,2）\n",[36,99914,99915],{"class":38,"line":125},[36,99916,99917],{"class":42},"#使用np.transpose()进行转置 变为(2,6,3)\n",[36,99919,99920,99923,99925,99927,99929,99931,99933],{"class":38,"line":131},[36,99921,99922],{"class":49},"np.transpose(x,(",[36,99924,181],{"class":60},[36,99926,64],{"class":49},[36,99928,61],{"class":60},[36,99930,64],{"class":49},[36,99932,643],{"class":60},[36,99934,99935],{"class":49},")).shape\n",[36,99937,99938],{"class":38,"line":396},[36,99939,99940],{"class":42},"#结果：(2,6,3)\n",[36,99942,99943,99945,99947,99949,99951,99953,99955,99957,99959,99961,99963,99965,99967,99969,99971],{"class":38,"line":407},[36,99944,99150],{"class":49},[36,99946,54],{"class":53},[36,99948,274],{"class":49},[36,99950,61],{"class":60},[36,99952,64],{"class":49},[36,99954,1211],{"class":60},[36,99956,284],{"class":49},[36,99958,162],{"class":60},[36,99960,64],{"class":49},[36,99962,181],{"class":60},[36,99964,64],{"class":49},[36,99966,61],{"class":60},[36,99968,64],{"class":49},[36,99970,1230],{"class":60},[36,99972,75],{"class":49},[36,99974,99975],{"class":38,"line":2061},[36,99976,99977],{"class":49},"aaaa.shape\n",[36,99979,99980],{"class":38,"line":2067},[36,99981,99982],{"class":42},"#结果：（3，2，1，6）\n",[36,99984,99985],{"class":38,"line":2079},[36,99986,99987],{"class":42},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[36,99989,99990,99993,99995,99997,99999,100001,100003,100005,100007],{"class":38,"line":2362},[36,99991,99992],{"class":49},"np.transpose(aaaa,(",[36,99994,61],{"class":60},[36,99996,64],{"class":49},[36,99998,181],{"class":60},[36,100000,64],{"class":49},[36,100002,643],{"class":60},[36,100004,64],{"class":49},[36,100006,162],{"class":60},[36,100008,99935],{"class":49},[36,100010,100011],{"class":38,"line":2367},[36,100012,100013],{"class":42},"#结果：(2,1,3,6)\n",[807,100015,100016],{},"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":46,"depth":46,"links":100018},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99743,"description":823},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":100025,"title":100026,"body":100027,"description":823,"extension":824,"meta":100761,"navigation":193,"path":100762,"seo":100763,"stem":100764,"__hash__":100765},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":100028,"toc":100759},[100029,100032,100035,100038,100041,100044,100047,100050,100053,100162,100165,100168,100756],[10,100030,100026],{"id":100031},"_8数组分割",[14,100033,100034],{},"split分割",[14,100036,100037],{},"numpy.split(ary,indics_or_sections,axis)",[14,100039,100040],{},"解释：",[14,100042,100043],{},"ary:被分割的数组",[14,100045,100046],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,100048,100049],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,100051,100052],{},"①一维数组的分割",[26,100054,100056],{"className":28,"code":100055,"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,100057,100058,100074,100079,100088,100092,100097,100105,100109,100114,100119,100132,100136,100141,100153,100157],{"__ignoreMap":31},[36,100059,100060,100062,100064,100066,100068,100070,100072],{"class":38,"line":39},[36,100061,50],{"class":49},[36,100063,54],{"class":53},[36,100065,274],{"class":49},[36,100067,61],{"class":60},[36,100069,64],{"class":49},[36,100071,1305],{"class":60},[36,100073,75],{"class":49},[36,100075,100076],{"class":38,"line":46},[36,100077,100078],{"class":42},"#如果传入整数，必须能够平分，否则会报错\n",[36,100080,100081,100084,100086],{"class":38,"line":78},[36,100082,100083],{"class":49},"np.split(a,",[36,100085,181],{"class":60},[36,100087,75],{"class":49},[36,100089,100090],{"class":38,"line":125},[36,100091,538],{"class":42},[36,100093,100094],{"class":38,"line":131},[36,100095,100096],{"class":42},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[36,100098,100099,100101,100103],{"class":38,"line":396},[36,100100,100083],{"class":49},[36,100102,186],{"class":60},[36,100104,75],{"class":49},[36,100106,100107],{"class":38,"line":407},[36,100108,538],{"class":42},[36,100110,100111],{"class":38,"line":2061},[36,100112,100113],{"class":42},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[36,100115,100116],{"class":38,"line":2067},[36,100117,100118],{"class":42},"#传入数组\n",[36,100120,100121,100124,100126,100128,100130],{"class":38,"line":2079},[36,100122,100123],{"class":49},"np.split(a,[",[36,100125,162],{"class":60},[36,100127,64],{"class":49},[36,100129,157],{"class":60},[36,100131,165],{"class":49},[36,100133,100134],{"class":38,"line":2362},[36,100135,538],{"class":42},[36,100137,100138],{"class":38,"line":2367},[36,100139,100140],{"class":42},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[36,100142,100143,100145,100147,100149,100151],{"class":38,"line":2373},[36,100144,100123],{"class":49},[36,100146,157],{"class":60},[36,100148,64],{"class":49},[36,100150,1255],{"class":60},[36,100152,165],{"class":49},[36,100154,100155],{"class":38,"line":2378},[36,100156,538],{"class":42},[36,100158,100159],{"class":38,"line":2392},[36,100160,100161],{"class":42},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,100163,100164],{},"②二维数组的分割",[14,100166,100167],{},"使用split()",[26,100169,100171],{"className":28,"code":100170,"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,100172,100173,100178,100202,100207,100216,100220,100224,100229,100234,100239,100244,100249,100254,100259,100263,100276,100280,100284,100288,100292,100296,100301,100306,100311,100315,100320,100336,100340,100344,100349,100354,100359,100364,100369,100374,100379,100384,100389,100394,100399,100404,100409,100414,100419,100424,100429,100434,100438,100442,100462,100466,100470,100475,100480,100485,100490,100495,100500,100505,100510,100515,100520,100525,100530,100535,100540,100545,100550,100555,100560,100564,100569,100578,100582,100586,100590,100594,100598,100602,100606,100610,100614,100623,100627,100631,100635,100639,100643,100647,100651,100655,100659,100663,100667,100671,100675,100679,100683,100687,100691,100695,100699,100703,100707,100720,100724,100728,100732,100736,100740,100744,100748,100752],{"__ignoreMap":31},[36,100174,100175],{"class":38,"line":39},[36,100176,100177],{"class":42},"#二维数组分割\n",[36,100179,100180,100182,100184,100186,100188,100190,100192,100194,100196,100198,100200],{"class":38,"line":46},[36,100181,269],{"class":49},[36,100183,54],{"class":53},[36,100185,274],{"class":49},[36,100187,61],{"class":60},[36,100189,64],{"class":49},[36,100191,1211],{"class":60},[36,100193,284],{"class":49},[36,100195,1230],{"class":60},[36,100197,64],{"class":49},[36,100199,1230],{"class":60},[36,100201,75],{"class":49},[36,100203,100204],{"class":38,"line":78},[36,100205,100206],{"class":42},"#默认axis=0  传入整数平均分,按行来的\n",[36,100208,100209,100212,100214],{"class":38,"line":125},[36,100210,100211],{"class":49},"np.split(aa,",[36,100213,162],{"class":60},[36,100215,75],{"class":49},[36,100217,100218],{"class":38,"line":131},[36,100219,96408],{"class":42},[36,100221,100222],{"class":38,"line":396},[36,100223,94572],{"class":998},[36,100225,100226],{"class":38,"line":407},[36,100227,100228],{"class":998},"[array([[ 1,  2,  3,  4,  5,  6],\n",[36,100230,100231],{"class":38,"line":2061},[36,100232,100233],{"class":998},"        [ 7,  8,  9, 10, 11, 12]]),\n",[36,100235,100236],{"class":38,"line":2067},[36,100237,100238],{"class":998}," array([[13, 14, 15, 16, 17, 18],\n",[36,100240,100241],{"class":38,"line":2079},[36,100242,100243],{"class":998},"        [19, 20, 21, 22, 23, 24]]),\n",[36,100245,100246],{"class":38,"line":2362},[36,100247,100248],{"class":998}," array([[25, 26, 27, 28, 29, 30],\n",[36,100250,100251],{"class":38,"line":2367},[36,100252,100253],{"class":998},"        [31, 32, 33, 34, 35, 36]])]\n",[36,100255,100256],{"class":38,"line":2373},[36,100257,100258],{"class":998}," '''\n",[36,100260,100261],{"class":38,"line":2378},[36,100262,100118],{"class":42},[36,100264,100265,100268,100270,100272,100274],{"class":38,"line":2392},[36,100266,100267],{"class":49},"np.split(aa,[",[36,100269,181],{"class":60},[36,100271,64],{"class":49},[36,100273,157],{"class":60},[36,100275,165],{"class":49},[36,100277,100278],{"class":38,"line":2397},[36,100279,96408],{"class":42},[36,100281,100282],{"class":38,"line":2403},[36,100283,94572],{"class":998},[36,100285,100286],{"class":38,"line":2424},[36,100287,100228],{"class":998},[36,100289,100290],{"class":38,"line":2429},[36,100291,100233],{"class":998},[36,100293,100294],{"class":38,"line":2443},[36,100295,100238],{"class":998},[36,100297,100298],{"class":38,"line":2448},[36,100299,100300],{"class":998},"        [19, 20, 21, 22, 23, 24],\n",[36,100302,100303],{"class":38,"line":2477},[36,100304,100305],{"class":998},"        [25, 26, 27, 28, 29, 30]]),\n",[36,100307,100308],{"class":38,"line":2482},[36,100309,100310],{"class":998}," array([[31, 32, 33, 34, 35, 36]])]\n",[36,100312,100313],{"class":38,"line":2499},[36,100314,94572],{"class":998},[36,100316,100317],{"class":38,"line":2504},[36,100318,100319],{"class":42},"#axis=1 按照列来分\n",[36,100321,100322,100324,100326,100328,100330,100332,100334],{"class":38,"line":2509},[36,100323,100211],{"class":49},[36,100325,162],{"class":60},[36,100327,64],{"class":49},[36,100329,48256],{"class":416},[36,100331,54],{"class":53},[36,100333,61],{"class":60},[36,100335,75],{"class":49},[36,100337,100338],{"class":38,"line":2514},[36,100339,96408],{"class":42},[36,100341,100342],{"class":38,"line":2528},[36,100343,94572],{"class":998},[36,100345,100346],{"class":38,"line":2533},[36,100347,100348],{"class":998},"[array([[ 1,  2],\n",[36,100350,100351],{"class":38,"line":3326},[36,100352,100353],{"class":998},"        [ 7,  8],\n",[36,100355,100356],{"class":38,"line":3340},[36,100357,100358],{"class":998},"        [13, 14],\n",[36,100360,100361],{"class":38,"line":3348},[36,100362,100363],{"class":998},"        [19, 20],\n",[36,100365,100366],{"class":38,"line":3353},[36,100367,100368],{"class":998},"        [25, 26],\n",[36,100370,100371],{"class":38,"line":3359},[36,100372,100373],{"class":998},"        [31, 32]]),\n",[36,100375,100376],{"class":38,"line":3365},[36,100377,100378],{"class":998}," array([[ 3,  4],\n",[36,100380,100381],{"class":38,"line":3370},[36,100382,100383],{"class":998},"        [ 9, 10],\n",[36,100385,100386],{"class":38,"line":8695},[36,100387,100388],{"class":998},"        [15, 16],\n",[36,100390,100391],{"class":38,"line":8719},[36,100392,100393],{"class":998},"        [21, 22],\n",[36,100395,100396],{"class":38,"line":8724},[36,100397,100398],{"class":998},"        [27, 28],\n",[36,100400,100401],{"class":38,"line":8730},[36,100402,100403],{"class":998},"        [33, 34]]),\n",[36,100405,100406],{"class":38,"line":8757},[36,100407,100408],{"class":998}," array([[ 5,  6],\n",[36,100410,100411],{"class":38,"line":8762},[36,100412,100413],{"class":998},"        [11, 12],\n",[36,100415,100416],{"class":38,"line":8768},[36,100417,100418],{"class":998},"        [17, 18],\n",[36,100420,100421],{"class":38,"line":8780},[36,100422,100423],{"class":998},"        [23, 24],\n",[36,100425,100426],{"class":38,"line":8792},[36,100427,100428],{"class":998},"        [29, 30],\n",[36,100430,100431],{"class":38,"line":8804},[36,100432,100433],{"class":998},"        [35, 36]])]\n",[36,100435,100436],{"class":38,"line":10463},[36,100437,100258],{"class":998},[36,100439,100440],{"class":38,"line":10488},[36,100441,100118],{"class":42},[36,100443,100444,100446,100448,100450,100452,100454,100456,100458,100460],{"class":38,"line":10511},[36,100445,100267],{"class":49},[36,100447,61],{"class":60},[36,100449,64],{"class":49},[36,100451,181],{"class":60},[36,100453,42351],{"class":49},[36,100455,48256],{"class":416},[36,100457,54],{"class":53},[36,100459,61],{"class":60},[36,100461,75],{"class":49},[36,100463,100464],{"class":38,"line":10535},[36,100465,538],{"class":42},[36,100467,100468],{"class":38,"line":10540},[36,100469,94572],{"class":998},[36,100471,100472],{"class":38,"line":10545},[36,100473,100474],{"class":998},"[array([[ 1],\n",[36,100476,100477],{"class":38,"line":10550},[36,100478,100479],{"class":998},"        [ 7],\n",[36,100481,100482],{"class":38,"line":10559},[36,100483,100484],{"class":998},"        [13],\n",[36,100486,100487],{"class":38,"line":10564},[36,100488,100489],{"class":998},"        [19],\n",[36,100491,100492],{"class":38,"line":10570},[36,100493,100494],{"class":998},"        [25],\n",[36,100496,100497],{"class":38,"line":10591},[36,100498,100499],{"class":998},"        [31]]),\n",[36,100501,100502],{"class":38,"line":10597},[36,100503,100504],{"class":998}," array([[ 2],\n",[36,100506,100507],{"class":38,"line":10611},[36,100508,100509],{"class":998},"        [ 8],\n",[36,100511,100512],{"class":38,"line":10617},[36,100513,100514],{"class":998},"        [14],\n",[36,100516,100517],{"class":38,"line":10644},[36,100518,100519],{"class":998},"        [20],\n",[36,100521,100522],{"class":38,"line":10653},[36,100523,100524],{"class":998},"        [26],\n",[36,100526,100527],{"class":38,"line":10659},[36,100528,100529],{"class":998},"        [32]]),\n",[36,100531,100532],{"class":38,"line":10667},[36,100533,100534],{"class":998}," array([[ 3,  4,  5,  6],\n",[36,100536,100537],{"class":38,"line":10672},[36,100538,100539],{"class":998},"        [ 9, 10, 11, 12],\n",[36,100541,100542],{"class":38,"line":17348},[36,100543,100544],{"class":998},"        [15, 16, 17, 18],\n",[36,100546,100547],{"class":38,"line":17354},[36,100548,100549],{"class":998},"        [21, 22, 23, 24],\n",[36,100551,100552],{"class":38,"line":17377},[36,100553,100554],{"class":998},"        [27, 28, 29, 30],\n",[36,100556,100557],{"class":38,"line":17383},[36,100558,100559],{"class":998},"        [33, 34, 35, 36]])]\n",[36,100561,100562],{"class":38,"line":17406},[36,100563,94572],{"class":998},[36,100565,100566],{"class":38,"line":17420},[36,100567,100568],{"class":42},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[36,100570,100571,100574,100576],{"class":38,"line":17440},[36,100572,100573],{"class":49},"np.vsplit(aa,",[36,100575,162],{"class":60},[36,100577,75],{"class":49},[36,100579,100580],{"class":38,"line":17446},[36,100581,538],{"class":42},[36,100583,100584],{"class":38,"line":17457},[36,100585,94572],{"class":998},[36,100587,100588],{"class":38,"line":17480},[36,100589,100228],{"class":998},[36,100591,100592],{"class":38,"line":17502},[36,100593,100233],{"class":998},[36,100595,100596],{"class":38,"line":17507},[36,100597,100238],{"class":998},[36,100599,100600],{"class":38,"line":17513},[36,100601,100243],{"class":998},[36,100603,100604],{"class":38,"line":17527},[36,100605,100248],{"class":998},[36,100607,100608],{"class":38,"line":17540},[36,100609,100253],{"class":998},[36,100611,100612],{"class":38,"line":17545},[36,100613,94572],{"class":998},[36,100615,100616,100619,100621],{"class":38,"line":17559},[36,100617,100618],{"class":49},"np.hsplit(aa,",[36,100620,162],{"class":60},[36,100622,75],{"class":49},[36,100624,100625],{"class":38,"line":17564},[36,100626,538],{"class":42},[36,100628,100629],{"class":38,"line":17570},[36,100630,94572],{"class":998},[36,100632,100633],{"class":38,"line":17575},[36,100634,100348],{"class":998},[36,100636,100637],{"class":38,"line":17589},[36,100638,100353],{"class":998},[36,100640,100641],{"class":38,"line":17594},[36,100642,100358],{"class":998},[36,100644,100645],{"class":38,"line":17599},[36,100646,100363],{"class":998},[36,100648,100649],{"class":38,"line":17613},[36,100650,100368],{"class":998},[36,100652,100653],{"class":38,"line":17625},[36,100654,100373],{"class":998},[36,100656,100657],{"class":38,"line":17630},[36,100658,100378],{"class":998},[36,100660,100661],{"class":38,"line":17643},[36,100662,100383],{"class":998},[36,100664,100665],{"class":38,"line":17648},[36,100666,100388],{"class":998},[36,100668,100669],{"class":38,"line":17653},[36,100670,100393],{"class":998},[36,100672,100673],{"class":38,"line":17658},[36,100674,100398],{"class":998},[36,100676,100677],{"class":38,"line":17671},[36,100678,100403],{"class":998},[36,100680,100681],{"class":38,"line":17676},[36,100682,100408],{"class":998},[36,100684,100685],{"class":38,"line":33375},[36,100686,100413],{"class":998},[36,100688,100689],{"class":38,"line":33381},[36,100690,100418],{"class":998},[36,100692,100693],{"class":38,"line":33387},[36,100694,100423],{"class":998},[36,100696,100697],{"class":38,"line":33393},[36,100698,100428],{"class":998},[36,100700,100701],{"class":38,"line":33399},[36,100702,100433],{"class":998},[36,100704,100705],{"class":38,"line":33410},[36,100706,94572],{"class":998},[36,100708,100709,100712,100714,100716,100718],{"class":38,"line":33416},[36,100710,100711],{"class":49},"np.vsplit(aa,[",[36,100713,181],{"class":60},[36,100715,64],{"class":49},[36,100717,157],{"class":60},[36,100719,165],{"class":49},[36,100721,100722],{"class":38,"line":33436},[36,100723,538],{"class":42},[36,100725,100726],{"class":38,"line":33442},[36,100727,94572],{"class":998},[36,100729,100730],{"class":38,"line":33453},[36,100731,100228],{"class":998},[36,100733,100734],{"class":38,"line":33459},[36,100735,100233],{"class":998},[36,100737,100738],{"class":38,"line":33465},[36,100739,100238],{"class":998},[36,100741,100742],{"class":38,"line":33471},[36,100743,100300],{"class":998},[36,100745,100746],{"class":38,"line":33477},[36,100747,100305],{"class":998},[36,100749,100750],{"class":38,"line":33483},[36,100751,100310],{"class":998},[36,100753,100754],{"class":38,"line":33489},[36,100755,100258],{"class":998},[807,100757,100758],{},"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":46,"depth":46,"links":100760},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":100026,"description":823},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100767,"title":100768,"body":100769,"description":823,"extension":824,"meta":101263,"navigation":193,"path":101264,"seo":101265,"stem":101266,"__hash__":101267},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100770,"toc":101254},[100771,100774,100777,100802,100806,100865,100917,100921,100923,100959,101013,101015,101053,101124,101128,101133,101137,101140,101173,101176,101180,101183,101186,101189,101192,101197,101201,101204,101207,101210,101213,101218,101222,101227,101230,101251],[10,100772,100768],{"id":100773},"_9数学函数",[14,100775,100776],{},"补充回顾：python的列表推导式",[26,100778,100780],{"className":28,"code":100779,"language":30,"meta":31,"style":31},"[1\u002Fi for i in a]\n",[33,100781,100782],{"__ignoreMap":31},[36,100783,100784,100786,100788,100790,100793,100795,100797,100799],{"class":38,"line":39},[36,100785,1769],{"class":49},[36,100787,61],{"class":60},[36,100789,1466],{"class":53},[36,100791,100792],{"class":49},"i ",[36,100794,3774],{"class":53},[36,100796,10185],{"class":49},[36,100798,26788],{"class":53},[36,100800,100801],{"class":49}," a]\n",[21,100803,100805],{"id":100804},"_91-求倒数","9.1 求倒数",[26,100807,100809],{"className":28,"code":100808,"language":30,"meta":31,"style":31},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[33,100810,100811,100816,100844,100856],{"__ignoreMap":31},[36,100812,100813],{"class":38,"line":39},[36,100814,100815],{"class":42},"#数组求倒数\n",[36,100817,100818,100820,100822,100824,100826,100828,100830,100832,100834,100836,100838,100840,100842],{"class":38,"line":46},[36,100819,50],{"class":49},[36,100821,54],{"class":53},[36,100823,1769],{"class":49},[36,100825,61],{"class":60},[36,100827,64],{"class":49},[36,100829,181],{"class":60},[36,100831,64],{"class":49},[36,100833,162],{"class":60},[36,100835,64],{"class":49},[36,100837,186],{"class":60},[36,100839,64],{"class":49},[36,100841,157],{"class":60},[36,100843,33988],{"class":49},[36,100845,100846,100848,100850,100853],{"class":38,"line":78},[36,100847,321],{"class":49},[36,100849,54],{"class":53},[36,100851,100852],{"class":49},"np.array(a)",[36,100854,100855],{"class":42},"#将列表转换为数组\n",[36,100857,100858,100860,100862],{"class":38,"line":125},[36,100859,61],{"class":60},[36,100861,1466],{"class":53},[36,100863,100864],{"class":49},"b\n",[26,100866,100868],{"className":28,"code":100867,"language":30,"meta":31,"style":31},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[33,100869,100870,100898,100907,100912],{"__ignoreMap":31},[36,100871,100872,100874,100876,100878,100880,100882,100884,100886,100888,100890,100892,100894,100896],{"class":38,"line":39},[36,100873,50],{"class":49},[36,100875,54],{"class":53},[36,100877,1769],{"class":49},[36,100879,61],{"class":60},[36,100881,64],{"class":49},[36,100883,181],{"class":60},[36,100885,64],{"class":49},[36,100887,162],{"class":60},[36,100889,64],{"class":49},[36,100891,186],{"class":60},[36,100893,64],{"class":49},[36,100895,157],{"class":60},[36,100897,33988],{"class":49},[36,100899,100900,100902,100904],{"class":38,"line":46},[36,100901,321],{"class":49},[36,100903,54],{"class":53},[36,100905,100906],{"class":49},"np.array(a)\n",[36,100908,100909],{"class":38,"line":78},[36,100910,100911],{"class":42},"#调用numpy中的函数reciprocal()\n",[36,100913,100914],{"class":38,"line":125},[36,100915,100916],{"class":49},"np.reciprocal(b)\n",[21,100918,100920],{"id":100919},"_92-求平方","9.2 求平方",[14,100922,95174],{},[26,100924,100926],{"className":28,"code":100925,"language":30,"meta":31,"style":31},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[33,100927,100928,100933,100938,100954],{"__ignoreMap":31},[36,100929,100930],{"class":38,"line":39},[36,100931,100932],{"class":42},"#square()，求平方\n",[36,100934,100935],{"class":38,"line":46},[36,100936,100937],{"class":42},"#一维数组\n",[36,100939,100940,100942,100944,100946,100948,100950,100952],{"class":38,"line":78},[36,100941,50],{"class":49},[36,100943,54],{"class":53},[36,100945,274],{"class":49},[36,100947,61],{"class":60},[36,100949,64],{"class":49},[36,100951,332],{"class":60},[36,100953,75],{"class":49},[36,100955,100956],{"class":38,"line":125},[36,100957,100958],{"class":49},"np.square(a)\n",[26,100960,100962],{"className":28,"code":100961,"language":30,"meta":31,"style":31},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[33,100963,100964,100969,100974,100995],{"__ignoreMap":31},[36,100965,100966],{"class":38,"line":39},[36,100967,100968],{"class":42},"#或者通过循环遍历的形式来计算\n",[36,100970,100971],{"class":38,"line":46},[36,100972,100973],{"class":42},"#这是一个列表\n",[36,100975,100976,100979,100981,100983,100985,100987,100989,100992],{"class":38,"line":78},[36,100977,100978],{"class":49},"[i",[36,100980,1339],{"class":53},[36,100982,100792],{"class":49},[36,100984,3774],{"class":53},[36,100986,10185],{"class":49},[36,100988,26788],{"class":53},[36,100990,100991],{"class":49}," a]",[36,100993,100994],{"class":42},"#这个求完之后在数列当中\n",[36,100996,100997,101000,101002,101004,101006,101008,101010],{"class":38,"line":125},[36,100998,100999],{"class":49},"np.array([i",[36,101001,1339],{"class":53},[36,101003,100792],{"class":49},[36,101005,3774],{"class":53},[36,101007,10185],{"class":49},[36,101009,26788],{"class":53},[36,101011,101012],{"class":49}," a])\n",[14,101014,254],{},[26,101016,101018],{"className":28,"code":101017,"language":30,"meta":31,"style":31},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[33,101019,101020,101024,101048],{"__ignoreMap":31},[36,101021,101022],{"class":38,"line":39},[36,101023,264],{"class":42},[36,101025,101026,101028,101030,101032,101034,101036,101038,101040,101042,101044,101046],{"class":38,"line":46},[36,101027,269],{"class":49},[36,101029,54],{"class":53},[36,101031,274],{"class":49},[36,101033,61],{"class":60},[36,101035,64],{"class":49},[36,101037,281],{"class":60},[36,101039,284],{"class":49},[36,101041,186],{"class":60},[36,101043,64],{"class":49},[36,101045,162],{"class":60},[36,101047,75],{"class":49},[36,101049,101050],{"class":38,"line":78},[36,101051,101052],{"class":49},"np.square(aa)\n",[26,101054,101056],{"className":28,"code":101055,"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,101057,101058,101063,101072,101088,101104,101119],{"__ignoreMap":31},[36,101059,101060],{"class":38,"line":39},[36,101061,101062],{"class":42},"#传统的方式\n",[36,101064,101065,101067,101069],{"class":38,"line":46},[36,101066,98831],{"class":49},[36,101068,54],{"class":53},[36,101070,101071],{"class":49},"np.empty_like(aa)\n",[36,101073,101074,101076,101078,101080,101082,101084,101086],{"class":38,"line":78},[36,101075,3774],{"class":53},[36,101077,10185],{"class":49},[36,101079,26788],{"class":53},[36,101081,33185],{"class":60},[36,101083,901],{"class":49},[36,101085,186],{"class":60},[36,101087,31528],{"class":49},[36,101089,101090,101092,101094,101096,101098,101100,101102],{"class":38,"line":125},[36,101091,3950],{"class":53},[36,101093,10247],{"class":49},[36,101095,26788],{"class":53},[36,101097,33185],{"class":60},[36,101099,901],{"class":49},[36,101101,162],{"class":60},[36,101103,31528],{"class":49},[36,101105,101106,101109,101111,101114,101116],{"class":38,"line":131},[36,101107,101108],{"class":49},"        bb[i,j]",[36,101110,54],{"class":53},[36,101112,101113],{"class":49},"aa[i,j]",[36,101115,1339],{"class":53},[36,101117,101118],{"class":49},"aa[i,j]\n",[36,101120,101121],{"class":38,"line":396},[36,101122,101123],{"class":49},"bb\n",[21,101125,101127],{"id":101126},"_93-求各元素的符号","9.3 求各元素的符号",[14,101129,101130],{},[2212,101131],{"alt":31,"src":101132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[21,101134,101136],{"id":101135},"_94-modf函数","9.4 modf函数",[14,101138,101139],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[26,101141,101143],{"className":28,"code":101142,"language":30,"meta":31,"style":31},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[33,101144,101145,101168],{"__ignoreMap":31},[36,101146,101147,101149,101151,101153,101155,101157,101159,101161,101163,101166],{"class":38,"line":39},[36,101148,50],{"class":49},[36,101150,54],{"class":53},[36,101152,274],{"class":49},[36,101154,1414],{"class":53},[36,101156,332],{"class":60},[36,101158,64],{"class":49},[36,101160,332],{"class":60},[36,101162,64],{"class":49},[36,101164,101165],{"class":60},"0.3",[36,101167,75],{"class":49},[36,101169,101170],{"class":38,"line":46},[36,101171,101172],{"class":49},"np.modf(a)\n",[14,101174,101175],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[21,101177,101179],{"id":101178},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,101181,101182],{},"np.cell()",[14,101184,101185],{},"np.floor()",[14,101187,101188],{},"np.rint()",[14,101190,101191],{},"对各元素分别向上取整、向下取整、四舍五入",[14,101193,101194],{},[2212,101195],{"alt":31,"src":101196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[21,101198,101200],{"id":101199},"_96-around函数","9.6 around()函数",[14,101202,101203],{},"around()函数也可以实现对数的小数位数进行操作",[14,101205,101206],{},"其中的参数：",[14,101208,101209],{},"1.要传的数组",[14,101211,101212],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,101214,101215],{},[2212,101216],{"alt":31,"src":101217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[21,101219,101221],{"id":101220},"_97-三角函数","9.7 三角函数",[14,101223,101224],{},[2212,101225],{"alt":31,"src":101226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,101228,101229],{},"引入图像模块非常重要",[26,101231,101233],{"className":28,"code":101232,"language":30,"meta":31,"style":31},"from matplotlib import pyplot as plt\n",[33,101234,101235],{"__ignoreMap":31},[36,101236,101237,101239,101242,101244,101247,101249],{"class":38,"line":39},[36,101238,31479],{"class":53},[36,101240,101241],{"class":49}," matplotlib ",[36,101243,31135],{"class":53},[36,101245,101246],{"class":49}," pyplot ",[36,101248,32125],{"class":53},[36,101250,32179],{"class":49},[807,101252,101253],{},"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":46,"depth":46,"links":101255},[101256,101257,101258,101259,101260,101261,101262],{"id":100804,"depth":46,"text":100805},{"id":100919,"depth":46,"text":100920},{"id":101126,"depth":46,"text":101127},{"id":101135,"depth":46,"text":101136},{"id":101178,"depth":46,"text":101179},{"id":101199,"depth":46,"text":101200},{"id":101220,"depth":46,"text":101221},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100768,"description":823},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101269,"title":101270,"body":101271,"description":823,"extension":824,"meta":101275,"navigation":193,"path":101276,"seo":101277,"stem":101278,"__hash__":101279},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101272,"toc":101273},[],{"title":31,"searchDepth":46,"depth":46,"links":101274},[],{"category":51162},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101270,"description":823},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101281,"title":101282,"body":101283,"description":31,"extension":824,"meta":103291,"navigation":193,"path":103292,"seo":103293,"stem":103294,"__hash__":103295},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101284,"toc":103267},[101285,101288,101292,101295,101298,101304,101307,101330,101333,101367,101370,101411,101415,101418,101511,101514,101558,101561,101578,101581,101595,101598,101601,101646,101649,101686,101690,101693,101699,101704,101724,101728,101731,101797,101800,101818,101822,101825,101854,101864,101870,101874,101877,101883,101894,101898,101901,101931,101934,102214,102217,102220,102231,102234,102237,102259,102266,102269,102287,102290,102293,102307,102315,102318,102344,102350,102353,102356,102366,102378,102398,102407,102427,102437,102461,102474,102488,102493,102534,102551,102576,102588,102608,102614,102659,102678,102695,102708,102724,102731,102743,102752,102787,102808,102833,102846,102870,102885,102910,102913,102934,102943,102946,102957,102961,102964,102970,102982,102989,102993,102996,103008,103011,103025,103028,103038,103048,103051,103091,103094,103098,103104,103107,103121,103125,103128,103161,103165,103168,103191,103199,103202,103208,103214,103217,103220,103248,103252,103255,103261,103264],[10,101286,101282],{"id":101287},"_1环境安装与第一个-mujoco-程序",[21,101289,101291],{"id":101290},"_1目标说明","1.目标说明",[14,101293,101294],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,101296,101297],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[26,101299,101302],{"className":101300,"code":101301,"language":5935,"meta":31},[5933],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[33,101303,101301],{"__ignoreMap":31},[14,101305,101306],{},"需要掌握:",[851,101308,101309,101312,101315,101320,101325],{},[854,101310,101311],{},"Fedora 44 下 MuJoCo 的系统依赖",[854,101313,101314],{},"Python 虚拟环境创建",[854,101316,101317],{},[33,101318,101319],{},"mujoco.MjModel",[854,101321,101322],{},[33,101323,101324],{},"mujoco.MjData",[854,101326,101327],{},[33,101328,101329],{},"mujoco.mj_step(model, data)",[14,101331,101332],{},"MuJoCo 中最重要的两个对象:",[1031,101334,101335,101345],{},[1034,101336,101337],{},[1037,101338,101339,101342],{},[1040,101340,101341],{"align":24480},"对象",[1040,101343,101344],{"align":24480},"含义",[1078,101346,101347,101357],{},[1037,101348,101349,101354],{},[1083,101350,101351],{"align":24480},[33,101352,101353],{},"MjModel",[1083,101355,101356],{"align":24480},"模型结构，来自 XML，基本不随时间变化",[1037,101358,101359,101364],{},[1083,101360,101361],{"align":24480},[33,101362,101363],{},"MjData",[1083,101365,101366],{"align":24480},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,101368,101369],{},"可以先用一个类比理解：",[1031,101371,101372,101382],{},[1034,101373,101374],{},[1037,101375,101376,101379],{},[1040,101377,101378],{"align":24480},"类比",[1040,101380,101381],{"align":24480},"MuJoCo 对象",[1078,101383,101384,101393,101402],{},[1037,101385,101386,101389],{},[1083,101387,101388],{"align":24480},"游戏地图和角色配置",[1083,101390,101391],{"align":24480},[33,101392,101353],{},[1037,101394,101395,101398],{},[1083,101396,101397],{"align":24480},"游戏运行到当前帧的状态",[1083,101399,101400],{"align":24480},[33,101401,101363],{},[1037,101403,101404,101407],{},[1083,101405,101406],{"align":24480},"前进一帧",[1083,101408,101409],{"align":24480},[33,101410,101329],{},[21,101412,101414],{"id":101413},"_2环境与依赖安装","2.环境与依赖安装",[14,101416,101417],{},"Fedora 44 系统依赖:",[26,101419,101421],{"className":24566,"code":101420,"language":24568,"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,101422,101423,101435,101448,101461,101471,101481,101500],{"__ignoreMap":31},[36,101424,101425,101427,101429,101431,101433],{"class":38,"line":39},[36,101426,25321],{"class":2713},[36,101428,27060],{"class":998},[36,101430,24578],{"class":998},[36,101432,27145],{"class":60},[36,101434,25423],{"class":60},[36,101436,101437,101440,101443,101446],{"class":38,"line":46},[36,101438,101439],{"class":998},"  python3",[36,101441,101442],{"class":998}," python3-pip",[36,101444,101445],{"class":998}," python3-virtualenv",[36,101447,25423],{"class":60},[36,101449,101450,101453,101456,101459],{"class":38,"line":78},[36,101451,101452],{"class":998},"  mesa-libGL",[36,101454,101455],{"class":998}," mesa-libGLU",[36,101457,101458],{"class":998}," mesa-dri-drivers",[36,101460,25423],{"class":60},[36,101462,101463,101466,101469],{"class":38,"line":125},[36,101464,101465],{"class":998},"  libglvnd-glx",[36,101467,101468],{"class":998}," libglvnd-opengl",[36,101470,25423],{"class":60},[36,101472,101473,101476,101479],{"class":38,"line":131},[36,101474,101475],{"class":998},"  glfw",[36,101477,101478],{"class":998}," glfw-devel",[36,101480,25423],{"class":60},[36,101482,101483,101486,101489,101492,101495,101498],{"class":38,"line":396},[36,101484,101485],{"class":998},"  libX11",[36,101487,101488],{"class":998}," libXcursor",[36,101490,101491],{"class":998}," libXi",[36,101493,101494],{"class":998}," libXinerama",[36,101496,101497],{"class":998}," libXrandr",[36,101499,25423],{"class":60},[36,101501,101502,101505,101508],{"class":38,"line":407},[36,101503,101504],{"class":998},"  gcc",[36,101506,101507],{"class":998}," gcc-c++",[36,101509,101510],{"class":998}," make\n",[14,101512,101513],{},"创建 Python 环境:",[26,101515,101517],{"className":24566,"code":101516,"language":24568,"meta":31,"style":31},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[33,101518,101519,101533,101541],{"__ignoreMap":31},[36,101520,101521,101524,101527,101530],{"class":38,"line":39},[36,101522,101523],{"class":2713},"python3",[36,101525,101526],{"class":60}," -m",[36,101528,101529],{"class":998}," venv",[36,101531,101532],{"class":998}," .venv\n",[36,101534,101535,101538],{"class":38,"line":46},[36,101536,101537],{"class":60},"source",[36,101539,101540],{"class":998}," .venv\u002Fbin\u002Factivate\n",[36,101542,101543,101545,101547,101550,101552,101555],{"class":38,"line":78},[36,101544,30],{"class":2713},[36,101546,101526],{"class":60},[36,101548,101549],{"class":998}," pip",[36,101551,24578],{"class":998},[36,101553,101554],{"class":60}," --upgrade",[36,101556,101557],{"class":998}," pip\n",[14,101559,101560],{},"pip 安装:",[26,101562,101564],{"className":24566,"code":101563,"language":24568,"meta":31,"style":31},"pip install \"mujoco>=2.3\" numpy\n",[33,101565,101566],{"__ignoreMap":31},[36,101567,101568,101570,101572,101575],{"class":38,"line":39},[36,101569,24575],{"class":2713},[36,101571,24578],{"class":998},[36,101573,101574],{"class":998}," \"mujoco>=2.3\"",[36,101576,101577],{"class":998}," numpy\n",[14,101579,101580],{},"安装完成后，先做最小检查：",[26,101582,101584],{"className":24566,"code":101583,"language":24568,"meta":31,"style":31},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[33,101585,101586],{"__ignoreMap":31},[36,101587,101588,101590,101592],{"class":38,"line":39},[36,101589,30],{"class":2713},[36,101591,31103],{"class":60},[36,101593,101594],{"class":998}," \"import mujoco; print(mujoco.__version__)\"\n",[14,101596,101597],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,101599,101600],{},"conda 安装:",[26,101602,101604],{"className":24566,"code":101603,"language":24568,"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,101605,101606,101626,101636],{"__ignoreMap":31},[36,101607,101608,101610,101612,101614,101617,101620,101623],{"class":38,"line":39},[36,101609,31075],{"class":2713},[36,101611,29921],{"class":998},[36,101613,25860],{"class":60},[36,101615,101616],{"class":998}," mujoco-study",[36,101618,101619],{"class":998}," python=",[36,101621,101622],{"class":60},"3.10",[36,101624,101625],{"class":60}," -y\n",[36,101627,101628,101630,101633],{"class":38,"line":46},[36,101629,31075],{"class":2713},[36,101631,101632],{"class":998}," activate",[36,101634,101635],{"class":998}," mujoco-study\n",[36,101637,101638,101640,101642,101644],{"class":38,"line":78},[36,101639,24575],{"class":2713},[36,101641,24578],{"class":998},[36,101643,101574],{"class":998},[36,101645,101577],{"class":998},[14,101647,101648],{},"版本冲突说明:",[851,101650,101651,101657,101667,101676],{},[854,101652,101653,101654,29130],{},"不要安装 ",[33,101655,101656],{},"mujoco-py",[854,101658,101659,101660,101662,101663,101666],{},"如果旧项目里同时安装了 ",[33,101661,101656],{}," 和 ",[33,101664,101665],{},"mujoco","，建议新建干净虚拟环境。",[854,101668,101669,101672,101673,29130],{},[33,101670,101671],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[33,101674,101675],{},"~\u002F.mujoco\u002Fmujoco210",[854,101677,101678,101679,83281,101682,101685],{},"离屏渲染可能涉及 OpenGL 后端，",[33,101680,101681],{},"MUJOCO_GL=egl",[33,101683,101684],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[21,101687,101689],{"id":101688},"_3核心概念解释","3.核心概念解释",[14,101691,101692],{},"MuJoCo 的基本执行流程:",[26,101694,101697],{"className":101695,"code":101696,"language":5935,"meta":31},[5933],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[33,101698,101696],{"__ignoreMap":31},[14,101700,101701,101703],{},[33,101702,101353],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101705,101706,101708,101709,1104,101712,1104,101715,1104,101718,1104,101721,29130],{},[33,101707,101363],{}," 存放仿真运行时状态，例如 ",[33,101710,101711],{},"data.time",[33,101713,101714],{},"data.qpos",[33,101716,101717],{},"data.qvel",[33,101719,101720],{},"data.ctrl",[33,101722,101723],{},"data.xpos",[868,101725,101727],{"id":101726},"xml-是什么","XML 是什么",[14,101729,101730],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[26,101732,101734],{"className":53809,"code":101733,"language":53811,"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,101735,101736,101758,101789],{"__ignoreMap":31},[36,101737,101738,101740,101742,101744,101746,101748,101751,101753,101756],{"class":38,"line":39},[36,101739,1789],{"class":49},[36,101741,52542],{"class":52042},[36,101743,15664],{"class":2713},[36,101745,54],{"class":49},[36,101747,54233],{"class":998},[36,101749,101750],{"class":2713}," pos",[36,101752,54],{"class":49},[36,101754,101755],{"class":998},"\"0 0 1\"",[36,101757,52049],{"class":49},[36,101759,101760,101762,101765,101767,101769,101772,101774,101776,101778,101781,101783,101786],{"class":38,"line":46},[36,101761,52886],{"class":49},[36,101763,101764],{"class":52042},"geom",[36,101766,15664],{"class":2713},[36,101768,54],{"class":49},[36,101770,101771],{"class":998},"\"box_geom\"",[36,101773,54566],{"class":2713},[36,101775,54],{"class":49},[36,101777,54233],{"class":998},[36,101779,101780],{"class":2713}," size",[36,101782,54],{"class":49},[36,101784,101785],{"class":998},"\"0.1 0.1 0.1\"",[36,101787,101788],{"class":49},"\u002F>\n",[36,101790,101791,101793,101795],{"class":38,"line":78},[36,101792,52527],{"class":49},[36,101794,52542],{"class":52042},[36,101796,52049],{"class":49},[14,101798,101799],{},"这段意思是：",[851,101801,101802,101808,101815],{},[854,101803,101804,101805,101807],{},"创建一个叫 ",[33,101806,54456],{}," 的刚体。",[854,101809,101810,101811,101814],{},"它初始放在 ",[33,101812,101813],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[854,101816,101817],{},"它里面有一个盒子形状的几何体。",[868,101819,101821],{"id":101820},"timestep-是什么","timestep 是什么",[14,101823,101824],{},"XML 里的：",[26,101826,101828],{"className":53809,"code":101827,"language":53811,"meta":31,"style":31},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[33,101829,101830],{"__ignoreMap":31},[36,101831,101832,101834,101836,101839,101841,101844,101847,101849,101852],{"class":38,"line":39},[36,101833,1789],{"class":49},[36,101835,69908],{"class":52042},[36,101837,101838],{"class":2713}," timestep",[36,101840,54],{"class":49},[36,101842,101843],{"class":998},"\"0.01\"",[36,101845,101846],{"class":2713}," gravity",[36,101848,54],{"class":49},[36,101850,101851],{"class":998},"\"0 0 -9.81\"",[36,101853,101788],{"class":49},[14,101855,101856,101857,101860,101861,101863],{},"表示每调用一次 ",[33,101858,101859],{},"mj_step","，仿真时间前进 ",[33,101862,39728],{}," 秒。循环 100 次，大约就是 1 秒：",[26,101865,101868],{"className":101866,"code":101867,"language":5935,"meta":31},[5933],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[33,101869,101867],{"__ignoreMap":31},[868,101871,101873],{"id":101872},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101875,101876],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[26,101878,101881],{"className":101879,"code":101880,"language":5935,"meta":31},[5933],"x y z qw qx qy qz\n",[33,101882,101880],{"__ignoreMap":31},[14,101884,101885,101886,101889,101890,101893],{},"表示一个自由刚体的位置和姿态。其中 ",[33,101887,101888],{},"x y z"," 是位置，",[33,101891,101892],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[21,101895,101897],{"id":101896},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101899,101900],{},"新建文件:",[26,101902,101904],{"className":24566,"code":101903,"language":24568,"meta":31,"style":31},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[33,101905,101906,101916,101923],{"__ignoreMap":31},[36,101907,101908,101911,101913],{"class":38,"line":39},[36,101909,101910],{"class":2713},"mkdir",[36,101912,29961],{"class":60},[36,101914,101915],{"class":998}," mujoco_tutorial\n",[36,101917,101918,101921],{"class":38,"line":46},[36,101919,101920],{"class":60},"cd",[36,101922,101915],{"class":998},[36,101924,101925,101928],{"class":38,"line":78},[36,101926,101927],{"class":2713},"touch",[36,101929,101930],{"class":998}," ch1_first_sim.py\n",[14,101932,101933],{},"写入:",[26,101935,101937],{"className":28,"code":101936,"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,101938,101939,101946,101950,101954,101964,101969,101974,101978,101983,101988,101992,101997,102002,102007,102012,102017,102022,102026,102030,102034,102047,102061,102071,102075,102087,102099,102111,102123,102135,102139,102156,102161,102165,102176,102187,102191,102195,102209],{"__ignoreMap":31},[36,101940,101941,101943],{"class":38,"line":39},[36,101942,31135],{"class":53},[36,101944,101945],{"class":49}," mujoco\n",[36,101947,101948],{"class":38,"line":46},[36,101949,194],{"emptyLinePlaceholder":193},[36,101951,101952],{"class":38,"line":78},[36,101953,194],{"emptyLinePlaceholder":193},[36,101955,101956,101959,101961],{"class":38,"line":125},[36,101957,101958],{"class":60},"XML",[36,101960,14308],{"class":53},[36,101962,101963],{"class":998}," \"\"\"\n",[36,101965,101966],{"class":38,"line":131},[36,101967,101968],{"class":998},"\u003Cmujoco model=\"first_sim\">\n",[36,101970,101971],{"class":38,"line":396},[36,101972,101973],{"class":998},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[36,101975,101976],{"class":38,"line":407},[36,101977,194],{"emptyLinePlaceholder":193},[36,101979,101980],{"class":38,"line":2061},[36,101981,101982],{"class":998},"  \u003Cworldbody>\n",[36,101984,101985],{"class":38,"line":2067},[36,101986,101987],{"class":998},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[36,101989,101990],{"class":38,"line":2079},[36,101991,194],{"emptyLinePlaceholder":193},[36,101993,101994],{"class":38,"line":2362},[36,101995,101996],{"class":998},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[36,101998,101999],{"class":38,"line":2367},[36,102000,102001],{"class":998},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[36,102003,102004],{"class":38,"line":2373},[36,102005,102006],{"class":998},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[36,102008,102009],{"class":38,"line":2378},[36,102010,102011],{"class":998},"    \u003C\u002Fbody>\n",[36,102013,102014],{"class":38,"line":2392},[36,102015,102016],{"class":998},"  \u003C\u002Fworldbody>\n",[36,102018,102019],{"class":38,"line":2397},[36,102020,102021],{"class":998},"\u003C\u002Fmujoco>\n",[36,102023,102024],{"class":38,"line":2403},[36,102025,96342],{"class":998},[36,102027,102028],{"class":38,"line":2424},[36,102029,194],{"emptyLinePlaceholder":193},[36,102031,102032],{"class":38,"line":2429},[36,102033,194],{"emptyLinePlaceholder":193},[36,102035,102036,102038,102040,102043,102045],{"class":38,"line":2443},[36,102037,32689],{"class":53},[36,102039,2723],{"class":2713},[36,102041,102042],{"class":49},"() -> ",[36,102044,96330],{"class":60},[36,102046,4488],{"class":49},[36,102048,102049,102052,102054,102057,102059],{"class":38,"line":2448},[36,102050,102051],{"class":49},"    model ",[36,102053,54],{"class":53},[36,102055,102056],{"class":49}," mujoco.MjModel.from_xml_string(",[36,102058,101958],{"class":60},[36,102060,75],{"class":49},[36,102062,102063,102066,102068],{"class":38,"line":2477},[36,102064,102065],{"class":49},"    data ",[36,102067,54],{"class":53},[36,102069,102070],{"class":49}," mujoco.MjData(model)\n",[36,102072,102073],{"class":38,"line":2482},[36,102074,194],{"emptyLinePlaceholder":193},[36,102076,102077,102079,102081,102084],{"class":38,"line":2499},[36,102078,32041],{"class":60},[36,102080,901],{"class":49},[36,102082,102083],{"class":998},"\"nq:\"",[36,102085,102086],{"class":49},", model.nq)\n",[36,102088,102089,102091,102093,102096],{"class":38,"line":2504},[36,102090,32041],{"class":60},[36,102092,901],{"class":49},[36,102094,102095],{"class":998},"\"nv:\"",[36,102097,102098],{"class":49},", model.nv)\n",[36,102100,102101,102103,102105,102108],{"class":38,"line":2509},[36,102102,32041],{"class":60},[36,102104,901],{"class":49},[36,102106,102107],{"class":998},"\"nu:\"",[36,102109,102110],{"class":49},", model.nu)\n",[36,102112,102113,102115,102117,102120],{"class":38,"line":2514},[36,102114,32041],{"class":60},[36,102116,901],{"class":49},[36,102118,102119],{"class":998},"\"initial time:\"",[36,102121,102122],{"class":49},", data.time)\n",[36,102124,102125,102127,102129,102132],{"class":38,"line":2528},[36,102126,32041],{"class":60},[36,102128,901],{"class":49},[36,102130,102131],{"class":998},"\"initial qpos:\"",[36,102133,102134],{"class":49},", data.qpos.copy())\n",[36,102136,102137],{"class":38,"line":2533},[36,102138,194],{"emptyLinePlaceholder":193},[36,102140,102141,102143,102146,102148,102150,102152,102154],{"class":38,"line":3326},[36,102142,3950],{"class":53},[36,102144,102145],{"class":49}," _ ",[36,102147,26788],{"class":53},[36,102149,33185],{"class":60},[36,102151,901],{"class":49},[36,102153,67],{"class":60},[36,102155,31528],{"class":49},[36,102157,102158],{"class":38,"line":3340},[36,102159,102160],{"class":49},"        mujoco.mj_step(model, data)\n",[36,102162,102163],{"class":38,"line":3348},[36,102164,194],{"emptyLinePlaceholder":193},[36,102166,102167,102169,102171,102174],{"class":38,"line":3353},[36,102168,32041],{"class":60},[36,102170,901],{"class":49},[36,102172,102173],{"class":998},"\"final time:\"",[36,102175,102122],{"class":49},[36,102177,102178,102180,102182,102185],{"class":38,"line":3359},[36,102179,32041],{"class":60},[36,102181,901],{"class":49},[36,102183,102184],{"class":998},"\"final qpos:\"",[36,102186,102134],{"class":49},[36,102188,102189],{"class":38,"line":3365},[36,102190,194],{"emptyLinePlaceholder":193},[36,102192,102193],{"class":38,"line":3370},[36,102194,194],{"emptyLinePlaceholder":193},[36,102196,102197,102199,102201,102204,102207],{"class":38,"line":8695},[36,102198,2281],{"class":53},[36,102200,31962],{"class":60},[36,102202,102203],{"class":53}," ==",[36,102205,102206],{"class":998}," \"__main__\"",[36,102208,4488],{"class":49},[36,102210,102211],{"class":38,"line":8719},[36,102212,102213],{"class":49},"    main()\n",[868,102215,102216],{"id":102216},"代码逐段解释",[14,102218,102219],{},"导入库：",[26,102221,102223],{"className":28,"code":102222,"language":30,"meta":31,"style":31},"import mujoco\n",[33,102224,102225],{"__ignoreMap":31},[36,102226,102227,102229],{"class":38,"line":39},[36,102228,31135],{"class":53},[36,102230,101945],{"class":49},[14,102232,102233],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,102235,102236],{},"定义 XML：",[26,102238,102240],{"className":28,"code":102239,"language":30,"meta":31,"style":31},"XML = \"\"\"\n...\n\"\"\"\n",[33,102241,102242,102250,102255],{"__ignoreMap":31},[36,102243,102244,102246,102248],{"class":38,"line":39},[36,102245,101958],{"class":60},[36,102247,14308],{"class":53},[36,102249,101963],{"class":998},[36,102251,102252],{"class":38,"line":46},[36,102253,102254],{"class":998},"...\n",[36,102256,102257],{"class":38,"line":78},[36,102258,96342],{"class":998},[14,102260,102261,102262,102265],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[33,102263,102264],{},"freejoint"," 的方块。",[14,102267,102268],{},"编译模型：",[26,102270,102272],{"className":28,"code":102271,"language":30,"meta":31,"style":31},"model = mujoco.MjModel.from_xml_string(XML)\n",[33,102273,102274],{"__ignoreMap":31},[36,102275,102276,102279,102281,102283,102285],{"class":38,"line":39},[36,102277,102278],{"class":49},"model ",[36,102280,54],{"class":53},[36,102282,102056],{"class":49},[36,102284,101958],{"class":60},[36,102286,75],{"class":49},[14,102288,102289],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,102291,102292],{},"创建数据：",[26,102294,102296],{"className":28,"code":102295,"language":30,"meta":31,"style":31},"data = mujoco.MjData(model)\n",[33,102297,102298],{"__ignoreMap":31},[36,102299,102300,102303,102305],{"class":38,"line":39},[36,102301,102302],{"class":49},"data ",[36,102304,54],{"class":53},[36,102306,102070],{"class":49},[14,102308,102309,102311,102312,102314],{},[33,102310,34143],{}," 会保存仿真当前状态。刚创建时，时间是 ",[33,102313,643],{},"，方块还在初始位置。",[14,102316,102317],{},"推进仿真：",[26,102319,102321],{"className":28,"code":102320,"language":30,"meta":31,"style":31},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[33,102322,102323,102339],{"__ignoreMap":31},[36,102324,102325,102327,102329,102331,102333,102335,102337],{"class":38,"line":39},[36,102326,3774],{"class":53},[36,102328,102145],{"class":49},[36,102330,26788],{"class":53},[36,102332,33185],{"class":60},[36,102334,901],{"class":49},[36,102336,67],{"class":60},[36,102338,31528],{"class":49},[36,102340,102341],{"class":38,"line":46},[36,102342,102343],{"class":49},"    mujoco.mj_step(model, data)\n",[14,102345,102346,102347,102349],{},"每次 ",[33,102348,101859],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[868,102351,102352],{"id":102352},"代码逐行细讲",[14,102354,102355],{},"下面把完整代码按新手视角拆开讲。",[26,102357,102358],{"className":28,"code":102222,"language":30,"meta":31,"style":31},[33,102359,102360],{"__ignoreMap":31},[36,102361,102362,102364],{"class":38,"line":39},[36,102363,31135],{"class":53},[36,102365,101945],{"class":49},[14,102367,102368,102370,102371,1104,102373,1104,102375,29130],{},[33,102369,31135],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[33,102372,101319],{},[33,102374,101324],{},[33,102376,102377],{},"mujoco.mj_step",[26,102379,102380],{"className":28,"code":102239,"language":30,"meta":31,"style":31},[33,102381,102382,102390,102394],{"__ignoreMap":31},[36,102383,102384,102386,102388],{"class":38,"line":39},[36,102385,101958],{"class":60},[36,102387,14308],{"class":53},[36,102389,101963],{"class":998},[36,102391,102392],{"class":38,"line":46},[36,102393,102254],{"class":998},[36,102395,102396],{"class":38,"line":78},[36,102397,96342],{"class":998},[14,102399,102400,102402,102403,102406],{},[33,102401,101958],{}," 是一个变量名。右边的三引号 ",[33,102404,102405],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[26,102408,102409],{"className":53809,"code":101968,"language":53811,"meta":31,"style":31},[33,102410,102411],{"__ignoreMap":31},[36,102412,102413,102415,102417,102420,102422,102425],{"class":38,"line":39},[36,102414,1789],{"class":49},[36,102416,101665],{"class":52042},[36,102418,102419],{"class":2713}," model",[36,102421,54],{"class":49},[36,102423,102424],{"class":998},"\"first_sim\"",[36,102426,52049],{"class":49},[14,102428,102429,102430,102433,102434,29130],{},"这是 XML 的根标签。",[33,102431,102432],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[33,102435,102436],{},"first_sim",[26,102438,102439],{"className":53809,"code":101827,"language":53811,"meta":31,"style":31},[33,102440,102441],{"__ignoreMap":31},[36,102442,102443,102445,102447,102449,102451,102453,102455,102457,102459],{"class":38,"line":39},[36,102444,1789],{"class":49},[36,102446,69908],{"class":52042},[36,102448,101838],{"class":2713},[36,102450,54],{"class":49},[36,102452,101843],{"class":998},[36,102454,101846],{"class":2713},[36,102456,54],{"class":49},[36,102458,101851],{"class":998},[36,102460,101788],{"class":49},[14,102462,102463,102465,102466,102469,102470,102473],{},[33,102464,69908],{}," 用来设置仿真参数。",[33,102467,102468],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[33,102471,102472],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[26,102475,102477],{"className":53809,"code":102476,"language":53811,"meta":31,"style":31},"\u003Cworldbody>\n",[33,102478,102479],{"__ignoreMap":31},[36,102480,102481,102483,102486],{"class":38,"line":39},[36,102482,1789],{"class":49},[36,102484,102485],{"class":52042},"worldbody",[36,102487,52049],{"class":49},[14,102489,102490,102492],{},[33,102491,102485],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[26,102494,102496],{"className":53809,"code":102495,"language":53811,"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,102497,102498],{"__ignoreMap":31},[36,102499,102500,102502,102504,102506,102508,102511,102513,102515,102518,102520,102522,102525,102527,102529,102532],{"class":38,"line":39},[36,102501,1789],{"class":49},[36,102503,101764],{"class":52042},[36,102505,15664],{"class":2713},[36,102507,54],{"class":49},[36,102509,102510],{"class":998},"\"floor\"",[36,102512,54566],{"class":2713},[36,102514,54],{"class":49},[36,102516,102517],{"class":998},"\"plane\"",[36,102519,101780],{"class":2713},[36,102521,54],{"class":49},[36,102523,102524],{"class":998},"\"2 2 0.1\"",[36,102526,79509],{"class":2713},[36,102528,54],{"class":49},[36,102530,102531],{"class":998},"\"0.8 0.8 0.8 1\"",[36,102533,101788],{"class":49},[14,102535,102536,102537,102539,102540,102543,102544,102547,102548,102550],{},"这行创建地面。",[33,102538,101764],{}," 是几何体。",[33,102541,102542],{},"name=\"floor\""," 是名字。",[33,102545,102546],{},"type=\"plane\""," 表示平面。",[33,102549,55852],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[26,102552,102554],{"className":53809,"code":102553,"language":53811,"meta":31,"style":31},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[33,102555,102556],{"__ignoreMap":31},[36,102557,102558,102560,102562,102564,102566,102568,102570,102572,102574],{"class":38,"line":39},[36,102559,1789],{"class":49},[36,102561,52542],{"class":52042},[36,102563,15664],{"class":2713},[36,102565,54],{"class":49},[36,102567,54233],{"class":998},[36,102569,101750],{"class":2713},[36,102571,54],{"class":49},[36,102573,101755],{"class":998},[36,102575,52049],{"class":49},[14,102577,102578,102579,29130,102581,102584,102585,102587],{},"这行创建一个刚体，名字叫 ",[33,102580,54456],{},[33,102582,102583],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[33,102586,101813],{},"，也就是离地面 1 米高。",[26,102589,102591],{"className":53809,"code":102590,"language":53811,"meta":31,"style":31},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[33,102592,102593],{"__ignoreMap":31},[36,102594,102595,102597,102599,102601,102603,102606],{"class":38,"line":39},[36,102596,1789],{"class":49},[36,102598,102264],{"class":52042},[36,102600,15664],{"class":2713},[36,102602,54],{"class":49},[36,102604,102605],{"class":998},"\"box_free\"",[36,102607,101788],{"class":49},[14,102609,102610,102611,102613],{},"这行很重要。",[33,102612,102264],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[26,102615,102617],{"className":53809,"code":102616,"language":53811,"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,102618,102619],{"__ignoreMap":31},[36,102620,102621,102623,102625,102627,102629,102631,102633,102635,102637,102639,102641,102643,102646,102648,102650,102652,102654,102657],{"class":38,"line":39},[36,102622,1789],{"class":49},[36,102624,101764],{"class":52042},[36,102626,15664],{"class":2713},[36,102628,54],{"class":49},[36,102630,101771],{"class":998},[36,102632,54566],{"class":2713},[36,102634,54],{"class":49},[36,102636,54233],{"class":998},[36,102638,101780],{"class":2713},[36,102640,54],{"class":49},[36,102642,101785],{"class":998},[36,102644,102645],{"class":2713}," mass",[36,102647,54],{"class":49},[36,102649,4427],{"class":998},[36,102651,79509],{"class":2713},[36,102653,54],{"class":49},[36,102655,102656],{"class":998},"\"1 0 0 1\"",[36,102658,101788],{"class":49},[14,102660,102661,102662,102665,102666,102669,102670,102673,102674,102677],{},"这行给 box body 添加一个盒子形状。",[33,102663,102664],{},"type=\"box\""," 表示形状是盒子。",[33,102667,102668],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[33,102671,102672],{},"mass=\"1\""," 表示质量是 1。",[33,102675,102676],{},"rgba=\"1 0 0 1\""," 表示红色。",[26,102679,102681],{"className":28,"code":102680,"language":30,"meta":31,"style":31},"def main() -> None:\n",[33,102682,102683],{"__ignoreMap":31},[36,102684,102685,102687,102689,102691,102693],{"class":38,"line":39},[36,102686,32689],{"class":53},[36,102688,2723],{"class":2713},[36,102690,102042],{"class":49},[36,102692,96330],{"class":60},[36,102694,4488],{"class":49},[14,102696,102697,102699,102700,102703,102704,102707],{},[33,102698,32689],{}," 用来定义函数。这里定义了一个叫 ",[33,102701,102702],{},"main"," 的函数。",[33,102705,102706],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[26,102709,102710],{"className":28,"code":102271,"language":30,"meta":31,"style":31},[33,102711,102712],{"__ignoreMap":31},[36,102713,102714,102716,102718,102720,102722],{"class":38,"line":39},[36,102715,102278],{"class":49},[36,102717,54],{"class":53},[36,102719,102056],{"class":49},[36,102721,101958],{"class":60},[36,102723,75],{"class":49},[14,102725,102726,102727,102730],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[33,102728,102729],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[26,102732,102733],{"className":28,"code":102295,"language":30,"meta":31,"style":31},[33,102734,102735],{"__ignoreMap":31},[36,102736,102737,102739,102741],{"class":38,"line":39},[36,102738,102302],{"class":49},[36,102740,54],{"class":53},[36,102742,102070],{"class":49},[14,102744,102745,102746,102748,102749,102751],{},"这行创建仿真数据。",[33,102747,34143],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[33,102750,34143],{}," 都会变化。",[26,102753,102755],{"className":28,"code":102754,"language":30,"meta":31,"style":31},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[33,102756,102757,102767,102777],{"__ignoreMap":31},[36,102758,102759,102761,102763,102765],{"class":38,"line":39},[36,102760,199],{"class":60},[36,102762,901],{"class":49},[36,102764,102083],{"class":998},[36,102766,102086],{"class":49},[36,102768,102769,102771,102773,102775],{"class":38,"line":46},[36,102770,199],{"class":60},[36,102772,901],{"class":49},[36,102774,102095],{"class":998},[36,102776,102098],{"class":49},[36,102778,102779,102781,102783,102785],{"class":38,"line":78},[36,102780,199],{"class":60},[36,102782,901],{"class":49},[36,102784,102107],{"class":998},[36,102786,102110],{"class":49},[14,102788,102789,102791,102792,102795,102796,102799,102800,102803,102804,102807],{},[33,102790,199],{}," 用来输出信息。",[33,102793,102794],{},"model.nq"," 是位置变量数量，",[33,102797,102798],{},"model.nv"," 是速度变量数量，",[33,102801,102802],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[33,102805,102806],{},"nu"," 是 0。",[26,102809,102811],{"className":28,"code":102810,"language":30,"meta":31,"style":31},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[33,102812,102813,102823],{"__ignoreMap":31},[36,102814,102815,102817,102819,102821],{"class":38,"line":39},[36,102816,199],{"class":60},[36,102818,901],{"class":49},[36,102820,102119],{"class":998},[36,102822,102122],{"class":49},[36,102824,102825,102827,102829,102831],{"class":38,"line":46},[36,102826,199],{"class":60},[36,102828,901],{"class":49},[36,102830,102131],{"class":998},[36,102832,102134],{"class":49},[14,102834,102835,102836,102838,102839,102841,102842,102845],{},"这里打印初始时间和初始位置。",[33,102837,101711],{}," 一开始是 0。",[33,102840,101714],{}," 是位置数组。",[33,102843,102844],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[26,102847,102848],{"className":28,"code":102320,"language":30,"meta":31,"style":31},[33,102849,102850,102866],{"__ignoreMap":31},[36,102851,102852,102854,102856,102858,102860,102862,102864],{"class":38,"line":39},[36,102853,3774],{"class":53},[36,102855,102145],{"class":49},[36,102857,26788],{"class":53},[36,102859,33185],{"class":60},[36,102861,901],{"class":49},[36,102863,67],{"class":60},[36,102865,31528],{"class":49},[36,102867,102868],{"class":38,"line":46},[36,102869,102343],{"class":49},[14,102871,102872,102874,102875,102878,102879,102881,102882,102884],{},[33,102873,3774],{}," 是循环。",[33,102876,102877],{},"range(100)"," 表示循环 100 次。",[33,102880,1871],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[33,102883,101859],{},"，仿真就前进一步。",[26,102886,102888],{"className":28,"code":102887,"language":30,"meta":31,"style":31},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[33,102889,102890,102900],{"__ignoreMap":31},[36,102891,102892,102894,102896,102898],{"class":38,"line":39},[36,102893,199],{"class":60},[36,102895,901],{"class":49},[36,102897,102173],{"class":998},[36,102899,102122],{"class":49},[36,102901,102902,102904,102906,102908],{"class":38,"line":46},[36,102903,199],{"class":60},[36,102905,901],{"class":49},[36,102907,102184],{"class":998},[36,102909,102134],{"class":49},[14,102911,102912],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[26,102914,102916],{"className":28,"code":102915,"language":30,"meta":31,"style":31},"if __name__ == \"__main__\":\n    main()\n",[33,102917,102918,102930],{"__ignoreMap":31},[36,102919,102920,102922,102924,102926,102928],{"class":38,"line":39},[36,102921,2281],{"class":53},[36,102923,31962],{"class":60},[36,102925,102203],{"class":53},[36,102927,102206],{"class":998},[36,102929,4488],{"class":49},[36,102931,102932],{"class":38,"line":46},[36,102933,102213],{"class":49},[14,102935,102936,102937,102940,102941,29130],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[33,102938,102939],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[33,102942,102939],{},[14,102944,102945],{},"运行:",[26,102947,102949],{"className":24566,"code":102948,"language":24568,"meta":31,"style":31},"python ch1_first_sim.py\n",[33,102950,102951],{"__ignoreMap":31},[36,102952,102953,102955],{"class":38,"line":39},[36,102954,30],{"class":2713},[36,102956,101930],{"class":998},[21,102958,102960],{"id":102959},"_5运行结果说明","5.运行结果说明",[14,102962,102963],{},"你应该看到类似输出:",[26,102965,102968],{"className":102966,"code":102967,"language":5935,"meta":31},[5933],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[33,102969,102967],{"__ignoreMap":31},[14,102971,102972,102974,102975,102978,102979,29130],{},[33,102973,102264],{}," 有 7 个位置变量: ",[33,102976,102977],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[33,102980,102981],{},"vx vy vz wx wy wz",[14,102983,102984,102985,102988],{},"你还会看到 ",[33,102986,102987],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[21,102990,102992],{"id":102991},"_6验证步骤","6.验证步骤",[14,102994,102995],{},"确认版本:",[26,102997,102998],{"className":24566,"code":101583,"language":24568,"meta":31,"style":31},[33,102999,103000],{"__ignoreMap":31},[36,103001,103002,103004,103006],{"class":38,"line":39},[36,103003,30],{"class":2713},[36,103005,31103],{"class":60},[36,103007,101594],{"class":998},[14,103009,103010],{},"确认导入的是官方 bindings:",[26,103012,103014],{"className":24566,"code":103013,"language":24568,"meta":31,"style":31},"python -c \"import mujoco; print(mujoco)\"\n",[33,103015,103016],{"__ignoreMap":31},[36,103017,103018,103020,103022],{"class":38,"line":39},[36,103019,30],{"class":2713},[36,103021,31103],{"class":60},[36,103023,103024],{"class":998}," \"import mujoco; print(mujoco)\"\n",[14,103026,103027],{},"运行程序:",[26,103029,103030],{"className":24566,"code":102948,"language":24568,"meta":31,"style":31},[33,103031,103032],{"__ignoreMap":31},[36,103033,103034,103036],{"class":38,"line":39},[36,103035,30],{"class":2713},[36,103037,101930],{"class":998},[14,103039,103040,103041,103044,103045,29130],{},"检查 ",[33,103042,103043],{},"final time"," 是否约等于 ",[33,103046,103047],{},"1.0",[14,103049,103050],{},"再做几个小实验：",[851,103052,103053,103063,103071,103084],{},[854,103054,103055,103056,103058,103059,103062],{},"把 ",[33,103057,102583],{}," 改成 ",[33,103060,103061],{},"pos=\"0 0 2\"","，观察初始高度变化。",[854,103064,103055,103065,103058,103067,103070],{},[33,103066,102472],{},[33,103068,103069],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[854,103072,103055,103073,103058,103075,103078,103079,103081,103082,29130],{},[33,103074,102468],{},[33,103076,103077],{},"timestep=\"0.005\"","，观察 100 步后的 ",[33,103080,103043],{}," 是否变成约 ",[33,103083,36071],{},[854,103085,103086,103087,103090],{},"删除 ",[33,103088,103089],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,103092,103093],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[21,103095,103097],{"id":103096},"_7常见错误与解决方案","7.常见错误与解决方案",[868,103099,103101],{"id":103100},"modulenotfounderror-no-module-named-mujoco",[33,103102,103103],{},"ModuleNotFoundError: No module named 'mujoco'",[14,103105,103106],{},"解决:",[26,103108,103110],{"className":24566,"code":103109,"language":24568,"meta":31,"style":31},"pip install \"mujoco>=2.3\"\n",[33,103111,103112],{"__ignoreMap":31},[36,103113,103114,103116,103118],{"class":38,"line":39},[36,103115,24575],{"class":2713},[36,103117,24578],{"class":998},[36,103119,103120],{"class":998}," \"mujoco>=2.3\"\n",[868,103122,103124],{"id":103123},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,103126,103127],{},"先安装系统依赖:",[26,103129,103131],{"className":24566,"code":103130,"language":24568,"meta":31,"style":31},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[33,103132,103133],{"__ignoreMap":31},[36,103134,103135,103137,103139,103141,103143,103146,103148,103151,103153,103156,103158],{"class":38,"line":39},[36,103136,25321],{"class":2713},[36,103138,27060],{"class":998},[36,103140,24578],{"class":998},[36,103142,27145],{"class":60},[36,103144,103145],{"class":998}," mesa-libGL",[36,103147,101458],{"class":998},[36,103149,103150],{"class":998}," glfw",[36,103152,101478],{"class":998},[36,103154,103155],{"class":998}," libX11",[36,103157,101491],{"class":998},[36,103159,103160],{"class":998}," libXrandr\n",[868,103162,103164],{"id":103163},"xml-解析失败","XML 解析失败",[14,103166,103167],{},"检查:",[851,103169,103170,103173,103176,103182],{},[854,103171,103172],{},"标签是否闭合",[854,103174,103175],{},"属性是否带引号",[854,103177,103178,103179],{},"根节点是否是 ",[33,103180,103181],{},"\u003Cmujoco>",[854,103183,103184,103186,103187,103190],{},[33,103185,52542],{}," 是否放在 ",[33,103188,103189],{},"\u003Cworldbody>"," 内部",[868,103192,103194,103196,103197],{"id":103193},"final-time-不是严格等于-10",[33,103195,103043],{}," 不是严格等于 ",[33,103198,103047],{},[14,103200,103201],{},"这通常不是错误。浮点数计算可能得到：",[26,103203,103206],{"className":103204,"code":103205,"language":5935,"meta":31},[5933],"1.0000000000000007\n",[33,103207,103205],{"__ignoreMap":31},[14,103209,103210,103211,103213],{},"只要接近 ",[33,103212,103047],{}," 就正常。",[868,103215,103216],{"id":103216},"方块没有掉下来",[14,103218,103219],{},"检查：",[851,103221,103222,103228,103234,103239],{},[854,103223,103224,103225],{},"方块 body 里是否有 ",[33,103226,103227],{},"\u003Cfreejoint\u002F>",[854,103229,103230,103231],{},"重力是否是 ",[33,103232,103233],{},"0 0 -9.81",[854,103235,103236,103237],{},"是否真的调用了 ",[33,103238,101329],{},[854,103240,103241,103242,103244,103245],{},"你看的是否是 ",[33,103243,102987],{},"，不是 ",[33,103246,103247],{},"initial qpos",[21,103249,103251],{"id":103250},"_8本章小结","8.本章小结",[14,103253,103254],{},"本章你已经完成了 MuJoCo 的最小闭环：",[26,103256,103259],{"className":103257,"code":103258,"language":5935,"meta":31},[5933],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[33,103260,103258],{"__ignoreMap":31},[14,103262,103263],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[807,103265,103266],{},"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":46,"depth":46,"links":103268},[103269,103270,103271,103276,103280,103281,103282,103290],{"id":101290,"depth":46,"text":101291},{"id":101413,"depth":46,"text":101414},{"id":101688,"depth":46,"text":101689,"children":103272},[103273,103274,103275],{"id":101726,"depth":78,"text":101727},{"id":101820,"depth":78,"text":101821},{"id":101872,"depth":78,"text":101873},{"id":101896,"depth":46,"text":101897,"children":103277},[103278,103279],{"id":102216,"depth":78,"text":102216},{"id":102352,"depth":78,"text":102352},{"id":102959,"depth":46,"text":102960},{"id":102991,"depth":46,"text":102992},{"id":103096,"depth":46,"text":103097,"children":103283},[103284,103285,103286,103287,103289],{"id":103100,"depth":78,"text":103103},{"id":103123,"depth":78,"text":103124},{"id":103163,"depth":78,"text":103164},{"id":103193,"depth":78,"text":103288},"final time 不是严格等于 1.0",{"id":103216,"depth":78,"text":103216},{"id":103250,"depth":46,"text":103251},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101282,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103297,"title":103298,"body":103299,"description":31,"extension":824,"meta":104955,"navigation":193,"path":104956,"seo":104957,"stem":104958,"__hash__":104959},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103300,"toc":104931},[103301,103304,103306,103309,103312,103329,103424,103427,103433,103435,103437,103461,103464,103478,103481,103522,103524,103537,103539,103542,103590,103602,103605,103608,103614,103627,103694,103697,103716,103719,103722,103728,103730,103739,103742,103746,103755,103837,103846,103850,103856,103870,103880,103882,104212,104215,104227,104229,104240,104242,104245,104263,104266,104269,104287,104298,104301,104316,104326,104328,104349,104366,104386,104392,104432,104448,104464,104470,104473,104497,104513,104518,104548,104565,104590,104593,104608,104617,104632,104641,104656,104663,104665,104675,104688,104695,104698,104737,104744,104746,104798,104800,104806,104809,104816,104823,104826,104828,104846,104849,104852,104886,104898,104900,104903,104925,104928],[10,103302,103298],{"id":103303},"_2xml-与-mjcf-物理建模基础",[21,103305,101291],{"id":101290},[14,103307,103308],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,103310,103311],{},"本章结束后，你应该能看懂一个简单模型里：",[851,103313,103314,103317,103320,103323,103326],{},[854,103315,103316],{},"地面在哪里。",[854,103318,103319],{},"物体初始位置在哪里。",[854,103321,103322],{},"几何体是什么形状。",[854,103324,103325],{},"哪些 body 可以自由运动。",[854,103327,103328],{},"如何用名字在 Python 里找到 XML 中的对象。",[1031,103330,103331,103341],{},[1034,103332,103333],{},[1037,103334,103335,103338],{},[1040,103336,103337],{"align":24480},"标签",[1040,103339,103340],{"align":24480},"作用",[1078,103342,103343,103352,103362,103371,103381,103391,103404,103414],{},[1037,103344,103345,103349],{},[1083,103346,103347],{"align":24480},[33,103348,103181],{},[1083,103350,103351],{"align":24480},"根节点",[1037,103353,103354,103359],{},[1083,103355,103356],{"align":24480},[33,103357,103358],{},"\u003Coption>",[1083,103360,103361],{"align":24480},"仿真参数",[1037,103363,103364,103368],{},[1083,103365,103366],{"align":24480},[33,103367,103189],{},[1083,103369,103370],{"align":24480},"世界中的物体",[1037,103372,103373,103378],{},[1083,103374,103375],{"align":24480},[33,103376,103377],{},"\u003Cbody>",[1083,103379,103380],{"align":24480},"刚体",[1037,103382,103383,103388],{},[1083,103384,103385],{"align":24480},[33,103386,103387],{},"\u003Cgeom>",[1083,103389,103390],{"align":24480},"几何体、碰撞体、可视体",[1037,103392,103393,103401],{},[1083,103394,103395,25723,103398],{"align":24480},[33,103396,103397],{},"\u003Cjoint>",[33,103399,103400],{},"\u003Cfreejoint>",[1083,103402,103403],{"align":24480},"关节",[1037,103405,103406,103411],{},[1083,103407,103408],{"align":24480},[33,103409,103410],{},"\u003Csite>",[1083,103412,103413],{"align":24480},"标记点",[1037,103415,103416,103421],{},[1083,103417,103418],{"align":24480},[33,103419,103420],{},"\u003Cactuator>",[1083,103422,103423],{"align":24480},"控制器",[14,103425,103426],{},"初学时可以先记住：",[26,103428,103431],{"className":103429,"code":103430,"language":5935,"meta":31},[5933],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[33,103432,103430],{"__ignoreMap":31},[21,103434,101414],{"id":101413},[14,103436,101417],{},[26,103438,103440],{"className":24566,"code":103439,"language":24568,"meta":31,"style":31},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[33,103441,103442],{"__ignoreMap":31},[36,103443,103444,103446,103448,103450,103452,103454,103456,103458],{"class":38,"line":39},[36,103445,25321],{"class":2713},[36,103447,27060],{"class":998},[36,103449,24578],{"class":998},[36,103451,27145],{"class":60},[36,103453,103145],{"class":998},[36,103455,101458],{"class":998},[36,103457,103150],{"class":998},[36,103459,103460],{"class":998}," glfw-devel\n",[14,103462,103463],{},"pip:",[26,103465,103466],{"className":24566,"code":101563,"language":24568,"meta":31,"style":31},[33,103467,103468],{"__ignoreMap":31},[36,103469,103470,103472,103474,103476],{"class":38,"line":39},[36,103471,24575],{"class":2713},[36,103473,24578],{"class":998},[36,103475,101574],{"class":998},[36,103477,101577],{"class":998},[14,103479,103480],{},"conda:",[26,103482,103484],{"className":24566,"code":103483,"language":24568,"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,103485,103486,103503,103512],{"__ignoreMap":31},[36,103487,103488,103490,103492,103494,103497,103499,103501],{"class":38,"line":39},[36,103489,31075],{"class":2713},[36,103491,29921],{"class":998},[36,103493,25860],{"class":60},[36,103495,103496],{"class":998}," mujoco-xml",[36,103498,101619],{"class":998},[36,103500,101622],{"class":60},[36,103502,101625],{"class":60},[36,103504,103505,103507,103509],{"class":38,"line":46},[36,103506,31075],{"class":2713},[36,103508,101632],{"class":998},[36,103510,103511],{"class":998}," mujoco-xml\n",[36,103513,103514,103516,103518,103520],{"class":38,"line":78},[36,103515,24575],{"class":2713},[36,103517,24578],{"class":998},[36,103519,101574],{"class":998},[36,103521,101577],{"class":998},[14,103523,101648],{},[851,103525,103526,103529,103534],{},[854,103527,103528],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[854,103530,103531,103532,29130],{},"本章使用基础标签，适用于 ",[33,103533,101671],{},[854,103535,103536],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[21,103538,101689],{"id":101688},[14,103540,103541],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[26,103543,103545],{"className":53809,"code":103544,"language":53811,"meta":31,"style":31},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[33,103546,103547,103561,103569,103574,103582],{"__ignoreMap":31},[36,103548,103549,103551,103553,103555,103557,103559],{"class":38,"line":39},[36,103550,1789],{"class":49},[36,103552,101665],{"class":52042},[36,103554,102419],{"class":2713},[36,103556,54],{"class":49},[36,103558,63421],{"class":998},[36,103560,52049],{"class":49},[36,103562,103563,103565,103567],{"class":38,"line":46},[36,103564,52886],{"class":49},[36,103566,102485],{"class":52042},[36,103568,52049],{"class":49},[36,103570,103571],{"class":38,"line":78},[36,103572,103573],{"class":49},"    ...\n",[36,103575,103576,103578,103580],{"class":38,"line":125},[36,103577,53159],{"class":49},[36,103579,102485],{"class":52042},[36,103581,52049],{"class":49},[36,103583,103584,103586,103588],{"class":38,"line":131},[36,103585,52527],{"class":49},[36,103587,101665],{"class":52042},[36,103589,52049],{"class":49},[14,103591,103592,103594,103595,103597,103598,103601],{},[33,103593,52542],{}," 表示刚体。",[33,103596,101764],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[33,103599,103600],{},"joint"," 表示刚体相对父刚体如何运动。",[868,103603,103604],{"id":103604},"层级结构非常重要",[14,103606,103607],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[26,103609,103612],{"className":103610,"code":103611,"language":5935,"meta":31},[5933],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[33,103613,103611],{"__ignoreMap":31},[14,103615,103616,101662,103619,103622,103623,103626],{},[33,103617,103618],{},"red_box_geom",[33,103620,103621],{},"box_center"," 都属于 ",[33,103624,103625],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[26,103628,103630],{"className":53809,"code":103629,"language":53811,"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,103631,103632,103652,103666,103686],{"__ignoreMap":31},[36,103633,103634,103636,103638,103640,103642,103644,103646,103648,103650],{"class":38,"line":39},[36,103635,1789],{"class":49},[36,103637,52542],{"class":52042},[36,103639,15664],{"class":2713},[36,103641,54],{"class":49},[36,103643,54233],{"class":998},[36,103645,101750],{"class":2713},[36,103647,54],{"class":49},[36,103649,101755],{"class":998},[36,103651,52049],{"class":49},[36,103653,103654,103656,103658,103660,103662,103664],{"class":38,"line":46},[36,103655,52886],{"class":49},[36,103657,102264],{"class":52042},[36,103659,15664],{"class":2713},[36,103661,54],{"class":49},[36,103663,102605],{"class":998},[36,103665,101788],{"class":49},[36,103667,103668,103670,103672,103674,103676,103678,103680,103682,103684],{"class":38,"line":78},[36,103669,52886],{"class":49},[36,103671,101764],{"class":52042},[36,103673,54566],{"class":2713},[36,103675,54],{"class":49},[36,103677,54233],{"class":998},[36,103679,101780],{"class":2713},[36,103681,54],{"class":49},[36,103683,101785],{"class":998},[36,103685,101788],{"class":49},[36,103687,103688,103690,103692],{"class":38,"line":125},[36,103689,52527],{"class":49},[36,103691,52542],{"class":52042},[36,103693,52049],{"class":49},[14,103695,103696],{},"含义:",[851,103698,103699,103705,103710,103713],{},[854,103700,103701,103702,103704],{},"创建名为 ",[33,103703,54456],{}," 的刚体",[854,103706,103707,103708],{},"初始位置在世界坐标 ",[33,103709,101813],{},[854,103711,103712],{},"它有一个自由关节",[854,103714,103715],{},"它有一个盒子几何体",[868,103717,103718],{"id":103718},"坐标怎么理解",[14,103720,103721],{},"MuJoCo 默认使用三维坐标：",[26,103723,103726],{"className":103724,"code":103725,"language":5935,"meta":31},[5933],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[33,103727,103725],{"__ignoreMap":31},[14,103729,15377],{},[26,103731,103733],{"className":53809,"code":103732,"language":53811,"meta":31,"style":31},"pos=\"0 0 1\"\n",[33,103734,103735],{"__ignoreMap":31},[36,103736,103737],{"class":38,"line":39},[36,103738,103732],{"class":49},[14,103740,103741],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[868,103743,103745],{"id":103744},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103747,103748,103749,83272,103752,103754],{},"不同 ",[33,103750,103751],{},"type",[33,103753,32238],{}," 含义不同：",[1031,103756,103757,103772],{},[1034,103758,103759],{},[1037,103760,103761,103765,103770],{},[1040,103762,103763],{"align":24480},[33,103764,103751],{},[1040,103766,103767,103769],{"align":24480},[33,103768,32238],{}," 示例",[1040,103771,101344],{"align":24480},[1078,103773,103774,103788,103803,103822],{},[1037,103775,103776,103780,103785],{},[1083,103777,103778],{"align":24480},[33,103779,54456],{},[1083,103781,103782],{"align":24480},[33,103783,103784],{},"size=\"0.1 0.2 0.3\"",[1083,103786,103787],{"align":24480},"x\u002Fy\u002Fz 半边长，不是完整长度",[1037,103789,103790,103795,103800],{},[1083,103791,103792],{"align":24480},[33,103793,103794],{},"sphere",[1083,103796,103797],{"align":24480},[33,103798,103799],{},"size=\"0.1\"",[1083,103801,103802],{"align":24480},"球半径",[1037,103804,103805,103810,103815],{},[1083,103806,103807],{"align":24480},[33,103808,103809],{},"capsule",[1083,103811,103812],{"align":24480},[33,103813,103814],{},"size=\"0.03\"",[1083,103816,103817,103818,103821],{"align":24480},"胶囊半径，长度常用 ",[33,103819,103820],{},"fromto"," 指定",[1037,103823,103824,103829,103834],{},[1083,103825,103826],{"align":24480},[33,103827,103828],{},"plane",[1083,103830,103831],{"align":24480},[33,103832,103833],{},"size=\"3 3 0.1\"",[1083,103835,103836],{"align":24480},"可视平面大小，通常当地面",[14,103838,103839,103840,103842,103843,103845],{},"最容易踩坑的是 box：",[33,103841,102668],{}," 表示边长大约是 ",[33,103844,32779],{},"，因为 MuJoCo 用的是半边长。",[868,103847,103849],{"id":103848},"site-是什么","site 是什么",[14,103851,103852,103855],{},[33,103853,103854],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[851,103857,103858,103861,103864,103867],{},[854,103859,103860],{},"标记机械臂末端。",[854,103862,103863],{},"标记目标位置。",[854,103865,103866],{},"放传感器或相机参考点。",[854,103868,103869],{},"在 Python 中读取某个关键点的世界坐标。",[14,103871,103872,103873,101662,103876,103879],{},"在后面的 Reacher 任务中，",[33,103874,103875],{},"tip",[33,103877,103878],{},"target"," 就会用 site 表示。",[21,103881,101897],{"id":101896},[26,103883,103885],{"className":28,"code":103884,"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,103886,103887,103893,103903,103907,103911,103919,103924,103928,103932,103936,103941,103945,103950,103955,103960,103965,103969,103973,103977,103981,103985,103989,104001,104013,104021,104025,104040,104055,104059,104072,104087,104100,104113,104117,104133,104137,104141,104152,104164,104176,104188,104192,104196,104208],{"__ignoreMap":31},[36,103888,103889,103891],{"class":38,"line":39},[36,103890,31135],{"class":53},[36,103892,101945],{"class":49},[36,103894,103895,103897,103899,103901],{"class":38,"line":46},[36,103896,31135],{"class":53},[36,103898,32122],{"class":49},[36,103900,32125],{"class":53},[36,103902,32128],{"class":49},[36,103904,103905],{"class":38,"line":78},[36,103906,194],{"emptyLinePlaceholder":193},[36,103908,103909],{"class":38,"line":125},[36,103910,194],{"emptyLinePlaceholder":193},[36,103912,103913,103915,103917],{"class":38,"line":131},[36,103914,101958],{"class":60},[36,103916,14308],{"class":53},[36,103918,101963],{"class":998},[36,103920,103921],{"class":38,"line":396},[36,103922,103923],{"class":998},"\u003Cmujoco model=\"xml_basic\">\n",[36,103925,103926],{"class":38,"line":407},[36,103927,101973],{"class":998},[36,103929,103930],{"class":38,"line":2061},[36,103931,194],{"emptyLinePlaceholder":193},[36,103933,103934],{"class":38,"line":2067},[36,103935,101982],{"class":998},[36,103937,103938],{"class":38,"line":2079},[36,103939,103940],{"class":998},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[36,103942,103943],{"class":38,"line":2362},[36,103944,194],{"emptyLinePlaceholder":193},[36,103946,103947],{"class":38,"line":2367},[36,103948,103949],{"class":998},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[36,103951,103952],{"class":38,"line":2373},[36,103953,103954],{"class":998},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[36,103956,103957],{"class":38,"line":2378},[36,103958,103959],{"class":998},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[36,103961,103962],{"class":38,"line":2392},[36,103963,103964],{"class":998},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[36,103966,103967],{"class":38,"line":2397},[36,103968,102011],{"class":998},[36,103970,103971],{"class":38,"line":2403},[36,103972,102016],{"class":998},[36,103974,103975],{"class":38,"line":2424},[36,103976,102021],{"class":998},[36,103978,103979],{"class":38,"line":2429},[36,103980,96342],{"class":998},[36,103982,103983],{"class":38,"line":2443},[36,103984,194],{"emptyLinePlaceholder":193},[36,103986,103987],{"class":38,"line":2448},[36,103988,194],{"emptyLinePlaceholder":193},[36,103990,103991,103993,103995,103997,103999],{"class":38,"line":2477},[36,103992,32689],{"class":53},[36,103994,2723],{"class":2713},[36,103996,102042],{"class":49},[36,103998,96330],{"class":60},[36,104000,4488],{"class":49},[36,104002,104003,104005,104007,104009,104011],{"class":38,"line":2482},[36,104004,102051],{"class":49},[36,104006,54],{"class":53},[36,104008,102056],{"class":49},[36,104010,101958],{"class":60},[36,104012,75],{"class":49},[36,104014,104015,104017,104019],{"class":38,"line":2499},[36,104016,102065],{"class":49},[36,104018,54],{"class":53},[36,104020,102070],{"class":49},[36,104022,104023],{"class":38,"line":2504},[36,104024,194],{"emptyLinePlaceholder":193},[36,104026,104027,104030,104032,104035,104038],{"class":38,"line":2509},[36,104028,104029],{"class":49},"    box_body_id ",[36,104031,54],{"class":53},[36,104033,104034],{"class":49}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[36,104036,104037],{"class":998},"\"red_box\"",[36,104039,75],{"class":49},[36,104041,104042,104045,104047,104050,104053],{"class":38,"line":2514},[36,104043,104044],{"class":49},"    site_id ",[36,104046,54],{"class":53},[36,104048,104049],{"class":49}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[36,104051,104052],{"class":998},"\"box_center\"",[36,104054,75],{"class":49},[36,104056,104057],{"class":38,"line":2528},[36,104058,194],{"emptyLinePlaceholder":193},[36,104060,104061,104063,104066,104068,104070],{"class":38,"line":2533},[36,104062,3850],{"class":53},[36,104064,104065],{"class":49}," box_body_id ",[36,104067,1789],{"class":53},[36,104069,4842],{"class":60},[36,104071,4488],{"class":49},[36,104073,104074,104077,104080,104082,104085],{"class":38,"line":3326},[36,104075,104076],{"class":53},"        raise",[36,104078,104079],{"class":60}," RuntimeError",[36,104081,901],{"class":49},[36,104083,104084],{"class":998},"\"body red_box not found\"",[36,104086,75],{"class":49},[36,104088,104089,104091,104094,104096,104098],{"class":38,"line":3340},[36,104090,3850],{"class":53},[36,104092,104093],{"class":49}," site_id ",[36,104095,1789],{"class":53},[36,104097,4842],{"class":60},[36,104099,4488],{"class":49},[36,104101,104102,104104,104106,104108,104111],{"class":38,"line":3348},[36,104103,104076],{"class":53},[36,104105,104079],{"class":60},[36,104107,901],{"class":49},[36,104109,104110],{"class":998},"\"site box_center not found\"",[36,104112,75],{"class":49},[36,104114,104115],{"class":38,"line":3353},[36,104116,194],{"emptyLinePlaceholder":193},[36,104118,104119,104121,104123,104125,104127,104129,104131],{"class":38,"line":3359},[36,104120,3950],{"class":53},[36,104122,102145],{"class":49},[36,104124,26788],{"class":53},[36,104126,33185],{"class":60},[36,104128,901],{"class":49},[36,104130,2472],{"class":60},[36,104132,31528],{"class":49},[36,104134,104135],{"class":38,"line":3365},[36,104136,102160],{"class":49},[36,104138,104139],{"class":38,"line":3370},[36,104140,194],{"emptyLinePlaceholder":193},[36,104142,104143,104145,104147,104150],{"class":38,"line":8695},[36,104144,32041],{"class":60},[36,104146,901],{"class":49},[36,104148,104149],{"class":998},"\"simulation time:\"",[36,104151,102122],{"class":49},[36,104153,104154,104156,104158,104161],{"class":38,"line":8719},[36,104155,32041],{"class":60},[36,104157,901],{"class":49},[36,104159,104160],{"class":998},"\"box body position:\"",[36,104162,104163],{"class":49},", data.xpos[box_body_id].copy())\n",[36,104165,104166,104168,104170,104173],{"class":38,"line":8724},[36,104167,32041],{"class":60},[36,104169,901],{"class":49},[36,104171,104172],{"class":998},"\"site position:\"",[36,104174,104175],{"class":49},", data.site_xpos[site_id].copy())\n",[36,104177,104178,104180,104182,104185],{"class":38,"line":8730},[36,104179,32041],{"class":60},[36,104181,901],{"class":49},[36,104183,104184],{"class":998},"\"box qpos:\"",[36,104186,104187],{"class":49},", np.array(data.qpos))\n",[36,104189,104190],{"class":38,"line":8757},[36,104191,194],{"emptyLinePlaceholder":193},[36,104193,104194],{"class":38,"line":8762},[36,104195,194],{"emptyLinePlaceholder":193},[36,104197,104198,104200,104202,104204,104206],{"class":38,"line":8768},[36,104199,2281],{"class":53},[36,104201,31962],{"class":60},[36,104203,102203],{"class":53},[36,104205,102206],{"class":998},[36,104207,4488],{"class":49},[36,104209,104210],{"class":38,"line":8780},[36,104211,102213],{"class":49},[14,104213,104214],{},"保存为：",[26,104216,104218],{"className":24566,"code":104217,"language":24568,"meta":31,"style":31},"touch ch2_xml_basic.py\n",[33,104219,104220],{"__ignoreMap":31},[36,104221,104222,104224],{"class":38,"line":39},[36,104223,101927],{"class":2713},[36,104225,104226],{"class":998}," ch2_xml_basic.py\n",[14,104228,102945],{},[26,104230,104232],{"className":24566,"code":104231,"language":24568,"meta":31,"style":31},"python ch2_xml_basic.py\n",[33,104233,104234],{"__ignoreMap":31},[36,104235,104236,104238],{"class":38,"line":39},[36,104237,30],{"class":2713},[36,104239,104226],{"class":998},[868,104241,102216],{"id":102216},[14,104243,104244],{},"用名字查找 body：",[26,104246,104248],{"className":28,"code":104247,"language":30,"meta":31,"style":31},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[33,104249,104250],{"__ignoreMap":31},[36,104251,104252,104255,104257,104259,104261],{"class":38,"line":39},[36,104253,104254],{"class":49},"box_body_id ",[36,104256,54],{"class":53},[36,104258,104034],{"class":49},[36,104260,104037],{"class":998},[36,104262,75],{"class":49},[14,104264,104265],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,104267,104268],{},"用名字查找 site：",[26,104270,104272],{"className":28,"code":104271,"language":30,"meta":31,"style":31},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[33,104273,104274],{"__ignoreMap":31},[36,104275,104276,104279,104281,104283,104285],{"class":38,"line":39},[36,104277,104278],{"class":49},"site_id ",[36,104280,54],{"class":53},[36,104282,104049],{"class":49},[36,104284,104052],{"class":998},[36,104286,75],{"class":49},[14,104288,104289,104290,104293,104294,104297],{},"注意第二个参数是对象类型。查 body 就用 ",[33,104291,104292],{},"mjOBJ_BODY","，查 site 就用 ",[33,104295,104296],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,104299,104300],{},"读取世界坐标：",[26,104302,104304],{"className":28,"code":104303,"language":30,"meta":31,"style":31},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[33,104305,104306,104311],{"__ignoreMap":31},[36,104307,104308],{"class":38,"line":39},[36,104309,104310],{"class":49},"data.xpos[box_body_id]\n",[36,104312,104313],{"class":38,"line":46},[36,104314,104315],{"class":49},"data.site_xpos[site_id]\n",[14,104317,104318,104321,104322,104325],{},[33,104319,104320],{},"xpos"," 是 body 的世界坐标，",[33,104323,104324],{},"site_xpos"," 是 site 的世界坐标。",[868,104327,102352],{"id":102352},[26,104329,104331],{"className":28,"code":104330,"language":30,"meta":31,"style":31},"import mujoco\nimport numpy as np\n",[33,104332,104333,104339],{"__ignoreMap":31},[36,104334,104335,104337],{"class":38,"line":39},[36,104336,31135],{"class":53},[36,104338,101945],{"class":49},[36,104340,104341,104343,104345,104347],{"class":38,"line":46},[36,104342,31135],{"class":53},[36,104344,32122],{"class":49},[36,104346,32125],{"class":53},[36,104348,32128],{"class":49},[14,104350,104351,104352,104355,104356,104359,104360,1104,104363,29130],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[33,104353,104354],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[33,104357,104358],{},"as np"," 是习惯写法，后面就可以写 ",[33,104361,104362],{},"np.array(...)",[33,104364,104365],{},"np.round(...)",[26,104367,104368],{"className":28,"code":102239,"language":30,"meta":31,"style":31},[33,104369,104370,104378,104382],{"__ignoreMap":31},[36,104371,104372,104374,104376],{"class":38,"line":39},[36,104373,101958],{"class":60},[36,104375,14308],{"class":53},[36,104377,101963],{"class":998},[36,104379,104380],{"class":38,"line":46},[36,104381,102254],{"class":998},[36,104383,104384],{"class":38,"line":78},[36,104385,96342],{"class":998},[14,104387,104388,104389,29130],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[33,104390,104391],{},"mujoco.MjModel.from_xml_string(XML)",[26,104393,104395],{"className":53809,"code":104394,"language":53811,"meta":31,"style":31},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[33,104396,104397],{"__ignoreMap":31},[36,104398,104399,104401,104403,104405,104407,104409,104411,104413,104416,104418,104420,104423,104425,104427,104430],{"class":38,"line":39},[36,104400,1789],{"class":49},[36,104402,103854],{"class":52042},[36,104404,15664],{"class":2713},[36,104406,54],{"class":49},[36,104408,104052],{"class":998},[36,104410,101750],{"class":2713},[36,104412,54],{"class":49},[36,104414,104415],{"class":998},"\"0 0 0\"",[36,104417,101780],{"class":2713},[36,104419,54],{"class":49},[36,104421,104422],{"class":998},"\"0.03\"",[36,104424,79509],{"class":2713},[36,104426,54],{"class":49},[36,104428,104429],{"class":998},"\"0 1 0 1\"",[36,104431,101788],{"class":49},[14,104433,104434,104436,104437,104440,104441,104443,104444,104447],{},[33,104435,103854],{}," 是标记点。",[33,104438,104439],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[33,104442,103814],{}," 表示显示出来的小球大小。",[33,104445,104446],{},"rgba=\"0 1 0 1\""," 表示绿色。",[26,104449,104450],{"className":28,"code":104247,"language":30,"meta":31,"style":31},[33,104451,104452],{"__ignoreMap":31},[36,104453,104454,104456,104458,104460,104462],{"class":38,"line":39},[36,104455,104254],{"class":49},[36,104457,54],{"class":53},[36,104459,104034],{"class":49},[36,104461,104037],{"class":998},[36,104463,75],{"class":49},[14,104465,104466,104467,104469],{},"这行的作用是：根据名字 ",[33,104468,104037],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,104471,104472],{},"拆开看：",[851,104474,104475,104481,104486,104492],{},[854,104476,104477,104480],{},[33,104478,104479],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[854,104482,104483,104485],{},[33,104484,102729],{}," 是被查询的模型。",[854,104487,104488,104491],{},[33,104489,104490],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[854,104493,104494,104496],{},[33,104495,104037],{}," 是 XML 里写的名字。",[26,104498,104499],{"className":28,"code":104271,"language":30,"meta":31,"style":31},[33,104500,104501],{"__ignoreMap":31},[36,104502,104503,104505,104507,104509,104511],{"class":38,"line":39},[36,104504,104278],{"class":49},[36,104506,54],{"class":53},[36,104508,104049],{"class":49},[36,104510,104052],{"class":998},[36,104512,75],{"class":49},[14,104514,104515,104516,29130],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[33,104517,104052],{},[26,104519,104521],{"className":28,"code":104520,"language":30,"meta":31,"style":31},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[33,104522,104523,104535],{"__ignoreMap":31},[36,104524,104525,104527,104529,104531,104533],{"class":38,"line":39},[36,104526,2281],{"class":53},[36,104528,104065],{"class":49},[36,104530,1789],{"class":53},[36,104532,4842],{"class":60},[36,104534,4488],{"class":49},[36,104536,104537,104540,104542,104544,104546],{"class":38,"line":46},[36,104538,104539],{"class":53},"    raise",[36,104541,104079],{"class":60},[36,104543,901],{"class":49},[36,104545,104084],{"class":998},[36,104547,75],{"class":49},[14,104549,104550,104552,104553,104556,104557,104560,104561,104564],{},[33,104551,2281],{}," 是条件判断。",[33,104554,104555],{},"mj_name2id"," 找不到对象时会返回 ",[33,104558,104559],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[33,104562,104563],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[26,104566,104568],{"className":28,"code":104567,"language":30,"meta":31,"style":31},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[33,104569,104570,104586],{"__ignoreMap":31},[36,104571,104572,104574,104576,104578,104580,104582,104584],{"class":38,"line":39},[36,104573,3774],{"class":53},[36,104575,102145],{"class":49},[36,104577,26788],{"class":53},[36,104579,33185],{"class":60},[36,104581,901],{"class":49},[36,104583,2472],{"class":60},[36,104585,31528],{"class":49},[36,104587,104588],{"class":38,"line":46},[36,104589,102343],{"class":49},[14,104591,104592],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[26,104594,104596],{"className":28,"code":104595,"language":30,"meta":31,"style":31},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[33,104597,104598],{"__ignoreMap":31},[36,104599,104600,104602,104604,104606],{"class":38,"line":39},[36,104601,199],{"class":60},[36,104603,901],{"class":49},[36,104605,104160],{"class":998},[36,104607,104163],{"class":49},[14,104609,104610,104612,104613,104616],{},[33,104611,101723],{}," 保存所有 body 的世界坐标。",[33,104614,104615],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[26,104618,104620],{"className":28,"code":104619,"language":30,"meta":31,"style":31},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[33,104621,104622],{"__ignoreMap":31},[36,104623,104624,104626,104628,104630],{"class":38,"line":39},[36,104625,199],{"class":60},[36,104627,901],{"class":49},[36,104629,104172],{"class":998},[36,104631,104175],{"class":49},[14,104633,104634,104637,104638,104640],{},[33,104635,104636],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[33,104639,103621],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[26,104642,104644],{"className":28,"code":104643,"language":30,"meta":31,"style":31},"print(\"box qpos:\", np.array(data.qpos))\n",[33,104645,104646],{"__ignoreMap":31},[36,104647,104648,104650,104652,104654],{"class":38,"line":39},[36,104649,199],{"class":60},[36,104651,901],{"class":49},[36,104653,104184],{"class":998},[36,104655,104187],{"class":49},[14,104657,104658,104659,104662],{},"这里打印广义位置数组。",[33,104660,104661],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[21,104664,102960],{"id":102959},[14,104666,104667,104668,104671,104672,29130],{},"程序会输出 ",[33,104669,104670],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[33,104673,104674],{},"qpos",[14,104676,104677,104679,104680,104683,104684,104687],{},[33,104678,104615],{}," 是 body 的世界坐标位置。",[33,104681,104682],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[33,104685,104686],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104689,82964,104690,83272,104692,104694],{},[33,104691,103621],{},[33,104693,104439],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104696,104697],{},"如果你把 site 改成：",[26,104699,104701],{"className":53809,"code":104700,"language":53811,"meta":31,"style":31},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[33,104702,104703],{"__ignoreMap":31},[36,104704,104705,104707,104709,104711,104713,104716,104718,104720,104723,104725,104727,104729,104731,104733,104735],{"class":38,"line":39},[36,104706,1789],{"class":49},[36,104708,103854],{"class":52042},[36,104710,15664],{"class":2713},[36,104712,54],{"class":49},[36,104714,104715],{"class":998},"\"box_top\"",[36,104717,101750],{"class":2713},[36,104719,54],{"class":49},[36,104721,104722],{"class":998},"\"0 0 0.15\"",[36,104724,101780],{"class":2713},[36,104726,54],{"class":49},[36,104728,104422],{"class":998},[36,104730,79509],{"class":2713},[36,104732,54],{"class":49},[36,104734,104429],{"class":998},[36,104736,101788],{"class":49},[14,104738,104739,104740,104743],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[33,104741,104742],{},"site position"," 就会比 body position 的 z 坐标更高。",[21,104745,102992],{"id":102991},[851,104747,104748,104757,104760,104767,104773,104784],{},[854,104749,103055,104750,104752,104753,103058,104755,29130],{},[33,104751,103625],{}," 的初始高度从 ",[33,104754,61],{},[33,104756,181],{},[854,104758,104759],{},"重新运行程序。",[854,104761,104762,104763,104766],{},"观察 ",[33,104764,104765],{},"box qpos"," 和最终位置是否变化。",[854,104768,104769,104770,104772],{},"故意把 ",[33,104771,103854],{}," 名称改错，确认程序能报错。",[854,104774,103055,104775,104777,104778,103058,104780,104783],{},[33,104776,101764],{}," 的颜色 ",[33,104779,102676],{},[33,104781,104782],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[854,104785,103055,104786,83272,104788,103058,104791,104794,104795,104797],{},[33,104787,103621],{},[33,104789,104790],{},"pos",[33,104792,104793],{},"0 0 0.2","，观察 ",[33,104796,104742],{}," 如何变化。",[21,104799,103097],{"id":103096},[868,104801,104803],{"id":104802},"xml-error-schema-violation",[33,104804,104805],{},"XML Error: Schema violation",[14,104807,104808],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[868,104810,104812,82032,104814],{"id":104811},"mj_name2id-返回-1",[33,104813,104555],{},[33,104815,104559],{},[14,104817,104818,104819,104822],{},"说明名字没有找到。检查 XML 中 ",[33,104820,104821],{},"name=\"...\"","，并确认对象类型正确。",[868,104824,104825],{"id":104825},"物体不下落",[14,104827,103167],{},[851,104829,104830,104835,104840],{},[854,104831,104832,104833],{},"body 是否有 ",[33,104834,102264],{},[854,104836,104837,104838],{},"gravity 是否为 ",[33,104839,103233],{},[854,104841,104842,104843,104845],{},"body 是否被固定在 ",[33,104844,102485],{}," 中",[868,104847,104848],{"id":104848},"坐标看起来不符合预期",[14,104850,104851],{},"先区分两种坐标：",[1031,104853,104854,104863],{},[1034,104855,104856],{},[1037,104857,104858,104861],{},[1040,104859,104860],{"align":24480},"坐标",[1040,104862,101344],{"align":24480},[1078,104864,104865,104875],{},[1037,104866,104867,104872],{},[1083,104868,104869,104870],{"align":24480},"XML 里的 ",[33,104871,104790],{},[1083,104873,104874],{"align":24480},"相对父 body 的局部坐标",[1037,104876,104877,104883],{},[1083,104878,104879,25723,104881],{"align":24480},[33,104880,101723],{},[33,104882,104636],{},[1083,104884,104885],{"align":24480},"仿真更新后的世界坐标",[14,104887,104888,104889,104891,104892,83281,104895,104897],{},"如果你修改了 ",[33,104890,101714],{},"，但还没调用 ",[33,104893,104894],{},"mj_forward",[33,104896,101859],{},"，世界坐标可能还没有更新。",[21,104899,103251],{"id":103250},[14,104901,104902],{},"MJCF 建模先掌握四件事：",[851,104904,104905,104910,104915,104920],{},[854,104906,104907,104909],{},[33,104908,52542],{}," 表示刚体层级。",[854,104911,104912,104914],{},[33,104913,101764],{}," 表示形状、碰撞和质量。",[854,104916,104917,104919],{},[33,104918,103600],{}," 决定 body 能不能动、怎么动。",[854,104921,104922,104924],{},[33,104923,103854],{}," 用来标记关键点，方便 Python 读取位置。",[14,104926,104927],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[807,104929,104930],{},"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":46,"depth":46,"links":104932},[104933,104934,104935,104941,104945,104946,104947,104954],{"id":101290,"depth":46,"text":101291},{"id":101413,"depth":46,"text":101414},{"id":101688,"depth":46,"text":101689,"children":104936},[104937,104938,104939,104940],{"id":103604,"depth":78,"text":103604},{"id":103718,"depth":78,"text":103718},{"id":103744,"depth":78,"text":103745},{"id":103848,"depth":78,"text":103849},{"id":101896,"depth":46,"text":101897,"children":104942},[104943,104944],{"id":102216,"depth":78,"text":102216},{"id":102352,"depth":78,"text":102352},{"id":102959,"depth":46,"text":102960},{"id":102991,"depth":46,"text":102992},{"id":103096,"depth":46,"text":103097,"children":104948},[104949,104950,104952,104953],{"id":104802,"depth":78,"text":104805},{"id":104811,"depth":78,"text":104951},"mj_name2id 返回 -1",{"id":104825,"depth":78,"text":104825},{"id":104848,"depth":78,"text":104848},{"id":103250,"depth":46,"text":103251},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103298,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104961,"title":104962,"body":104963,"description":31,"extension":824,"meta":106458,"navigation":193,"path":106459,"seo":106460,"stem":106461,"__hash__":106462},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104964,"toc":106430},[104965,104968,104970,104973,104976,105014,105017,105023,105026,105028,105030,105057,105059,105073,105075,105116,105118,105142,105144,105147,105156,105165,105168,105177,105185,105194,105197,105207,105210,105262,105269,105275,105283,105331,105334,105353,105356,105364,105368,105377,105410,105412,105760,105762,105774,105776,105787,105789,105792,105813,105819,105822,105847,105857,105860,105868,105871,105874,105895,105906,105908,105928,105931,105952,105961,105980,105986,106011,106014,106028,106035,106059,106062,106070,106079,106095,106107,106115,106124,106126,106129,106153,106158,106161,106183,106185,106224,106226,106233,106235,106243,106246,106249,106261,106302,106309,106320,106327,106330,106379,106382,106385,106391,106393,106398,106424,106427],[10,104966,104962],{"id":104967},"_3python-控制接口读取状态与推进仿真",[21,104969,101291],{"id":101290},[14,104971,104972],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104974,104975],{},"你将学习:",[851,104977,104978,104983,104988,104992,104997,105008],{},[854,104979,104980],{},[33,104981,104982],{},"MjModel.from_xml_string",[854,104984,104985],{},[33,104986,104987],{},"MjData(model)",[854,104989,104990],{},[33,104991,101859],{},[854,104993,104994],{},[33,104995,104996],{},"mj_resetData",[854,104998,104999,105000,1104,105002,1104,105005],{},"读取 ",[33,105001,104674],{},[33,105003,105004],{},"qvel",[33,105006,105007],{},"ctrl",[854,105009,105010,105011],{},"使用 ",[33,105012,105013],{},"model.opt.timestep",[14,105015,105016],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[26,105018,105021],{"className":105019,"code":105020,"language":5935,"meta":31},[5933],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[33,105022,105020],{"__ignoreMap":31},[14,105024,105025],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[21,105027,101414],{"id":101413},[14,105029,101417],{},[26,105031,105033],{"className":24566,"code":105032,"language":24568,"meta":31,"style":31},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[33,105034,105035],{"__ignoreMap":31},[36,105036,105037,105039,105041,105043,105045,105048,105050,105052,105054],{"class":38,"line":39},[36,105038,25321],{"class":2713},[36,105040,27060],{"class":998},[36,105042,24578],{"class":998},[36,105044,27145],{"class":60},[36,105046,105047],{"class":998}," python3",[36,105049,101442],{"class":998},[36,105051,103145],{"class":998},[36,105053,101458],{"class":998},[36,105055,105056],{"class":998}," glfw\n",[14,105058,103463],{},[26,105060,105061],{"className":24566,"code":101563,"language":24568,"meta":31,"style":31},[33,105062,105063],{"__ignoreMap":31},[36,105064,105065,105067,105069,105071],{"class":38,"line":39},[36,105066,24575],{"class":2713},[36,105068,24578],{"class":998},[36,105070,101574],{"class":998},[36,105072,101577],{"class":998},[14,105074,103480],{},[26,105076,105078],{"className":24566,"code":105077,"language":24568,"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,105079,105080,105097,105106],{"__ignoreMap":31},[36,105081,105082,105084,105086,105088,105091,105093,105095],{"class":38,"line":39},[36,105083,31075],{"class":2713},[36,105085,29921],{"class":998},[36,105087,25860],{"class":60},[36,105089,105090],{"class":998}," mujoco-python-api",[36,105092,101619],{"class":998},[36,105094,101622],{"class":60},[36,105096,101625],{"class":60},[36,105098,105099,105101,105103],{"class":38,"line":46},[36,105100,31075],{"class":2713},[36,105102,101632],{"class":998},[36,105104,105105],{"class":998}," mujoco-python-api\n",[36,105107,105108,105110,105112,105114],{"class":38,"line":78},[36,105109,24575],{"class":2713},[36,105111,24578],{"class":998},[36,105113,101574],{"class":998},[36,105115,101577],{"class":998},[14,105117,101648],{},[851,105119,105120,105127,105136],{},[854,105121,105122,101662,105124,105126],{},[33,105123,101319],{},[33,105125,101324],{}," 是官方 Python bindings 的类名。",[854,105128,105129,105130,105133,105134,29130],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[33,105131,105132],{},"mjModel"," 在 Python 中是 ",[33,105135,101353],{},[854,105137,105138,105139,29130],{},"不要使用 ",[33,105140,105141],{},"sim = mujoco_py.MjSim(...)",[21,105143,101689],{"id":101688},[14,105145,105146],{},"仿真推进核心代码:",[26,105148,105150],{"className":28,"code":105149,"language":30,"meta":31,"style":31},"mujoco.mj_step(model, data)\n",[33,105151,105152],{"__ignoreMap":31},[36,105153,105154],{"class":38,"line":39},[36,105155,105149],{"class":49},[14,105157,105158,105159,1104,105161,1104,105163,29130],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[33,105160,101714],{},[33,105162,101717],{},[33,105164,101711],{},[14,105166,105167],{},"重置仿真:",[26,105169,105171],{"className":28,"code":105170,"language":30,"meta":31,"style":31},"mujoco.mj_resetData(model, data)\n",[33,105172,105173],{"__ignoreMap":31},[36,105174,105175],{"class":38,"line":39},[36,105176,105170],{"class":49},[14,105178,105179,105180,83281,105182,105184],{},"如果手动修改了 ",[33,105181,101714],{},[33,105183,101717],{},"，通常应调用:",[26,105186,105188],{"className":28,"code":105187,"language":30,"meta":31,"style":31},"mujoco.mj_forward(model, data)\n",[33,105189,105190],{"__ignoreMap":31},[36,105191,105192],{"class":38,"line":39},[36,105193,105187],{"class":49},[14,105195,105196],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[868,105198,105200,1104,105202,1104,105204,105206],{"id":105199},"qposqvelctrl-是什么",[33,105201,104674],{},[33,105203,105004],{},[33,105205,105007],{}," 是什么",[14,105208,105209],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[1031,105211,105212,105224],{},[1034,105213,105214],{},[1037,105215,105216,105219,105221],{},[1040,105217,105218],{"align":24480},"字段",[1040,105220,101344],{"align":24480},[1040,105222,105223],{"align":24480},"谁来修改",[1078,105225,105226,105238,105250],{},[1037,105227,105228,105232,105235],{},[1083,105229,105230],{"align":24480},[33,105231,101714],{},[1083,105233,105234],{"align":24480},"广义位置，例如小车位置、关节角、自由物体位置姿态",[1083,105236,105237],{"align":24480},"MuJoCo 更新，也可以手动设置初始状态",[1037,105239,105240,105244,105247],{},[1083,105241,105242],{"align":24480},[33,105243,101717],{},[1083,105245,105246],{"align":24480},"广义速度，例如小车速度、关节角速度",[1083,105248,105249],{"align":24480},"MuJoCo 更新，也可以手动清零",[1037,105251,105252,105256,105259],{},[1083,105253,105254],{"align":24480},[33,105255,101720],{},[1083,105257,105258],{"align":24480},"actuator 的控制输入",[1083,105260,105261],{"align":24480},"主要由你的控制代码写入",[14,105263,9772,105264,101662,105266,105268],{},[33,105265,104674],{},[33,105267,105004],{}," 不一定同维。自由刚体就是典型例子：",[26,105270,105273],{"className":105271,"code":105272,"language":5935,"meta":31},[5933],"freejoint: qpos 7 维，qvel 6 维\n",[33,105274,105272],{"__ignoreMap":31},[868,105276,105278,101662,105280,105282],{"id":105277},"mj_step-和-mj_forward-的区别",[33,105279,101859],{},[33,105281,104894],{}," 的区别",[1031,105284,105285,105298],{},[1034,105286,105287],{},[1037,105288,105289,105292,105295],{},[1040,105290,105291],{"align":24480},"函数",[1040,105293,105294],{"align":24480},"是否推进时间",[1040,105296,105297],{"align":24480},"什么时候用",[1078,105299,105300,105313],{},[1037,105301,105302,105307,105310],{},[1083,105303,105304],{"align":24480},[33,105305,105306],{},"mj_step(model, data)",[1083,105308,105309],{"align":24480},"是",[1083,105311,105312],{"align":24480},"正常仿真循环，每调用一次前进一步",[1037,105314,105315,105320,105323],{},[1083,105316,105317],{"align":24480},[33,105318,105319],{},"mj_forward(model, data)",[1083,105321,105322],{"align":24480},"否",[1083,105324,105325,105326,1104,105328,105330],{"align":24480},"手动改了 ",[33,105327,104674],{},[33,105329,105004],{}," 后，刷新派生量",[14,105332,105333],{},"例如你写：",[26,105335,105337],{"className":28,"code":105336,"language":30,"meta":31,"style":31},"data.qpos[2] = 2.0\n",[33,105338,105339],{"__ignoreMap":31},[36,105340,105341,105344,105346,105348,105350],{"class":38,"line":39},[36,105342,105343],{"class":49},"data.qpos[",[36,105345,181],{"class":60},[36,105347,5192],{"class":49},[36,105349,54],{"class":53},[36,105351,105352],{"class":60}," 2.0\n",[14,105354,105355],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[26,105357,105358],{"className":28,"code":105187,"language":30,"meta":31,"style":31},[33,105359,105360],{"__ignoreMap":31},[36,105361,105362],{"class":38,"line":39},[36,105363,105187],{"class":49},[868,105365,105367],{"id":105366},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,105369,105370,105373,105374,105376],{},[33,105371,105372],{},"mujoco.mj_resetData(model, data)"," 会把 ",[33,105375,34143],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[26,105378,105380],{"className":28,"code":105379,"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,105381,105382,105386,105396,105406],{"__ignoreMap":31},[36,105383,105384],{"class":38,"line":39},[36,105385,105170],{"class":49},[36,105387,105388,105391,105393],{"class":38,"line":46},[36,105389,105390],{"class":49},"data.qpos[:] ",[36,105392,54],{"class":53},[36,105394,105395],{"class":49}," random_qpos\n",[36,105397,105398,105401,105403],{"class":38,"line":78},[36,105399,105400],{"class":49},"data.qvel[:] ",[36,105402,54],{"class":53},[36,105404,105405],{"class":60}," 0.0\n",[36,105407,105408],{"class":38,"line":125},[36,105409,105187],{"class":49},[21,105411,101897],{"id":101896},[26,105413,105415],{"className":28,"code":105414,"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,105416,105417,105423,105433,105437,105441,105449,105454,105458,105462,105466,105471,105475,105480,105485,105490,105494,105498,105502,105506,105510,105514,105533,105540,105552,105563,105579,105595,105599,105603,105615,105627,105635,105639,105650,105654,105670,105674,105678,105687,105691,105696,105705,105709,105722,105727,105736,105740,105744,105756],{"__ignoreMap":31},[36,105418,105419,105421],{"class":38,"line":39},[36,105420,31135],{"class":53},[36,105422,101945],{"class":49},[36,105424,105425,105427,105429,105431],{"class":38,"line":46},[36,105426,31135],{"class":53},[36,105428,32122],{"class":49},[36,105430,32125],{"class":53},[36,105432,32128],{"class":49},[36,105434,105435],{"class":38,"line":78},[36,105436,194],{"emptyLinePlaceholder":193},[36,105438,105439],{"class":38,"line":125},[36,105440,194],{"emptyLinePlaceholder":193},[36,105442,105443,105445,105447],{"class":38,"line":131},[36,105444,101958],{"class":60},[36,105446,14308],{"class":53},[36,105448,101963],{"class":998},[36,105450,105451],{"class":38,"line":396},[36,105452,105453],{"class":998},"\u003Cmujoco model=\"state_api\">\n",[36,105455,105456],{"class":38,"line":407},[36,105457,101973],{"class":998},[36,105459,105460],{"class":38,"line":2061},[36,105461,194],{"emptyLinePlaceholder":193},[36,105463,105464],{"class":38,"line":2067},[36,105465,101982],{"class":998},[36,105467,105468],{"class":38,"line":2079},[36,105469,105470],{"class":998},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[36,105472,105473],{"class":38,"line":2362},[36,105474,194],{"emptyLinePlaceholder":193},[36,105476,105477],{"class":38,"line":2367},[36,105478,105479],{"class":998},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[36,105481,105482],{"class":38,"line":2373},[36,105483,105484],{"class":998},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[36,105486,105487],{"class":38,"line":2378},[36,105488,105489],{"class":998},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[36,105491,105492],{"class":38,"line":2392},[36,105493,102011],{"class":998},[36,105495,105496],{"class":38,"line":2397},[36,105497,102016],{"class":998},[36,105499,105500],{"class":38,"line":2403},[36,105501,102021],{"class":998},[36,105503,105504],{"class":38,"line":2424},[36,105505,96342],{"class":998},[36,105507,105508],{"class":38,"line":2429},[36,105509,194],{"emptyLinePlaceholder":193},[36,105511,105512],{"class":38,"line":2443},[36,105513,194],{"emptyLinePlaceholder":193},[36,105515,105516,105518,105521,105524,105526,105529,105531],{"class":38,"line":2448},[36,105517,32689],{"class":53},[36,105519,105520],{"class":2713}," print_state",[36,105522,105523],{"class":49},"(prefix: ",[36,105525,2049],{"class":60},[36,105527,105528],{"class":49},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[36,105530,96330],{"class":60},[36,105532,4488],{"class":49},[36,105534,105535,105537],{"class":38,"line":2477},[36,105536,32041],{"class":60},[36,105538,105539],{"class":49},"(prefix)\n",[36,105541,105542,105544,105546,105549],{"class":38,"line":2482},[36,105543,32041],{"class":60},[36,105545,901],{"class":49},[36,105547,105548],{"class":998},"\"  timestep:\"",[36,105550,105551],{"class":49},", model.opt.timestep)\n",[36,105553,105554,105556,105558,105561],{"class":38,"line":2499},[36,105555,32041],{"class":60},[36,105557,901],{"class":49},[36,105559,105560],{"class":998},"\"  time:\"",[36,105562,102122],{"class":49},[36,105564,105565,105567,105569,105572,105575,105577],{"class":38,"line":2504},[36,105566,32041],{"class":60},[36,105568,901],{"class":49},[36,105570,105571],{"class":998},"\"  qpos:\"",[36,105573,105574],{"class":49},", np.round(data.qpos.copy(), ",[36,105576,186],{"class":60},[36,105578,31239],{"class":49},[36,105580,105581,105583,105585,105588,105591,105593],{"class":38,"line":2509},[36,105582,32041],{"class":60},[36,105584,901],{"class":49},[36,105586,105587],{"class":998},"\"  qvel:\"",[36,105589,105590],{"class":49},", np.round(data.qvel.copy(), ",[36,105592,186],{"class":60},[36,105594,31239],{"class":49},[36,105596,105597],{"class":38,"line":2514},[36,105598,194],{"emptyLinePlaceholder":193},[36,105600,105601],{"class":38,"line":2528},[36,105602,194],{"emptyLinePlaceholder":193},[36,105604,105605,105607,105609,105611,105613],{"class":38,"line":2533},[36,105606,32689],{"class":53},[36,105608,2723],{"class":2713},[36,105610,102042],{"class":49},[36,105612,96330],{"class":60},[36,105614,4488],{"class":49},[36,105616,105617,105619,105621,105623,105625],{"class":38,"line":3326},[36,105618,102051],{"class":49},[36,105620,54],{"class":53},[36,105622,102056],{"class":49},[36,105624,101958],{"class":60},[36,105626,75],{"class":49},[36,105628,105629,105631,105633],{"class":38,"line":3340},[36,105630,102065],{"class":49},[36,105632,54],{"class":53},[36,105634,102070],{"class":49},[36,105636,105637],{"class":38,"line":3348},[36,105638,194],{"emptyLinePlaceholder":193},[36,105640,105641,105644,105647],{"class":38,"line":3353},[36,105642,105643],{"class":49},"    print_state(",[36,105645,105646],{"class":998},"\"initial\"",[36,105648,105649],{"class":49},", model, data)\n",[36,105651,105652],{"class":38,"line":3359},[36,105653,194],{"emptyLinePlaceholder":193},[36,105655,105656,105658,105660,105662,105664,105666,105668],{"class":38,"line":3365},[36,105657,3950],{"class":53},[36,105659,102145],{"class":49},[36,105661,26788],{"class":53},[36,105663,33185],{"class":60},[36,105665,901],{"class":49},[36,105667,1538],{"class":60},[36,105669,31528],{"class":49},[36,105671,105672],{"class":38,"line":3370},[36,105673,102160],{"class":49},[36,105675,105676],{"class":38,"line":8695},[36,105677,194],{"emptyLinePlaceholder":193},[36,105679,105680,105682,105685],{"class":38,"line":8719},[36,105681,105643],{"class":49},[36,105683,105684],{"class":998},"\"after 50 steps\"",[36,105686,105649],{"class":49},[36,105688,105689],{"class":38,"line":8724},[36,105690,194],{"emptyLinePlaceholder":193},[36,105692,105693],{"class":38,"line":8730},[36,105694,105695],{"class":49},"    mujoco.mj_resetData(model, data)\n",[36,105697,105698,105700,105703],{"class":38,"line":8757},[36,105699,105643],{"class":49},[36,105701,105702],{"class":998},"\"after reset\"",[36,105704,105649],{"class":49},[36,105706,105707],{"class":38,"line":8762},[36,105708,194],{"emptyLinePlaceholder":193},[36,105710,105711,105714,105716,105718,105720],{"class":38,"line":8768},[36,105712,105713],{"class":49},"    data.qpos[",[36,105715,181],{"class":60},[36,105717,5192],{"class":49},[36,105719,54],{"class":53},[36,105721,105352],{"class":60},[36,105723,105724],{"class":38,"line":8780},[36,105725,105726],{"class":49},"    mujoco.mj_forward(model, data)\n",[36,105728,105729,105731,105734],{"class":38,"line":8792},[36,105730,105643],{"class":49},[36,105732,105733],{"class":998},"\"after manual qpos edit\"",[36,105735,105649],{"class":49},[36,105737,105738],{"class":38,"line":8804},[36,105739,194],{"emptyLinePlaceholder":193},[36,105741,105742],{"class":38,"line":10463},[36,105743,194],{"emptyLinePlaceholder":193},[36,105745,105746,105748,105750,105752,105754],{"class":38,"line":10488},[36,105747,2281],{"class":53},[36,105749,31962],{"class":60},[36,105751,102203],{"class":53},[36,105753,102206],{"class":998},[36,105755,4488],{"class":49},[36,105757,105758],{"class":38,"line":10511},[36,105759,102213],{"class":49},[14,105761,104214],{},[26,105763,105765],{"className":24566,"code":105764,"language":24568,"meta":31,"style":31},"touch ch3_python_state.py\n",[33,105766,105767],{"__ignoreMap":31},[36,105768,105769,105771],{"class":38,"line":39},[36,105770,101927],{"class":2713},[36,105772,105773],{"class":998}," ch3_python_state.py\n",[14,105775,102945],{},[26,105777,105779],{"className":24566,"code":105778,"language":24568,"meta":31,"style":31},"python ch3_python_state.py\n",[33,105780,105781],{"__ignoreMap":31},[36,105782,105783,105785],{"class":38,"line":39},[36,105784,30],{"class":2713},[36,105786,105773],{"class":998},[868,105788,102216],{"id":102216},[14,105790,105791],{},"打印状态的函数：",[26,105793,105795],{"className":28,"code":105794,"language":30,"meta":31,"style":31},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[33,105796,105797],{"__ignoreMap":31},[36,105798,105799,105801,105803,105805,105807,105809,105811],{"class":38,"line":39},[36,105800,32689],{"class":53},[36,105802,105520],{"class":2713},[36,105804,105523],{"class":49},[36,105806,2049],{"class":60},[36,105808,105528],{"class":49},[36,105810,96330],{"class":60},[36,105812,4488],{"class":49},[14,105814,105815,105816,105818],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[33,105817,34143],{}," 里发生了什么。",[14,105820,105821],{},"推进 50 步：",[26,105823,105825],{"className":28,"code":105824,"language":30,"meta":31,"style":31},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[33,105826,105827,105843],{"__ignoreMap":31},[36,105828,105829,105831,105833,105835,105837,105839,105841],{"class":38,"line":39},[36,105830,3774],{"class":53},[36,105832,102145],{"class":49},[36,105834,26788],{"class":53},[36,105836,33185],{"class":60},[36,105838,901],{"class":49},[36,105840,1538],{"class":60},[36,105842,31528],{"class":49},[36,105844,105845],{"class":38,"line":46},[36,105846,102343],{"class":49},[14,105848,105849,105850,105853,105854,105856],{},"由于 ",[33,105851,105852],{},"timestep=0.01","，所以 50 步后时间约为 ",[33,105855,36071],{}," 秒。",[14,105858,105859],{},"重置：",[26,105861,105862],{"className":28,"code":105170,"language":30,"meta":31,"style":31},[33,105863,105864],{"__ignoreMap":31},[36,105865,105866],{"class":38,"line":39},[36,105867,105170],{"class":49},[14,105869,105870],{},"这会把时间、位置、速度恢复到初始状态。",[14,105872,105873],{},"手动改高度：",[26,105875,105877],{"className":28,"code":105876,"language":30,"meta":31,"style":31},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[33,105878,105879,105891],{"__ignoreMap":31},[36,105880,105881,105883,105885,105887,105889],{"class":38,"line":39},[36,105882,105343],{"class":49},[36,105884,181],{"class":60},[36,105886,5192],{"class":49},[36,105888,54],{"class":53},[36,105890,105352],{"class":60},[36,105892,105893],{"class":38,"line":46},[36,105894,105187],{"class":49},[14,105896,105897,105898,105901,105902,105905],{},"这个例子里 ",[33,105899,105900],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[33,105903,105904],{},"2.0"," 表示把小球放到更高的位置。",[868,105907,102352],{"id":102352},[26,105909,105910],{"className":28,"code":105794,"language":30,"meta":31,"style":31},[33,105911,105912],{"__ignoreMap":31},[36,105913,105914,105916,105918,105920,105922,105924,105926],{"class":38,"line":39},[36,105915,32689],{"class":53},[36,105917,105520],{"class":2713},[36,105919,105523],{"class":49},[36,105921,2049],{"class":60},[36,105923,105528],{"class":49},[36,105925,96330],{"class":60},[36,105927,4488],{"class":49},[14,105929,105930],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[851,105932,105933,105942,105947],{},[854,105934,105935,105938,105939,105941],{},[33,105936,105937],{},"prefix","：一段文字，比如 ",[33,105940,105646],{},"，用来说明现在打印的是哪个阶段。",[854,105943,105944,105946],{},[33,105945,102729],{},"：MuJoCo 模型。",[854,105948,105949,105951],{},[33,105950,34143],{},"：MuJoCo 当前状态。",[14,105953,105954,1104,105957,105960],{},[33,105955,105956],{},"prefix: str",[33,105958,105959],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[26,105962,105964],{"className":28,"code":105963,"language":30,"meta":31,"style":31},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[33,105965,105966],{"__ignoreMap":31},[36,105967,105968,105970,105972,105974,105976,105978],{"class":38,"line":39},[36,105969,199],{"class":60},[36,105971,901],{"class":49},[36,105973,105571],{"class":998},[36,105975,105574],{"class":49},[36,105977,186],{"class":60},[36,105979,31239],{"class":49},[14,105981,105982,105985],{},[33,105983,105984],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[26,105987,105989],{"className":28,"code":105988,"language":30,"meta":31,"style":31},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[33,105990,105991,106003],{"__ignoreMap":31},[36,105992,105993,105995,105997,105999,106001],{"class":38,"line":39},[36,105994,102278],{"class":49},[36,105996,54],{"class":53},[36,105998,102056],{"class":49},[36,106000,101958],{"class":60},[36,106002,75],{"class":49},[36,106004,106005,106007,106009],{"class":38,"line":46},[36,106006,102302],{"class":49},[36,106008,54],{"class":53},[36,106010,102070],{"class":49},[14,106012,106013],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[26,106015,106017],{"className":28,"code":106016,"language":30,"meta":31,"style":31},"print_state(\"initial\", model, data)\n",[33,106018,106019],{"__ignoreMap":31},[36,106020,106021,106024,106026],{"class":38,"line":39},[36,106022,106023],{"class":49},"print_state(",[36,106025,105646],{"class":998},[36,106027,105649],{"class":49},[14,106029,106030,106031,106034],{},"调用刚才定义的 ",[33,106032,106033],{},"print_state"," 函数，打印初始状态。",[26,106036,106037],{"className":28,"code":105824,"language":30,"meta":31,"style":31},[33,106038,106039,106055],{"__ignoreMap":31},[36,106040,106041,106043,106045,106047,106049,106051,106053],{"class":38,"line":39},[36,106042,3774],{"class":53},[36,106044,102145],{"class":49},[36,106046,26788],{"class":53},[36,106048,33185],{"class":60},[36,106050,901],{"class":49},[36,106052,1538],{"class":60},[36,106054,31528],{"class":49},[36,106056,106057],{"class":38,"line":46},[36,106058,102343],{"class":49},[14,106060,106061],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[26,106063,106064],{"className":28,"code":105170,"language":30,"meta":31,"style":31},[33,106065,106066],{"__ignoreMap":31},[36,106067,106068],{"class":38,"line":39},[36,106069,105170],{"class":49},[14,106071,106072,106073,106075,106076,106078],{},"重置 ",[33,106074,34143],{},"。注意它不会重新创建 ",[33,106077,102729],{},"，因为模型结构没有变，只是状态回到初始值。",[26,106080,106081],{"className":28,"code":105336,"language":30,"meta":31,"style":31},[33,106082,106083],{"__ignoreMap":31},[36,106084,106085,106087,106089,106091,106093],{"class":38,"line":39},[36,106086,105343],{"class":49},[36,106088,181],{"class":60},[36,106090,5192],{"class":49},[36,106092,54],{"class":53},[36,106094,105352],{"class":60},[14,106096,106097,106098,1104,106101,1104,106104,106106],{},"这行是“手动改状态”。在 freejoint 中，",[33,106099,106100],{},"qpos[0]",[33,106102,106103],{},"qpos[1]",[33,106105,105900],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[26,106108,106109],{"className":28,"code":105187,"language":30,"meta":31,"style":31},[33,106110,106111],{"__ignoreMap":31},[36,106112,106113],{"class":38,"line":39},[36,106114,105187],{"class":49},[14,106116,106117,106118,106120,106121,106123],{},"手动改完 ",[33,106119,104674],{}," 后，调用 ",[33,106122,104894],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[21,106125,102960],{"id":102959},[14,106127,106128],{},"你会看到:",[851,106130,106131,106136,106141,106144],{},[854,106132,106133,106134],{},"初始时间为 ",[33,106135,643],{},[854,106137,106138,106139],{},"50 步后时间约为 ",[33,106140,36071],{},[854,106142,106143],{},"reset 后状态恢复",[854,106145,106146,106147,106150,106151],{},"手动修改 ",[33,106148,106149],{},"data.qpos[2]"," 后，小球高度变为 ",[33,106152,105904],{},[14,106154,106155,106157],{},[33,106156,105900],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,106159,106160],{},"输出里可以重点看三件事：",[851,106162,106163,106171,106176],{},[854,106164,106165,106167,106168,106170],{},[33,106166,3137],{}," 是否随着 ",[33,106169,101859],{}," 增加。",[854,106172,106173,106175],{},[33,106174,104674],{}," 的 z 坐标是否因为下落而变化。",[854,106177,106178,106180,106181,29130],{},[33,106179,104996],{}," 后时间是否回到 ",[33,106182,643],{},[21,106184,102992],{"id":102991},[851,106186,106187,106193,106199,106205,106208,106217],{},[854,106188,106189,106190,29130],{},"修改 timestep 为 ",[33,106191,106192],{},"0.005",[854,106194,106195,106196,29130],{},"重新运行，检查 50 步后时间是否约为 ",[33,106197,106198],{},"0.25",[854,106200,106201,106202,29130],{},"修改重力为 ",[33,106203,106204],{},"0 0 -1.0",[854,106206,106207],{},"观察小球下降速度是否变慢。",[854,106209,103055,106210,103058,106213,106216],{},[33,106211,106212],{},"data.qpos[2] = 2.0",[33,106214,106215],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[854,106218,106219,106220,106223],{},"注释掉 ",[33,106221,106222],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[21,106225,103097],{"id":103096},[868,106227,106229,106230,106232],{"id":106228},"修改-dataqpos-后位置没有更新","修改 ",[33,106231,101714],{}," 后位置没有更新",[14,106234,103106],{},[26,106236,106237],{"className":28,"code":105187,"language":30,"meta":31,"style":31},[33,106238,106239],{"__ignoreMap":31},[36,106240,106241],{"class":38,"line":39},[36,106242,105187],{"class":49},[868,106244,106245],{"id":106245},"数组维度看不懂",[14,106247,106248],{},"打印模型维度:",[26,106250,106252],{"className":28,"code":106251,"language":30,"meta":31,"style":31},"print(model.nq, model.nv, model.nu)\n",[33,106253,106254],{"__ignoreMap":31},[36,106255,106256,106258],{"class":38,"line":39},[36,106257,199],{"class":60},[36,106259,106260],{"class":49},"(model.nq, model.nv, model.nu)\n",[1031,106262,106263,106271],{},[1034,106264,106265],{},[1037,106266,106267,106269],{},[1040,106268,105218],{"align":24480},[1040,106270,101344],{"align":24480},[1078,106272,106273,106283,106293],{},[1037,106274,106275,106280],{},[1083,106276,106277],{"align":24480},[33,106278,106279],{},"nq",[1083,106281,106282],{"align":24480},"位置变量数量",[1037,106284,106285,106290],{},[1083,106286,106287],{"align":24480},[33,106288,106289],{},"nv",[1083,106291,106292],{"align":24480},"速度变量数量",[1037,106294,106295,106299],{},[1083,106296,106297],{"align":24480},[33,106298,102806],{},[1083,106300,106301],{"align":24480},"控制输入数量",[868,106303,106305,106306,106308],{"id":106304},"误以为-qpos-一定等于关节数","误以为 ",[33,106307,104674],{}," 一定等于关节数",[14,106310,106311,106312,83272,106314,106316,106317,106319],{},"不是。例如 ",[33,106313,102264],{},[33,106315,104674],{}," 是 7 维，但 ",[33,106318,105004],{}," 是 6 维。",[868,106321,106323,106324,106326],{"id":106322},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[33,106325,104674],{}," 的第几位",[14,106328,106329],{},"初学时可以先打印：",[26,106331,106333],{"className":28,"code":106332,"language":30,"meta":31,"style":31},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[33,106334,106335,106345,106355,106367],{"__ignoreMap":31},[36,106336,106337,106339,106341,106343],{"class":38,"line":39},[36,106338,199],{"class":60},[36,106340,901],{"class":49},[36,106342,102083],{"class":998},[36,106344,102086],{"class":49},[36,106346,106347,106349,106351,106353],{"class":38,"line":46},[36,106348,199],{"class":60},[36,106350,901],{"class":49},[36,106352,102095],{"class":998},[36,106354,102098],{"class":49},[36,106356,106357,106359,106361,106364],{"class":38,"line":78},[36,106358,199],{"class":60},[36,106360,901],{"class":49},[36,106362,106363],{"class":998},"\"qpos:\"",[36,106365,106366],{"class":49},", data.qpos)\n",[36,106368,106369,106371,106373,106376],{"class":38,"line":125},[36,106370,199],{"class":60},[36,106372,901],{"class":49},[36,106374,106375],{"class":998},"\"qvel:\"",[36,106377,106378],{"class":49},", data.qvel)\n",[14,106380,106381],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[868,106383,106384],{"id":106384},"仿真结果每次都一样",[14,106386,106387,106388,106390],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[33,106389,104674],{},"、目标点或控制输入。",[21,106392,103251],{"id":103250},[14,106394,106395,106396,25363],{},"Python 控制 MuJoCo 的核心就是读写 ",[33,106397,34143],{},[851,106399,106400,106408,106413,106418],{},[854,106401,106402,106403,101662,106405,106407],{},"用 ",[33,106404,101714],{},[33,106406,101717],{}," 读取状态。",[854,106409,106402,106410,106412],{},[33,106411,101720],{}," 写入控制。",[854,106414,106402,106415,106417],{},[33,106416,101859],{}," 推进时间。",[854,106419,106420,106421,106423],{},"手动改状态后用 ",[33,106422,104894],{}," 刷新派生量。",[14,106425,106426],{},"理解这一章后，就可以进入关节和 actuator 控制。",[807,106428,106429],{},"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":46,"depth":46,"links":106431},[106432,106433,106434,106441,106445,106446,106447,106457],{"id":101290,"depth":46,"text":101291},{"id":101413,"depth":46,"text":101414},{"id":101688,"depth":46,"text":101689,"children":106435},[106436,106438,106440],{"id":105199,"depth":78,"text":106437},"qpos、qvel、ctrl 是什么",{"id":105277,"depth":78,"text":106439},"mj_step 和 mj_forward 的区别",{"id":105366,"depth":78,"text":105367},{"id":101896,"depth":46,"text":101897,"children":106442},[106443,106444],{"id":102216,"depth":78,"text":102216},{"id":102352,"depth":78,"text":102352},{"id":102959,"depth":46,"text":102960},{"id":102991,"depth":46,"text":102992},{"id":103096,"depth":46,"text":103097,"children":106448},[106449,106451,106452,106454,106456],{"id":106228,"depth":78,"text":106450},"修改 data.qpos 后位置没有更新",{"id":106245,"depth":78,"text":106245},{"id":106304,"depth":78,"text":106453},"误以为 qpos 一定等于关节数",{"id":106322,"depth":78,"text":106455},"不知道某个元素在 qpos 的第几位",{"id":106384,"depth":78,"text":106384},{"id":103250,"depth":46,"text":103251},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104962,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106464,"title":106465,"body":106466,"description":31,"extension":824,"meta":108156,"navigation":193,"path":108157,"seo":108158,"stem":108159,"__hash__":108160},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106467,"toc":108132},[106468,106471,106473,106476,106478,106503,106506,106525,106528,106530,106532,106556,106558,106572,106574,106615,106617,106641,106643,106646,106680,106682,106695,106698,106766,106775,106779,106782,106816,106822,106825,106829,106868,106871,106891,106895,106938,106940,106969,106972,106978,106981,106983,107377,107379,107391,107393,107404,107406,107409,107438,107446,107449,107484,107487,107489,107497,107500,107502,107513,107523,107543,107546,107582,107594,107642,107661,107703,107716,107744,107749,107770,107780,107798,107801,107835,107838,107858,107861,107880,107886,107888,107891,107897,107903,107913,107916,107922,107931,107933,107979,107981,107987,107993,107996,107999,108019,108022,108028,108034,108036,108059,108062,108065,108074,108077,108115,108117,108120,108126,108129],[10,106469,106465],{"id":106470},"_4关节actuator-与力控制",[21,106472,101291],{"id":101290},[14,106474,106475],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,106477,104975],{},[851,106479,106480,106486,106491,106495,106500],{},[854,106481,106482,106485],{},[33,106483,106484],{},"hinge"," 关节",[854,106487,106488],{},[33,106489,106490],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[854,106492,106493],{},[33,106494,101720],{},[854,106496,106497],{},[33,106498,106499],{},"ctrlrange",[854,106501,106502],{},"读取关节角和角速度",[14,106504,106505],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[26,106507,106509],{"className":28,"code":106508,"language":30,"meta":31,"style":31},"data.ctrl[0] = ...\n",[33,106510,106511],{"__ignoreMap":31},[36,106512,106513,106516,106518,106520,106522],{"class":38,"line":39},[36,106514,106515],{"class":49},"data.ctrl[",[36,106517,643],{"class":60},[36,106519,5192],{"class":49},[36,106521,54],{"class":53},[36,106523,106524],{"class":60}," ...\n",[14,106526,106527],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[21,106529,101414],{"id":101413},[14,106531,101417],{},[26,106533,106534],{"className":24566,"code":105032,"language":24568,"meta":31,"style":31},[33,106535,106536],{"__ignoreMap":31},[36,106537,106538,106540,106542,106544,106546,106548,106550,106552,106554],{"class":38,"line":39},[36,106539,25321],{"class":2713},[36,106541,27060],{"class":998},[36,106543,24578],{"class":998},[36,106545,27145],{"class":60},[36,106547,105047],{"class":998},[36,106549,101442],{"class":998},[36,106551,103145],{"class":998},[36,106553,101458],{"class":998},[36,106555,105056],{"class":998},[14,106557,103463],{},[26,106559,106560],{"className":24566,"code":101563,"language":24568,"meta":31,"style":31},[33,106561,106562],{"__ignoreMap":31},[36,106563,106564,106566,106568,106570],{"class":38,"line":39},[36,106565,24575],{"class":2713},[36,106567,24578],{"class":998},[36,106569,101574],{"class":998},[36,106571,101577],{"class":998},[14,106573,103480],{},[26,106575,106577],{"className":24566,"code":106576,"language":24568,"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,106578,106579,106596,106605],{"__ignoreMap":31},[36,106580,106581,106583,106585,106587,106590,106592,106594],{"class":38,"line":39},[36,106582,31075],{"class":2713},[36,106584,29921],{"class":998},[36,106586,25860],{"class":60},[36,106588,106589],{"class":998}," mujoco-control",[36,106591,101619],{"class":998},[36,106593,101622],{"class":60},[36,106595,101625],{"class":60},[36,106597,106598,106600,106602],{"class":38,"line":46},[36,106599,31075],{"class":2713},[36,106601,101632],{"class":998},[36,106603,106604],{"class":998}," mujoco-control\n",[36,106606,106607,106609,106611,106613],{"class":38,"line":78},[36,106608,24575],{"class":2713},[36,106610,24578],{"class":998},[36,106612,101574],{"class":998},[36,106614,101577],{"class":998},[14,106616,101648],{},[851,106618,106619,106625,106632,106638],{},[854,106620,106621,106624],{},[33,106622,106623],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[854,106626,106627,106629,106630,29130],{},[33,106628,101720],{}," 长度等于 ",[33,106631,102802],{},[854,106633,82964,106634,106637],{},[33,106635,106636],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[854,106639,106640],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[21,106642,101689],{"id":101688},[14,106644,106645],{},"关节决定 body 如何运动:",[26,106647,106649],{"className":53809,"code":106648,"language":53811,"meta":31,"style":31},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[33,106650,106651],{"__ignoreMap":31},[36,106652,106653,106655,106657,106659,106661,106664,106666,106668,106670,106673,106675,106678],{"class":38,"line":39},[36,106654,1789],{"class":49},[36,106656,103600],{"class":52042},[36,106658,15664],{"class":2713},[36,106660,54],{"class":49},[36,106662,106663],{"class":998},"\"hinge\"",[36,106665,54566],{"class":2713},[36,106667,54],{"class":49},[36,106669,106663],{"class":998},[36,106671,106672],{"class":2713}," axis",[36,106674,54],{"class":49},[36,106676,106677],{"class":998},"\"0 1 0\"",[36,106679,101788],{"class":49},[14,106681,103696],{},[851,106683,106684,106689,106692],{},[854,106685,106686,106687],{},"名字是 ",[33,106688,106484],{},[854,106690,106691],{},"类型是旋转关节",[854,106693,106694],{},"绕 y 轴旋转",[14,106696,106697],{},"actuator 决定如何施加控制:",[26,106699,106701],{"className":53809,"code":106700,"language":53811,"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,106702,106703,106712,106758],{"__ignoreMap":31},[36,106704,106705,106707,106710],{"class":38,"line":39},[36,106706,1789],{"class":49},[36,106708,106709],{"class":52042},"actuator",[36,106711,52049],{"class":49},[36,106713,106714,106716,106719,106721,106723,106726,106729,106731,106733,106736,106738,106740,106743,106745,106748,106751,106753,106756],{"class":38,"line":46},[36,106715,52886],{"class":49},[36,106717,106718],{"class":52042},"motor",[36,106720,15664],{"class":2713},[36,106722,54],{"class":49},[36,106724,106725],{"class":998},"\"hinge_motor\"",[36,106727,106728],{"class":2713}," joint",[36,106730,54],{"class":49},[36,106732,106663],{"class":998},[36,106734,106735],{"class":2713}," gear",[36,106737,54],{"class":49},[36,106739,4427],{"class":998},[36,106741,106742],{"class":2713}," ctrlrange",[36,106744,54],{"class":49},[36,106746,106747],{"class":998},"\"-2 2\"",[36,106749,106750],{"class":2713}," ctrllimited",[36,106752,54],{"class":49},[36,106754,106755],{"class":998},"\"true\"",[36,106757,101788],{"class":49},[36,106759,106760,106762,106764],{"class":38,"line":78},[36,106761,52527],{"class":49},[36,106763,106709],{"class":52042},[36,106765,52049],{"class":49},[14,106767,106768,106771,106772,29130],{},[33,106769,106770],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[33,106773,106774],{},"[-2, 2]",[868,106776,106778],{"id":106777},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106780,106781],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[1031,106783,106784,106794],{},[1034,106785,106786],{},[1037,106787,106788,106790,106792],{},[1040,106789,26498],{"align":24480},[1040,106791,103340],{"align":24480},[1040,106793,101378],{"align":24480},[1078,106795,106796,106806],{},[1037,106797,106798,106800,106803],{},[1083,106799,103600],{"align":24480},[1083,106801,106802],{"align":24480},"定义能怎么动",[1083,106804,106805],{"align":24480},"门轴允许门旋转",[1037,106807,106808,106810,106813],{},[1083,106809,106709],{"align":24480},[1083,106811,106812],{"align":24480},"定义怎么施力或控制",[1083,106814,106815],{"align":24480},"人推门、马达带动门",[14,106817,106818,106819,106821],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[33,106820,101720],{}," 主动控制它。",[14,106823,106824],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[868,106826,106828],{"id":106827},"hinge-joint","hinge joint",[26,106830,106832],{"className":53809,"code":106831,"language":53811,"meta":31,"style":31},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[33,106833,106834],{"__ignoreMap":31},[36,106835,106836,106838,106840,106842,106844,106846,106848,106850,106852,106854,106856,106858,106861,106863,106866],{"class":38,"line":39},[36,106837,1789],{"class":49},[36,106839,103600],{"class":52042},[36,106841,15664],{"class":2713},[36,106843,54],{"class":49},[36,106845,106663],{"class":998},[36,106847,54566],{"class":2713},[36,106849,54],{"class":49},[36,106851,106663],{"class":998},[36,106853,106672],{"class":2713},[36,106855,54],{"class":49},[36,106857,106677],{"class":998},[36,106859,106860],{"class":2713}," damping",[36,106862,54],{"class":49},[36,106864,106865],{"class":998},"\"0.1\"",[36,106867,101788],{"class":49},[14,106869,106870],{},"含义：",[851,106872,106873,106879,106885],{},[854,106874,106875,106878],{},[33,106876,106877],{},"type=\"hinge\"","：只能绕一个轴旋转。",[854,106880,106881,106884],{},[33,106882,106883],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[854,106886,106887,106890],{},[33,106888,106889],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[868,106892,106894],{"id":106893},"motor-actuator","motor actuator",[26,106896,106898],{"className":53809,"code":106897,"language":53811,"meta":31,"style":31},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[33,106899,106900],{"__ignoreMap":31},[36,106901,106902,106904,106906,106908,106910,106912,106914,106916,106918,106920,106922,106924,106926,106928,106930,106932,106934,106936],{"class":38,"line":39},[36,106903,1789],{"class":49},[36,106905,106718],{"class":52042},[36,106907,15664],{"class":2713},[36,106909,54],{"class":49},[36,106911,106725],{"class":998},[36,106913,106728],{"class":2713},[36,106915,54],{"class":49},[36,106917,106663],{"class":998},[36,106919,106735],{"class":2713},[36,106921,54],{"class":49},[36,106923,4427],{"class":998},[36,106925,106742],{"class":2713},[36,106927,54],{"class":49},[36,106929,106747],{"class":998},[36,106931,106750],{"class":2713},[36,106933,54],{"class":49},[36,106935,106755],{"class":998},[36,106937,101788],{"class":49},[14,106939,106870],{},[851,106941,106942,106951,106957,106963],{},[854,106943,106944,106947,106948,106950],{},[33,106945,106946],{},"joint=\"hinge\"","：这个电机作用在名为 ",[33,106949,106484],{}," 的关节上。",[854,106952,106953,106956],{},[33,106954,106955],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[854,106958,106959,106962],{},[33,106960,106961],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[854,106964,106965,106968],{},[33,106966,106967],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106970,106971],{},"简单理解：",[26,106973,106976],{"className":106974,"code":106975,"language":5935,"meta":31},[5933],"实际施加效果 ≈ data.ctrl[0] * gear\n",[33,106977,106975],{"__ignoreMap":31},[14,106979,106980],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[21,106982,101897],{"id":101896},[26,106984,106986],{"className":28,"code":106985,"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,106987,106988,106995,106999,107005,107015,107019,107023,107031,107036,107041,107045,107049,107054,107059,107063,107068,107073,107078,107083,107087,107091,107095,107100,107105,107110,107114,107118,107122,107126,107138,107150,107158,107162,107172,107182,107192,107196,107209,107222,107226,107243,107257,107292,107296,107300,107311,107326,107341,107353,107357,107361,107373],{"__ignoreMap":31},[36,106989,106990,106992],{"class":38,"line":39},[36,106991,31135],{"class":53},[36,106993,106994],{"class":49}," math\n",[36,106996,106997],{"class":38,"line":46},[36,106998,194],{"emptyLinePlaceholder":193},[36,107000,107001,107003],{"class":38,"line":78},[36,107002,31135],{"class":53},[36,107004,101945],{"class":49},[36,107006,107007,107009,107011,107013],{"class":38,"line":125},[36,107008,31135],{"class":53},[36,107010,32122],{"class":49},[36,107012,32125],{"class":53},[36,107014,32128],{"class":49},[36,107016,107017],{"class":38,"line":131},[36,107018,194],{"emptyLinePlaceholder":193},[36,107020,107021],{"class":38,"line":396},[36,107022,194],{"emptyLinePlaceholder":193},[36,107024,107025,107027,107029],{"class":38,"line":407},[36,107026,101958],{"class":60},[36,107028,14308],{"class":53},[36,107030,101963],{"class":998},[36,107032,107033],{"class":38,"line":2061},[36,107034,107035],{"class":998},"\u003Cmujoco model=\"one_link_motor\">\n",[36,107037,107038],{"class":38,"line":2067},[36,107039,107040],{"class":998},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[36,107042,107043],{"class":38,"line":2079},[36,107044,194],{"emptyLinePlaceholder":193},[36,107046,107047],{"class":38,"line":2362},[36,107048,101982],{"class":998},[36,107050,107051],{"class":38,"line":2367},[36,107052,107053],{"class":998},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[36,107055,107056],{"class":38,"line":2373},[36,107057,107058],{"class":998},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[36,107060,107061],{"class":38,"line":2378},[36,107062,194],{"emptyLinePlaceholder":193},[36,107064,107065],{"class":38,"line":2392},[36,107066,107067],{"class":998},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[36,107069,107070],{"class":38,"line":2397},[36,107071,107072],{"class":998},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[36,107074,107075],{"class":38,"line":2403},[36,107076,107077],{"class":998},"        \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,107079,107080],{"class":38,"line":2424},[36,107081,107082],{"class":998},"      \u003C\u002Fbody>\n",[36,107084,107085],{"class":38,"line":2429},[36,107086,102011],{"class":998},[36,107088,107089],{"class":38,"line":2443},[36,107090,102016],{"class":998},[36,107092,107093],{"class":38,"line":2448},[36,107094,194],{"emptyLinePlaceholder":193},[36,107096,107097],{"class":38,"line":2477},[36,107098,107099],{"class":998},"  \u003Cactuator>\n",[36,107101,107102],{"class":38,"line":2482},[36,107103,107104],{"class":998},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[36,107106,107107],{"class":38,"line":2499},[36,107108,107109],{"class":998},"  \u003C\u002Factuator>\n",[36,107111,107112],{"class":38,"line":2504},[36,107113,102021],{"class":998},[36,107115,107116],{"class":38,"line":2509},[36,107117,96342],{"class":998},[36,107119,107120],{"class":38,"line":2514},[36,107121,194],{"emptyLinePlaceholder":193},[36,107123,107124],{"class":38,"line":2528},[36,107125,194],{"emptyLinePlaceholder":193},[36,107127,107128,107130,107132,107134,107136],{"class":38,"line":2533},[36,107129,32689],{"class":53},[36,107131,2723],{"class":2713},[36,107133,102042],{"class":49},[36,107135,96330],{"class":60},[36,107137,4488],{"class":49},[36,107139,107140,107142,107144,107146,107148],{"class":38,"line":3326},[36,107141,102051],{"class":49},[36,107143,54],{"class":53},[36,107145,102056],{"class":49},[36,107147,101958],{"class":60},[36,107149,75],{"class":49},[36,107151,107152,107154,107156],{"class":38,"line":3340},[36,107153,102065],{"class":49},[36,107155,54],{"class":53},[36,107157,102070],{"class":49},[36,107159,107160],{"class":38,"line":3348},[36,107161,194],{"emptyLinePlaceholder":193},[36,107163,107164,107166,107168,107170],{"class":38,"line":3353},[36,107165,32041],{"class":60},[36,107167,901],{"class":49},[36,107169,102083],{"class":998},[36,107171,102086],{"class":49},[36,107173,107174,107176,107178,107180],{"class":38,"line":3359},[36,107175,32041],{"class":60},[36,107177,901],{"class":49},[36,107179,102095],{"class":998},[36,107181,102098],{"class":49},[36,107183,107184,107186,107188,107190],{"class":38,"line":3365},[36,107185,32041],{"class":60},[36,107187,901],{"class":49},[36,107189,102107],{"class":998},[36,107191,102110],{"class":49},[36,107193,107194],{"class":38,"line":3370},[36,107195,194],{"emptyLinePlaceholder":193},[36,107197,107198,107200,107203,107205,107207],{"class":38,"line":8695},[36,107199,3850],{"class":53},[36,107201,107202],{"class":49}," model.nu ",[36,107204,21692],{"class":53},[36,107206,25863],{"class":60},[36,107208,4488],{"class":49},[36,107210,107211,107213,107215,107217,107220],{"class":38,"line":8719},[36,107212,104076],{"class":53},[36,107214,104079],{"class":60},[36,107216,901],{"class":49},[36,107218,107219],{"class":998},"\"expected exactly one actuator\"",[36,107221,75],{"class":49},[36,107223,107224],{"class":38,"line":8724},[36,107225,194],{"emptyLinePlaceholder":193},[36,107227,107228,107230,107232,107234,107236,107238,107241],{"class":38,"line":8730},[36,107229,3950],{"class":53},[36,107231,32358],{"class":49},[36,107233,26788],{"class":53},[36,107235,33185],{"class":60},[36,107237,901],{"class":49},[36,107239,107240],{"class":60},"2000",[36,107242,31528],{"class":49},[36,107244,107245,107248,107250,107252,107254],{"class":38,"line":8757},[36,107246,107247],{"class":49},"        t ",[36,107249,54],{"class":53},[36,107251,32358],{"class":49},[36,107253,1339],{"class":53},[36,107255,107256],{"class":49}," model.opt.timestep\n",[36,107258,107259,107262,107264,107266,107268,107271,107273,107276,107278,107280,107283,107285,107287,107289],{"class":38,"line":8762},[36,107260,107261],{"class":49},"        data.ctrl[",[36,107263,643],{"class":60},[36,107265,5192],{"class":49},[36,107267,54],{"class":53},[36,107269,107270],{"class":60}," 1.5",[36,107272,7265],{"class":53},[36,107274,107275],{"class":49}," math.sin(",[36,107277,105904],{"class":60},[36,107279,7265],{"class":53},[36,107281,107282],{"class":49}," math.pi ",[36,107284,1339],{"class":53},[36,107286,62609],{"class":60},[36,107288,7265],{"class":53},[36,107290,107291],{"class":49}," t)\n",[36,107293,107294],{"class":38,"line":8768},[36,107295,102160],{"class":49},[36,107297,107298],{"class":38,"line":8780},[36,107299,194],{"emptyLinePlaceholder":193},[36,107301,107302,107304,107306,107309],{"class":38,"line":8792},[36,107303,32041],{"class":60},[36,107305,901],{"class":49},[36,107307,107308],{"class":998},"\"time:\"",[36,107310,102122],{"class":49},[36,107312,107313,107315,107317,107320,107322,107324],{"class":38,"line":8804},[36,107314,32041],{"class":60},[36,107316,901],{"class":49},[36,107318,107319],{"class":998},"\"joint qpos:\"",[36,107321,105574],{"class":49},[36,107323,186],{"class":60},[36,107325,31239],{"class":49},[36,107327,107328,107330,107332,107335,107337,107339],{"class":38,"line":10463},[36,107329,32041],{"class":60},[36,107331,901],{"class":49},[36,107333,107334],{"class":998},"\"joint qvel:\"",[36,107336,105590],{"class":49},[36,107338,186],{"class":60},[36,107340,31239],{"class":49},[36,107342,107343,107345,107347,107350],{"class":38,"line":10488},[36,107344,32041],{"class":60},[36,107346,901],{"class":49},[36,107348,107349],{"class":998},"\"last ctrl:\"",[36,107351,107352],{"class":49},", data.ctrl.copy())\n",[36,107354,107355],{"class":38,"line":10511},[36,107356,194],{"emptyLinePlaceholder":193},[36,107358,107359],{"class":38,"line":10535},[36,107360,194],{"emptyLinePlaceholder":193},[36,107362,107363,107365,107367,107369,107371],{"class":38,"line":10540},[36,107364,2281],{"class":53},[36,107366,31962],{"class":60},[36,107368,102203],{"class":53},[36,107370,102206],{"class":998},[36,107372,4488],{"class":49},[36,107374,107375],{"class":38,"line":10545},[36,107376,102213],{"class":49},[14,107378,104214],{},[26,107380,107382],{"className":24566,"code":107381,"language":24568,"meta":31,"style":31},"touch ch4_joint_motor.py\n",[33,107383,107384],{"__ignoreMap":31},[36,107385,107386,107388],{"class":38,"line":39},[36,107387,101927],{"class":2713},[36,107389,107390],{"class":998}," ch4_joint_motor.py\n",[14,107392,102945],{},[26,107394,107396],{"className":24566,"code":107395,"language":24568,"meta":31,"style":31},"python ch4_joint_motor.py\n",[33,107397,107398],{"__ignoreMap":31},[36,107399,107400,107402],{"class":38,"line":39},[36,107401,30],{"class":2713},[36,107403,107390],{"class":998},[868,107405,102216],{"id":102216},[14,107407,107408],{},"检查 actuator 数量：",[26,107410,107412],{"className":28,"code":107411,"language":30,"meta":31,"style":31},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[33,107413,107414,107426],{"__ignoreMap":31},[36,107415,107416,107418,107420,107422,107424],{"class":38,"line":39},[36,107417,2281],{"class":53},[36,107419,107202],{"class":49},[36,107421,21692],{"class":53},[36,107423,25863],{"class":60},[36,107425,4488],{"class":49},[36,107427,107428,107430,107432,107434,107436],{"class":38,"line":46},[36,107429,104539],{"class":53},[36,107431,104079],{"class":60},[36,107433,901],{"class":49},[36,107435,107219],{"class":998},[36,107437,75],{"class":49},[14,107439,107440,107442,107443,107445],{},[33,107441,102802],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[33,107444,101720],{}," 长度应该是 1。",[14,107447,107448],{},"产生正弦控制信号：",[26,107450,107452],{"className":28,"code":107451,"language":30,"meta":31,"style":31},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[33,107453,107454],{"__ignoreMap":31},[36,107455,107456,107458,107460,107462,107464,107466,107468,107470,107472,107474,107476,107478,107480,107482],{"class":38,"line":39},[36,107457,106515],{"class":49},[36,107459,643],{"class":60},[36,107461,5192],{"class":49},[36,107463,54],{"class":53},[36,107465,107270],{"class":60},[36,107467,7265],{"class":53},[36,107469,107275],{"class":49},[36,107471,105904],{"class":60},[36,107473,7265],{"class":53},[36,107475,107282],{"class":49},[36,107477,1339],{"class":53},[36,107479,62609],{"class":60},[36,107481,7265],{"class":53},[36,107483,107291],{"class":49},[14,107485,107486],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,107488,102317],{},[26,107490,107491],{"className":28,"code":105149,"language":30,"meta":31,"style":31},[33,107492,107493],{"__ignoreMap":31},[36,107494,107495],{"class":38,"line":39},[36,107496,105149],{"class":49},[14,107498,107499],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[868,107501,102352],{"id":102352},[26,107503,107505],{"className":28,"code":107504,"language":30,"meta":31,"style":31},"import math\n",[33,107506,107507],{"__ignoreMap":31},[36,107508,107509,107511],{"class":38,"line":39},[36,107510,31135],{"class":53},[36,107512,106994],{"class":49},[14,107514,107515,107516,101662,107519,107522],{},"导入 Python 标准库里的数学模块。后面要用 ",[33,107517,107518],{},"math.sin",[33,107520,107521],{},"math.pi"," 生成周期变化的控制信号。",[26,107524,107525],{"className":28,"code":104330,"language":30,"meta":31,"style":31},[33,107526,107527,107533],{"__ignoreMap":31},[36,107528,107529,107531],{"class":38,"line":39},[36,107530,31135],{"class":53},[36,107532,101945],{"class":49},[36,107534,107535,107537,107539,107541],{"class":38,"line":46},[36,107536,31135],{"class":53},[36,107538,32122],{"class":49},[36,107540,32125],{"class":53},[36,107542,32128],{"class":49},[14,107544,107545],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[26,107547,107548],{"className":53809,"code":106831,"language":53811,"meta":31,"style":31},[33,107549,107550],{"__ignoreMap":31},[36,107551,107552,107554,107556,107558,107560,107562,107564,107566,107568,107570,107572,107574,107576,107578,107580],{"class":38,"line":39},[36,107553,1789],{"class":49},[36,107555,103600],{"class":52042},[36,107557,15664],{"class":2713},[36,107559,54],{"class":49},[36,107561,106663],{"class":998},[36,107563,54566],{"class":2713},[36,107565,54],{"class":49},[36,107567,106663],{"class":998},[36,107569,106672],{"class":2713},[36,107571,54],{"class":49},[36,107573,106677],{"class":998},[36,107575,106860],{"class":2713},[36,107577,54],{"class":49},[36,107579,106865],{"class":998},[36,107581,101788],{"class":49},[14,107583,107584,107585,107587,107588,107590,107591,107593],{},"这行定义关节。",[33,107586,106484],{}," 表示旋转关节。",[33,107589,106883],{}," 表示绕 y 轴旋转。",[33,107592,106889],{}," 表示有一点阻尼，运动不会完全无损耗。",[26,107595,107597],{"className":53809,"code":107596,"language":53811,"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,107598,107599],{"__ignoreMap":31},[36,107600,107601,107603,107605,107607,107609,107612,107614,107616,107619,107622,107624,107627,107629,107631,107633,107635,107637,107640],{"class":38,"line":39},[36,107602,1789],{"class":49},[36,107604,101764],{"class":52042},[36,107606,15664],{"class":2713},[36,107608,54],{"class":49},[36,107610,107611],{"class":998},"\"link_geom\"",[36,107613,54566],{"class":2713},[36,107615,54],{"class":49},[36,107617,107618],{"class":998},"\"capsule\"",[36,107620,107621],{"class":2713}," fromto",[36,107623,54],{"class":49},[36,107625,107626],{"class":998},"\"0 0 0 0 0 0.5\"",[36,107628,101780],{"class":2713},[36,107630,54],{"class":49},[36,107632,104422],{"class":998},[36,107634,102645],{"class":2713},[36,107636,54],{"class":49},[36,107638,107639],{"class":998},"\"0.5\"",[36,107641,101788],{"class":49},[14,107643,107644,107645,107647,107648,107650,107651,107654,107655,29130,107658,107660],{},"这行定义摆杆的形状。",[33,107646,103809],{}," 是胶囊体，适合表示杆子。",[33,107649,103820],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[33,107652,107653],{},"(0,0,0)"," 延伸到 ",[33,107656,107657],{},"(0,0,0.5)",[33,107659,103814],{}," 是半径。",[26,107662,107663],{"className":53809,"code":106897,"language":53811,"meta":31,"style":31},[33,107664,107665],{"__ignoreMap":31},[36,107666,107667,107669,107671,107673,107675,107677,107679,107681,107683,107685,107687,107689,107691,107693,107695,107697,107699,107701],{"class":38,"line":39},[36,107668,1789],{"class":49},[36,107670,106718],{"class":52042},[36,107672,15664],{"class":2713},[36,107674,54],{"class":49},[36,107676,106725],{"class":998},[36,107678,106728],{"class":2713},[36,107680,54],{"class":49},[36,107682,106663],{"class":998},[36,107684,106735],{"class":2713},[36,107686,54],{"class":49},[36,107688,4427],{"class":998},[36,107690,106742],{"class":2713},[36,107692,54],{"class":49},[36,107694,106747],{"class":998},[36,107696,106750],{"class":2713},[36,107698,54],{"class":49},[36,107700,106755],{"class":998},[36,107702,101788],{"class":49},[14,107704,107705,107706,107708,107709,107712,107713,107715],{},"这行定义电机。它作用在 ",[33,107707,106484],{}," 关节上。",[33,107710,107711],{},"gear"," 可以理解成放大倍数。",[33,107714,106499],{}," 限制控制输入范围。",[26,107717,107718],{"className":28,"code":107411,"language":30,"meta":31,"style":31},[33,107719,107720,107732],{"__ignoreMap":31},[36,107721,107722,107724,107726,107728,107730],{"class":38,"line":39},[36,107723,2281],{"class":53},[36,107725,107202],{"class":49},[36,107727,21692],{"class":53},[36,107729,25863],{"class":60},[36,107731,4488],{"class":49},[36,107733,107734,107736,107738,107740,107742],{"class":38,"line":46},[36,107735,104539],{"class":53},[36,107737,104079],{"class":60},[36,107739,901],{"class":49},[36,107741,107219],{"class":998},[36,107743,75],{"class":49},[14,107745,107746,107748],{},[33,107747,102802],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[26,107750,107752],{"className":28,"code":107751,"language":30,"meta":31,"style":31},"for step in range(2000):\n",[33,107753,107754],{"__ignoreMap":31},[36,107755,107756,107758,107760,107762,107764,107766,107768],{"class":38,"line":39},[36,107757,3774],{"class":53},[36,107759,32358],{"class":49},[36,107761,26788],{"class":53},[36,107763,33185],{"class":60},[36,107765,901],{"class":49},[36,107767,107240],{"class":60},[36,107769,31528],{"class":49},[14,107771,107772,107773,107775,107776,107779],{},"循环 2000 步。这里没有用 ",[33,107774,1871],{},"，而是用 ",[33,107777,107778],{},"step","，因为后面要用当前步数计算时间。",[26,107781,107783],{"className":28,"code":107782,"language":30,"meta":31,"style":31},"t = step * model.opt.timestep\n",[33,107784,107785],{"__ignoreMap":31},[36,107786,107787,107790,107792,107794,107796],{"class":38,"line":39},[36,107788,107789],{"class":49},"t ",[36,107791,54],{"class":53},[36,107793,32358],{"class":49},[36,107795,1339],{"class":53},[36,107797,107256],{"class":49},[14,107799,107800],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[26,107802,107803],{"className":28,"code":107451,"language":30,"meta":31,"style":31},[33,107804,107805],{"__ignoreMap":31},[36,107806,107807,107809,107811,107813,107815,107817,107819,107821,107823,107825,107827,107829,107831,107833],{"class":38,"line":39},[36,107808,106515],{"class":49},[36,107810,643],{"class":60},[36,107812,5192],{"class":49},[36,107814,54],{"class":53},[36,107816,107270],{"class":60},[36,107818,7265],{"class":53},[36,107820,107275],{"class":49},[36,107822,105904],{"class":60},[36,107824,7265],{"class":53},[36,107826,107282],{"class":49},[36,107828,1339],{"class":53},[36,107830,62609],{"class":60},[36,107832,7265],{"class":53},[36,107834,107291],{"class":49},[14,107836,107837],{},"这行给电机输入一个正弦波。拆开看：",[851,107839,107840,107846,107852],{},[854,107841,107842,107845],{},[33,107843,107844],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[854,107847,107848,107851],{},[33,107849,107850],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[854,107853,107854,107857],{},[33,107855,107856],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107859,107860],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[26,107862,107864],{"className":28,"code":107863,"language":30,"meta":31,"style":31},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[33,107865,107866],{"__ignoreMap":31},[36,107867,107868,107870,107872,107874,107876,107878],{"class":38,"line":39},[36,107869,199],{"class":60},[36,107871,901],{"class":49},[36,107873,107319],{"class":998},[36,107875,105574],{"class":49},[36,107877,186],{"class":60},[36,107879,31239],{"class":49},[14,107881,107882,107883,107885],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[33,107884,101714],{}," 只有一个数。",[21,107887,102960],{"id":102959},[14,107889,107890],{},"输出类似:",[26,107892,107895],{"className":107893,"code":107894,"language":5935,"meta":31},[5933],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[33,107896,107894],{"__ignoreMap":31},[14,107898,107899,107900,107902],{},"这里 ",[33,107901,106770],{}," 是电机输入。",[14,107904,107905,107908,107909,107912],{},[33,107906,107907],{},"joint qpos"," 是关节角度，单位通常是弧度。",[33,107910,107911],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107914,107915],{},"角度单位提示：",[26,107917,107920],{"className":107918,"code":107919,"language":5935,"meta":31},[5933],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[33,107921,107919],{"__ignoreMap":31},[14,107923,107924,107925,107927,107928,107930],{},"如果你看到 ",[33,107926,104674],{}," 是 ",[33,107929,36071],{},"，大约就是 28.6 度。",[21,107932,102992],{"id":102991},[851,107934,107935,107942,107945,107952,107955,107963,107971],{},[854,107936,103055,107937,103058,107939,29130],{},[33,107938,106955],{},[33,107940,107941],{},"gear=\"5\"",[854,107943,107944],{},"重新运行，观察关节运动是否更剧烈。",[854,107946,103055,107947,103058,107949,29130],{},[33,107948,106499],{},[33,107950,107951],{},"-0.2 0.2",[854,107953,107954],{},"重新运行，观察控制能力是否变弱。",[854,107956,107957,107958,107960,107961,29130],{},"去掉 actuator，确认 ",[33,107959,102802],{}," 变成 ",[33,107962,643],{},[854,107964,103055,107965,103058,107967,107970],{},[33,107966,106889],{},[33,107968,107969],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[854,107972,103055,107973,103058,107975,107978],{},[33,107974,106883],{},[33,107976,107977],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[21,107980,103097],{"id":103096},[868,107982,107984],{"id":107983},"indexerror-index-0-is-out-of-bounds",[33,107985,107986],{},"IndexError: index 0 is out of bounds",[14,107988,107989,107990,107992],{},"原因是 ",[33,107991,106636],{},"，没有 actuator。",[868,107994,107995],{"id":107995},"关节几乎不动",[14,107997,107998],{},"可能原因:",[851,108000,108001,108006,108010,108016],{},[854,108002,108003,108005],{},[33,108004,107711],{}," 太小",[854,108007,108008,108005],{},[33,108009,106499],{},[854,108011,108012,108015],{},[33,108013,108014],{},"damping"," 太大",[854,108017,108018],{},"重力方向导致运动不明显",[868,108020,108021],{"id":108021},"模型编译失败",[14,108023,108024,108025,108027],{},"检查 actuator 引用的 ",[33,108026,106946],{}," 是否存在，joint 名称是否拼写一致。",[868,108029,108031,108033],{"id":108030},"datactrl0-写了但没有效果",[33,108032,106770],{}," 写了但没有效果",[14,108035,103219],{},[851,108037,108038,108043,108046,108051,108056],{},[854,108039,108040,108042],{},[33,108041,102802],{}," 是否大于 0。",[854,108044,108045],{},"motor 是否引用了正确 joint。",[854,108047,108048,108050],{},[33,108049,107711],{}," 是否太小。",[854,108052,108053,108055],{},[33,108054,106499],{}," 是否把输入限制得太小。",[854,108057,108058],{},"body 是否真的有可动 joint。",[868,108060,108061],{"id":108061},"控制输入超过范围会怎样",[14,108063,108064],{},"如果设置了：",[26,108066,108068],{"className":53809,"code":108067,"language":53811,"meta":31,"style":31},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[33,108069,108070],{"__ignoreMap":31},[36,108071,108072],{"class":38,"line":39},[36,108073,108067],{"class":49},[14,108075,108076],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[26,108078,108080],{"className":28,"code":108079,"language":30,"meta":31,"style":31},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[33,108081,108082,108102],{"__ignoreMap":31},[36,108083,108084,108087,108089,108092,108094,108096,108098,108100],{"class":38,"line":39},[36,108085,108086],{"class":49},"action ",[36,108088,54],{"class":53},[36,108090,108091],{"class":49}," np.clip(action, ",[36,108093,1414],{"class":53},[36,108095,105904],{"class":60},[36,108097,154],{"class":49},[36,108099,105904],{"class":60},[36,108101,75],{"class":49},[36,108103,108104,108106,108108,108110,108112],{"class":38,"line":46},[36,108105,106515],{"class":49},[36,108107,643],{"class":60},[36,108109,5192],{"class":49},[36,108111,54],{"class":53},[36,108113,108114],{"class":49}," action\n",[21,108116,103251],{"id":103250},[14,108118,108119],{},"这一章建立了控制任务的基本形式：",[26,108121,108124],{"className":108122,"code":108123,"language":5935,"meta":31},[5933],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[33,108125,108123],{"__ignoreMap":31},[14,108127,108128],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[807,108130,108131],{},"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":46,"depth":46,"links":108133},[108134,108135,108136,108141,108145,108146,108147,108155],{"id":101290,"depth":46,"text":101291},{"id":101413,"depth":46,"text":101414},{"id":101688,"depth":46,"text":101689,"children":108137},[108138,108139,108140],{"id":106777,"depth":78,"text":106778},{"id":106827,"depth":78,"text":106828},{"id":106893,"depth":78,"text":106894},{"id":101896,"depth":46,"text":101897,"children":108142},[108143,108144],{"id":102216,"depth":78,"text":102216},{"id":102352,"depth":78,"text":102352},{"id":102959,"depth":46,"text":102960},{"id":102991,"depth":46,"text":102992},{"id":103096,"depth":46,"text":103097,"children":108148},[108149,108150,108151,108152,108154],{"id":107983,"depth":78,"text":107986},{"id":107995,"depth":78,"text":107995},{"id":108021,"depth":78,"text":108021},{"id":108030,"depth":78,"text":108153},"data.ctrl[0] 写了但没有效果",{"id":108061,"depth":78,"text":108061},{"id":103250,"depth":46,"text":103251},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106465,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108162,"title":108163,"body":108164,"description":31,"extension":824,"meta":110073,"navigation":193,"path":110074,"seo":110075,"stem":110076,"__hash__":110077},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108165,"toc":110049},[108166,108169,108171,108174,108182,108185,108202,108205,108230,108233,108279,108281,108283,108338,108340,108359,108361,108404,108407,108424,108427,108443,108453,108460,108462,108465,108468,108502,108505,108553,108557,108560,108574,108583,108587,108590,108615,108618,108622,108635,108638,108644,108647,108662,108664,108667,108927,108929,108941,108944,109256,109258,109270,109272,109275,109290,109295,109298,109320,109323,109326,109360,109363,109367,109378,109381,109398,109401,109415,109422,109442,109449,109463,109466,109478,109493,109513,109516,109538,109541,109545,109560,109571,109586,109589,109619,109635,109664,109672,109696,109699,109717,109727,109739,109746,109755,109761,109770,109773,109775,109784,109787,109802,109804,109807,109818,109821,109832,109835,109853,109855,109872,109875,109903,109905,109909,109912,109942,109948,109951,109955,109963,109966,109968,109989,109992,109995,110011,110014,110030,110032,110035,110046],[10,108167,108163],{"id":108168},"_5viewer-可视化与-renderer-离屏渲染",[21,108170,101291],{"id":101290},[14,108172,108173],{},"本章掌握两类可视化方式:",[851,108175,108176,108179],{},[854,108177,108178],{},"交互式 viewer: 适合人工观察仿真",[854,108180,108181],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,108183,108184],{},"使用官方接口:",[26,108186,108188],{"className":28,"code":108187,"language":30,"meta":31,"style":31},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[33,108189,108190,108197],{"__ignoreMap":31},[36,108191,108192,108194],{"class":38,"line":39},[36,108193,31135],{"class":53},[36,108195,108196],{"class":49}," mujoco.viewer\n",[36,108198,108199],{"class":38,"line":46},[36,108200,108201],{"class":49},"mujoco.viewer.launch_passive(model, data)\n",[14,108203,108204],{},"以及:",[26,108206,108208],{"className":28,"code":108207,"language":30,"meta":31,"style":31},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[33,108209,108210,108220],{"__ignoreMap":31},[36,108211,108212,108215,108217],{"class":38,"line":39},[36,108213,108214],{"class":49},"renderer ",[36,108216,54],{"class":53},[36,108218,108219],{"class":49}," mujoco.Renderer(model)\n",[36,108221,108222,108225,108227],{"class":38,"line":46},[36,108223,108224],{"class":49},"image ",[36,108226,54],{"class":53},[36,108228,108229],{"class":49}," renderer.render()\n",[14,108231,108232],{},"新手建议先理解二者区别：",[1031,108234,108235,108251],{},[1034,108236,108237],{},[1037,108238,108239,108242,108245,108248],{},[1040,108240,108241],{"align":24480},"工具",[1040,108243,108244],{"align":24480},"用途",[1040,108246,108247],{"align":24480},"是否打开窗口",[1040,108249,108250],{"align":24480},"常见场景",[1078,108252,108253,108266],{},[1037,108254,108255,108258,108261,108263],{},[1083,108256,108257],{"align":24480},"Viewer",[1083,108259,108260],{"align":24480},"人眼实时观察仿真",[1083,108262,105309],{"align":24480},[1083,108264,108265],{"align":24480},"调试模型、看控制效果",[1037,108267,108268,108271,108274,108276],{},[1083,108269,108270],{"align":24480},"Renderer",[1083,108272,108273],{"align":24480},"生成图像数组",[1083,108275,105322],{"align":24480},[1083,108277,108278],{"align":24480},"保存图片、训练视觉策略、服务器批量采集",[21,108280,101414],{"id":101413},[14,108282,101417],{},[26,108284,108286],{"className":24566,"code":108285,"language":24568,"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,108287,108288,108300,108310,108318,108326],{"__ignoreMap":31},[36,108289,108290,108292,108294,108296,108298],{"class":38,"line":39},[36,108291,25321],{"class":2713},[36,108293,27060],{"class":998},[36,108295,24578],{"class":998},[36,108297,27145],{"class":60},[36,108299,25423],{"class":60},[36,108301,108302,108304,108306,108308],{"class":38,"line":46},[36,108303,101452],{"class":998},[36,108305,101455],{"class":998},[36,108307,101458],{"class":998},[36,108309,25423],{"class":60},[36,108311,108312,108314,108316],{"class":38,"line":78},[36,108313,101465],{"class":998},[36,108315,101468],{"class":998},[36,108317,25423],{"class":60},[36,108319,108320,108322,108324],{"class":38,"line":125},[36,108321,101475],{"class":998},[36,108323,101478],{"class":998},[36,108325,25423],{"class":60},[36,108327,108328,108330,108332,108334,108336],{"class":38,"line":131},[36,108329,101485],{"class":998},[36,108331,101488],{"class":998},[36,108333,101491],{"class":998},[36,108335,101494],{"class":998},[36,108337,103160],{"class":998},[14,108339,103463],{},[26,108341,108343],{"className":24566,"code":108342,"language":24568,"meta":31,"style":31},"pip install \"mujoco>=2.3\" numpy pillow\n",[33,108344,108345],{"__ignoreMap":31},[36,108346,108347,108349,108351,108353,108356],{"class":38,"line":39},[36,108348,24575],{"class":2713},[36,108350,24578],{"class":998},[36,108352,101574],{"class":998},[36,108354,108355],{"class":998}," numpy",[36,108357,108358],{"class":998}," pillow\n",[14,108360,103480],{},[26,108362,108364],{"className":24566,"code":108363,"language":24568,"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,108365,108366,108383,108392],{"__ignoreMap":31},[36,108367,108368,108370,108372,108374,108377,108379,108381],{"class":38,"line":39},[36,108369,31075],{"class":2713},[36,108371,29921],{"class":998},[36,108373,25860],{"class":60},[36,108375,108376],{"class":998}," mujoco-render",[36,108378,101619],{"class":998},[36,108380,101622],{"class":60},[36,108382,101625],{"class":60},[36,108384,108385,108387,108389],{"class":38,"line":46},[36,108386,31075],{"class":2713},[36,108388,101632],{"class":998},[36,108390,108391],{"class":998}," mujoco-render\n",[36,108393,108394,108396,108398,108400,108402],{"class":38,"line":78},[36,108395,24575],{"class":2713},[36,108397,24578],{"class":998},[36,108399,101574],{"class":998},[36,108401,108355],{"class":998},[36,108403,108358],{"class":998},[14,108405,108406],{},"离屏渲染后端:",[26,108408,108410],{"className":24566,"code":108409,"language":24568,"meta":31,"style":31},"export MUJOCO_GL=egl\n",[33,108411,108412],{"__ignoreMap":31},[36,108413,108414,108416,108419,108421],{"class":38,"line":39},[36,108415,25787],{"class":53},[36,108417,108418],{"class":49}," MUJOCO_GL",[36,108420,54],{"class":53},[36,108422,108423],{"class":49},"egl\n",[14,108425,108426],{},"或:",[26,108428,108430],{"className":24566,"code":108429,"language":24568,"meta":31,"style":31},"export MUJOCO_GL=osmesa\n",[33,108431,108432],{"__ignoreMap":31},[36,108433,108434,108436,108438,108440],{"class":38,"line":39},[36,108435,25787],{"class":53},[36,108437,108418],{"class":49},[36,108439,54],{"class":53},[36,108441,108442],{"class":49},"osmesa\n",[14,108444,108445,108446,108449,108450,29130],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[33,108447,108448],{},"egl"," 失败，再尝试 ",[33,108451,108452],{},"osmesa",[14,108454,108455,108456,108459],{},"如果你在本机桌面环境运行，通常先不要设置 ",[33,108457,108458],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[21,108461,101689],{"id":101688},[14,108463,108464],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,108466,108467],{},"典型 viewer 流程:",[26,108469,108471],{"className":28,"code":108470,"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,108472,108473,108486,108493,108497],{"__ignoreMap":31},[36,108474,108475,108478,108481,108483],{"class":38,"line":39},[36,108476,108477],{"class":53},"with",[36,108479,108480],{"class":49}," mujoco.viewer.launch_passive(model, data) ",[36,108482,32125],{"class":53},[36,108484,108485],{"class":49}," viewer:\n",[36,108487,108488,108490],{"class":38,"line":46},[36,108489,3001],{"class":53},[36,108491,108492],{"class":49}," viewer.is_running():\n",[36,108494,108495],{"class":38,"line":78},[36,108496,102160],{"class":49},[36,108498,108499],{"class":38,"line":125},[36,108500,108501],{"class":49},"        viewer.sync()\n",[14,108503,108504],{},"典型 renderer 流程:",[26,108506,108508],{"className":28,"code":108507,"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,108509,108510,108536,108540,108545],{"__ignoreMap":31},[36,108511,108512,108514,108516,108519,108521,108523,108525,108527,108529,108531,108534],{"class":38,"line":39},[36,108513,108214],{"class":49},[36,108515,54],{"class":53},[36,108517,108518],{"class":49}," mujoco.Renderer(model, ",[36,108520,25726],{"class":416},[36,108522,54],{"class":53},[36,108524,43084],{"class":60},[36,108526,154],{"class":49},[36,108528,25722],{"class":416},[36,108530,54],{"class":53},[36,108532,108533],{"class":60},"640",[36,108535,75],{"class":49},[36,108537,108538],{"class":38,"line":46},[36,108539,105149],{"class":49},[36,108541,108542],{"class":38,"line":78},[36,108543,108544],{"class":49},"renderer.update_scene(data)\n",[36,108546,108547,108549,108551],{"class":38,"line":125},[36,108548,108224],{"class":49},[36,108550,54],{"class":53},[36,108552,108229],{"class":49},[868,108554,108556],{"id":108555},"viewer-的同步逻辑","viewer 的同步逻辑",[14,108558,108559],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[26,108561,108563],{"className":28,"code":108562,"language":30,"meta":31,"style":31},"mujoco.mj_step(model, data)\nviewer.sync()\n",[33,108564,108565,108569],{"__ignoreMap":31},[36,108566,108567],{"class":38,"line":39},[36,108568,105149],{"class":49},[36,108570,108571],{"class":38,"line":46},[36,108572,108573],{"class":49},"viewer.sync()\n",[14,108575,108576,108578,108579,108582],{},[33,108577,101859],{}," 负责算物理，",[33,108580,108581],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[868,108584,108586],{"id":108585},"为什么要-sleep","为什么要 sleep",[14,108588,108589],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[26,108591,108593],{"className":28,"code":108592,"language":30,"meta":31,"style":31},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[33,108594,108595],{"__ignoreMap":31},[36,108596,108597,108600,108602,108605,108607,108610,108612],{"class":38,"line":39},[36,108598,108599],{"class":49},"sleep_time ",[36,108601,54],{"class":53},[36,108603,108604],{"class":49}," model.opt.timestep ",[36,108606,1414],{"class":53},[36,108608,108609],{"class":49}," (time.time() ",[36,108611,1414],{"class":53},[36,108613,108614],{"class":49}," step_start)\n",[14,108616,108617],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[868,108619,108621],{"id":108620},"renderer-输出是什么","renderer 输出是什么",[26,108623,108625],{"className":28,"code":108624,"language":30,"meta":31,"style":31},"image = renderer.render()\n",[33,108626,108627],{"__ignoreMap":31},[36,108628,108629,108631,108633],{"class":38,"line":39},[36,108630,108224],{"class":49},[36,108632,54],{"class":53},[36,108634,108229],{"class":49},[14,108636,108637],{},"得到的是 NumPy 数组，形状通常是：",[26,108639,108642],{"className":108640,"code":108641,"language":5935,"meta":31},[5933],"(height, width, 3)\n",[33,108643,108641],{"__ignoreMap":31},[14,108645,108646],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[26,108648,108650],{"className":28,"code":108649,"language":30,"meta":31,"style":31},"Image.fromarray(image).save(\"render_output.png\")\n",[33,108651,108652],{"__ignoreMap":31},[36,108653,108654,108657,108660],{"class":38,"line":39},[36,108655,108656],{"class":49},"Image.fromarray(image).save(",[36,108658,108659],{"class":998},"\"render_output.png\"",[36,108661,75],{"class":49},[21,108663,101897],{"id":101896},[14,108665,108666],{},"交互式 Viewer:",[26,108668,108670],{"className":28,"code":108669,"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,108671,108672,108678,108682,108688,108694,108698,108702,108710,108715,108719,108723,108727,108732,108737,108741,108745,108749,108754,108758,108762,108766,108770,108774,108778,108790,108802,108810,108814,108824,108844,108854,108859,108864,108868,108885,108898,108903,108907,108911,108923],{"__ignoreMap":31},[36,108673,108674,108676],{"class":38,"line":39},[36,108675,31135],{"class":53},[36,108677,32571],{"class":49},[36,108679,108680],{"class":38,"line":46},[36,108681,194],{"emptyLinePlaceholder":193},[36,108683,108684,108686],{"class":38,"line":78},[36,108685,31135],{"class":53},[36,108687,101945],{"class":49},[36,108689,108690,108692],{"class":38,"line":125},[36,108691,31135],{"class":53},[36,108693,108196],{"class":49},[36,108695,108696],{"class":38,"line":131},[36,108697,194],{"emptyLinePlaceholder":193},[36,108699,108700],{"class":38,"line":396},[36,108701,194],{"emptyLinePlaceholder":193},[36,108703,108704,108706,108708],{"class":38,"line":407},[36,108705,101958],{"class":60},[36,108707,14308],{"class":53},[36,108709,101963],{"class":998},[36,108711,108712],{"class":38,"line":2061},[36,108713,108714],{"class":998},"\u003Cmujoco model=\"viewer_demo\">\n",[36,108716,108717],{"class":38,"line":2067},[36,108718,101973],{"class":998},[36,108720,108721],{"class":38,"line":2079},[36,108722,194],{"emptyLinePlaceholder":193},[36,108724,108725],{"class":38,"line":2362},[36,108726,101982],{"class":998},[36,108728,108729],{"class":38,"line":2367},[36,108730,108731],{"class":998},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[36,108733,108734],{"class":38,"line":2373},[36,108735,108736],{"class":998},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[36,108738,108739],{"class":38,"line":2378},[36,108740,194],{"emptyLinePlaceholder":193},[36,108742,108743],{"class":38,"line":2392},[36,108744,101996],{"class":998},[36,108746,108747],{"class":38,"line":2397},[36,108748,102001],{"class":998},[36,108750,108751],{"class":38,"line":2403},[36,108752,108753],{"class":998},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[36,108755,108756],{"class":38,"line":2424},[36,108757,102011],{"class":998},[36,108759,108760],{"class":38,"line":2429},[36,108761,102016],{"class":998},[36,108763,108764],{"class":38,"line":2443},[36,108765,102021],{"class":998},[36,108767,108768],{"class":38,"line":2448},[36,108769,96342],{"class":998},[36,108771,108772],{"class":38,"line":2477},[36,108773,194],{"emptyLinePlaceholder":193},[36,108775,108776],{"class":38,"line":2482},[36,108777,194],{"emptyLinePlaceholder":193},[36,108779,108780,108782,108784,108786,108788],{"class":38,"line":2499},[36,108781,32689],{"class":53},[36,108783,2723],{"class":2713},[36,108785,102042],{"class":49},[36,108787,96330],{"class":60},[36,108789,4488],{"class":49},[36,108791,108792,108794,108796,108798,108800],{"class":38,"line":2504},[36,108793,102051],{"class":49},[36,108795,54],{"class":53},[36,108797,102056],{"class":49},[36,108799,101958],{"class":60},[36,108801,75],{"class":49},[36,108803,108804,108806,108808],{"class":38,"line":2509},[36,108805,102065],{"class":49},[36,108807,54],{"class":53},[36,108809,102070],{"class":49},[36,108811,108812],{"class":38,"line":2514},[36,108813,194],{"emptyLinePlaceholder":193},[36,108815,108816,108818,108820,108822],{"class":38,"line":2528},[36,108817,34920],{"class":53},[36,108819,108480],{"class":49},[36,108821,32125],{"class":53},[36,108823,108485],{"class":49},[36,108825,108826,108829,108832,108834,108837,108839,108842],{"class":38,"line":2533},[36,108827,108828],{"class":53},"        while",[36,108830,108831],{"class":49}," viewer.is_running() ",[36,108833,31204],{"class":53},[36,108835,108836],{"class":49}," data.time ",[36,108838,1789],{"class":53},[36,108840,108841],{"class":60}," 5.0",[36,108843,4488],{"class":49},[36,108845,108846,108849,108851],{"class":38,"line":3326},[36,108847,108848],{"class":49},"            step_start ",[36,108850,54],{"class":53},[36,108852,108853],{"class":49}," time.time()\n",[36,108855,108856],{"class":38,"line":3340},[36,108857,108858],{"class":49},"            mujoco.mj_step(model, data)\n",[36,108860,108861],{"class":38,"line":3348},[36,108862,108863],{"class":49},"            viewer.sync()\n",[36,108865,108866],{"class":38,"line":3353},[36,108867,194],{"emptyLinePlaceholder":193},[36,108869,108870,108873,108875,108877,108879,108881,108883],{"class":38,"line":3359},[36,108871,108872],{"class":49},"            sleep_time ",[36,108874,54],{"class":53},[36,108876,108604],{"class":49},[36,108878,1414],{"class":53},[36,108880,108609],{"class":49},[36,108882,1414],{"class":53},[36,108884,108614],{"class":49},[36,108886,108887,108889,108892,108894,108896],{"class":38,"line":3365},[36,108888,5391],{"class":53},[36,108890,108891],{"class":49}," sleep_time ",[36,108893,1839],{"class":53},[36,108895,4842],{"class":60},[36,108897,4488],{"class":49},[36,108899,108900],{"class":38,"line":3370},[36,108901,108902],{"class":49},"                time.sleep(sleep_time)\n",[36,108904,108905],{"class":38,"line":8695},[36,108906,194],{"emptyLinePlaceholder":193},[36,108908,108909],{"class":38,"line":8719},[36,108910,194],{"emptyLinePlaceholder":193},[36,108912,108913,108915,108917,108919,108921],{"class":38,"line":8724},[36,108914,2281],{"class":53},[36,108916,31962],{"class":60},[36,108918,102203],{"class":53},[36,108920,102206],{"class":998},[36,108922,4488],{"class":49},[36,108924,108925],{"class":38,"line":8730},[36,108926,102213],{"class":49},[14,108928,104214],{},[26,108930,108932],{"className":24566,"code":108931,"language":24568,"meta":31,"style":31},"touch ch5_viewer.py\n",[33,108933,108934],{"__ignoreMap":31},[36,108935,108936,108938],{"class":38,"line":39},[36,108937,101927],{"class":2713},[36,108939,108940],{"class":998}," ch5_viewer.py\n",[14,108942,108943],{},"离屏 Renderer 保存图片:",[26,108945,108947],{"className":28,"code":108946,"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,108948,108949,108961,108965,108971,108981,108985,108989,108997,109002,109006,109010,109014,109018,109023,109027,109031,109035,109039,109043,109047,109051,109055,109059,109063,109067,109079,109091,109099,109124,109128,109144,109148,109152,109167,109176,109180,109194,109199,109204,109208,109220,109232,109236,109240,109252],{"__ignoreMap":31},[36,108950,108951,108953,108956,108958],{"class":38,"line":39},[36,108952,31479],{"class":53},[36,108954,108955],{"class":49}," pathlib ",[36,108957,31135],{"class":53},[36,108959,108960],{"class":49}," Path\n",[36,108962,108963],{"class":38,"line":46},[36,108964,194],{"emptyLinePlaceholder":193},[36,108966,108967,108969],{"class":38,"line":78},[36,108968,31135],{"class":53},[36,108970,101945],{"class":49},[36,108972,108973,108975,108977,108979],{"class":38,"line":125},[36,108974,31479],{"class":53},[36,108976,48005],{"class":60},[36,108978,48008],{"class":53},[36,108980,48011],{"class":49},[36,108982,108983],{"class":38,"line":131},[36,108984,194],{"emptyLinePlaceholder":193},[36,108986,108987],{"class":38,"line":396},[36,108988,194],{"emptyLinePlaceholder":193},[36,108990,108991,108993,108995],{"class":38,"line":407},[36,108992,101958],{"class":60},[36,108994,14308],{"class":53},[36,108996,101963],{"class":998},[36,108998,108999],{"class":38,"line":2061},[36,109000,109001],{"class":998},"\u003Cmujoco model=\"renderer_demo\">\n",[36,109003,109004],{"class":38,"line":2067},[36,109005,101973],{"class":998},[36,109007,109008],{"class":38,"line":2079},[36,109009,194],{"emptyLinePlaceholder":193},[36,109011,109012],{"class":38,"line":2362},[36,109013,101982],{"class":998},[36,109015,109016],{"class":38,"line":2367},[36,109017,108731],{"class":998},[36,109019,109020],{"class":38,"line":2373},[36,109021,109022],{"class":998},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[36,109024,109025],{"class":38,"line":2378},[36,109026,108736],{"class":998},[36,109028,109029],{"class":38,"line":2392},[36,109030,194],{"emptyLinePlaceholder":193},[36,109032,109033],{"class":38,"line":2397},[36,109034,101996],{"class":998},[36,109036,109037],{"class":38,"line":2403},[36,109038,102001],{"class":998},[36,109040,109041],{"class":38,"line":2424},[36,109042,108753],{"class":998},[36,109044,109045],{"class":38,"line":2429},[36,109046,102011],{"class":998},[36,109048,109049],{"class":38,"line":2443},[36,109050,102016],{"class":998},[36,109052,109053],{"class":38,"line":2448},[36,109054,102021],{"class":998},[36,109056,109057],{"class":38,"line":2477},[36,109058,96342],{"class":998},[36,109060,109061],{"class":38,"line":2482},[36,109062,194],{"emptyLinePlaceholder":193},[36,109064,109065],{"class":38,"line":2499},[36,109066,194],{"emptyLinePlaceholder":193},[36,109068,109069,109071,109073,109075,109077],{"class":38,"line":2504},[36,109070,32689],{"class":53},[36,109072,2723],{"class":2713},[36,109074,102042],{"class":49},[36,109076,96330],{"class":60},[36,109078,4488],{"class":49},[36,109080,109081,109083,109085,109087,109089],{"class":38,"line":2509},[36,109082,102051],{"class":49},[36,109084,54],{"class":53},[36,109086,102056],{"class":49},[36,109088,101958],{"class":60},[36,109090,75],{"class":49},[36,109092,109093,109095,109097],{"class":38,"line":2514},[36,109094,102065],{"class":49},[36,109096,54],{"class":53},[36,109098,102070],{"class":49},[36,109100,109101,109104,109106,109108,109110,109112,109114,109116,109118,109120,109122],{"class":38,"line":2528},[36,109102,109103],{"class":49},"    renderer ",[36,109105,54],{"class":53},[36,109107,108518],{"class":49},[36,109109,25726],{"class":416},[36,109111,54],{"class":53},[36,109113,43084],{"class":60},[36,109115,154],{"class":49},[36,109117,25722],{"class":416},[36,109119,54],{"class":53},[36,109121,108533],{"class":60},[36,109123,75],{"class":49},[36,109125,109126],{"class":38,"line":2533},[36,109127,194],{"emptyLinePlaceholder":193},[36,109129,109130,109132,109134,109136,109138,109140,109142],{"class":38,"line":3326},[36,109131,3950],{"class":53},[36,109133,102145],{"class":49},[36,109135,26788],{"class":53},[36,109137,33185],{"class":60},[36,109139,901],{"class":49},[36,109141,67],{"class":60},[36,109143,31528],{"class":49},[36,109145,109146],{"class":38,"line":3340},[36,109147,102160],{"class":49},[36,109149,109150],{"class":38,"line":3348},[36,109151,194],{"emptyLinePlaceholder":193},[36,109153,109154,109157,109160,109162,109165],{"class":38,"line":3353},[36,109155,109156],{"class":49},"    renderer.update_scene(data, ",[36,109158,109159],{"class":416},"camera",[36,109161,54],{"class":53},[36,109163,109164],{"class":998},"\"fixed_camera\"",[36,109166,75],{"class":49},[36,109168,109169,109172,109174],{"class":38,"line":3359},[36,109170,109171],{"class":49},"    image ",[36,109173,54],{"class":53},[36,109175,108229],{"class":49},[36,109177,109178],{"class":38,"line":3365},[36,109179,194],{"emptyLinePlaceholder":193},[36,109181,109182,109185,109187,109190,109192],{"class":38,"line":3370},[36,109183,109184],{"class":49},"    output_path ",[36,109186,54],{"class":53},[36,109188,109189],{"class":49}," Path(",[36,109191,108659],{"class":998},[36,109193,75],{"class":49},[36,109195,109196],{"class":38,"line":8695},[36,109197,109198],{"class":49},"    Image.fromarray(image).save(output_path)\n",[36,109200,109201],{"class":38,"line":8719},[36,109202,109203],{"class":49},"    renderer.close()\n",[36,109205,109206],{"class":38,"line":8724},[36,109207,194],{"emptyLinePlaceholder":193},[36,109209,109210,109212,109214,109217],{"class":38,"line":8730},[36,109211,32041],{"class":60},[36,109213,901],{"class":49},[36,109215,109216],{"class":998},"\"saved:\"",[36,109218,109219],{"class":49},", output_path.resolve())\n",[36,109221,109222,109224,109226,109229],{"class":38,"line":8757},[36,109223,32041],{"class":60},[36,109225,901],{"class":49},[36,109227,109228],{"class":998},"\"image shape:\"",[36,109230,109231],{"class":49},", image.shape)\n",[36,109233,109234],{"class":38,"line":8762},[36,109235,194],{"emptyLinePlaceholder":193},[36,109237,109238],{"class":38,"line":8768},[36,109239,194],{"emptyLinePlaceholder":193},[36,109241,109242,109244,109246,109248,109250],{"class":38,"line":8780},[36,109243,2281],{"class":53},[36,109245,31962],{"class":60},[36,109247,102203],{"class":53},[36,109249,102206],{"class":998},[36,109251,4488],{"class":49},[36,109253,109254],{"class":38,"line":8792},[36,109255,102213],{"class":49},[14,109257,104214],{},[26,109259,109261],{"className":24566,"code":109260,"language":24568,"meta":31,"style":31},"touch ch5_renderer.py\n",[33,109262,109263],{"__ignoreMap":31},[36,109264,109265,109267],{"class":38,"line":39},[36,109266,101927],{"class":2713},[36,109268,109269],{"class":998}," ch5_renderer.py\n",[868,109271,102216],{"id":102216},[14,109273,109274],{},"viewer 上下文：",[26,109276,109278],{"className":28,"code":109277,"language":30,"meta":31,"style":31},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[33,109279,109280],{"__ignoreMap":31},[36,109281,109282,109284,109286,109288],{"class":38,"line":39},[36,109283,108477],{"class":53},[36,109285,108480],{"class":49},[36,109287,32125],{"class":53},[36,109289,108485],{"class":49},[14,109291,109292,109294],{},[33,109293,108477],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,109296,109297],{},"窗口循环：",[26,109299,109301],{"className":28,"code":109300,"language":30,"meta":31,"style":31},"while viewer.is_running() and data.time \u003C 5.0:\n",[33,109302,109303],{"__ignoreMap":31},[36,109304,109305,109308,109310,109312,109314,109316,109318],{"class":38,"line":39},[36,109306,109307],{"class":53},"while",[36,109309,108831],{"class":49},[36,109311,31204],{"class":53},[36,109313,108836],{"class":49},[36,109315,1789],{"class":53},[36,109317,108841],{"class":60},[36,109319,4488],{"class":49},[14,109321,109322],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,109324,109325],{},"固定相机：",[26,109327,109329],{"className":53809,"code":109328,"language":53811,"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,109330,109331],{"__ignoreMap":31},[36,109332,109333,109335,109337,109339,109341,109343,109345,109347,109350,109353,109355,109358],{"class":38,"line":39},[36,109334,1789],{"class":49},[36,109336,109159],{"class":52042},[36,109338,15664],{"class":2713},[36,109340,54],{"class":49},[36,109342,109164],{"class":998},[36,109344,101750],{"class":2713},[36,109346,54],{"class":49},[36,109348,109349],{"class":998},"\"1.5 -2.0 1.2\"",[36,109351,109352],{"class":2713}," xyaxes",[36,109354,54],{"class":49},[36,109356,109357],{"class":998},"\"1 0.75 0 0 0 1\"",[36,109359,101788],{"class":49},[14,109361,109362],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[868,109364,109366],{"id":109365},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[26,109368,109370],{"className":28,"code":109369,"language":30,"meta":31,"style":31},"import time\n",[33,109371,109372],{"__ignoreMap":31},[36,109373,109374,109376],{"class":38,"line":39},[36,109375,31135],{"class":53},[36,109377,32571],{"class":49},[14,109379,109380],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[26,109382,109384],{"className":28,"code":109383,"language":30,"meta":31,"style":31},"import mujoco\nimport mujoco.viewer\n",[33,109385,109386,109392],{"__ignoreMap":31},[36,109387,109388,109390],{"class":38,"line":39},[36,109389,31135],{"class":53},[36,109391,101945],{"class":49},[36,109393,109394,109396],{"class":38,"line":46},[36,109395,31135],{"class":53},[36,109397,108196],{"class":49},[14,109399,109400],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[26,109402,109403],{"className":28,"code":109277,"language":30,"meta":31,"style":31},[33,109404,109405],{"__ignoreMap":31},[36,109406,109407,109409,109411,109413],{"class":38,"line":39},[36,109408,108477],{"class":53},[36,109410,108480],{"class":49},[36,109412,32125],{"class":53},[36,109414,108485],{"class":49},[14,109416,109417,109418,109421],{},"打开一个 viewer 窗口。",[33,109419,109420],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[26,109423,109424],{"className":28,"code":109300,"language":30,"meta":31,"style":31},[33,109425,109426],{"__ignoreMap":31},[36,109427,109428,109430,109432,109434,109436,109438,109440],{"class":38,"line":39},[36,109429,109307],{"class":53},[36,109431,108831],{"class":49},[36,109433,31204],{"class":53},[36,109435,108836],{"class":49},[36,109437,1789],{"class":53},[36,109439,108841],{"class":60},[36,109441,4488],{"class":49},[14,109443,109444,109445,109448],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[33,109446,109447],{},"viewer.is_running()"," 会变成 false，循环结束。",[26,109450,109452],{"className":28,"code":109451,"language":30,"meta":31,"style":31},"step_start = time.time()\n",[33,109453,109454],{"__ignoreMap":31},[36,109455,109456,109459,109461],{"class":38,"line":39},[36,109457,109458],{"class":49},"step_start ",[36,109460,54],{"class":53},[36,109462,108853],{"class":49},[14,109464,109465],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[26,109467,109468],{"className":28,"code":108562,"language":30,"meta":31,"style":31},[33,109469,109470,109474],{"__ignoreMap":31},[36,109471,109472],{"class":38,"line":39},[36,109473,105149],{"class":49},[36,109475,109476],{"class":38,"line":46},[36,109477,108573],{"class":49},[14,109479,109480,109482,109483,109485,109486,109488,109489,109492],{},[33,109481,101859],{}," 推进物理仿真。",[33,109484,108581],{}," 把最新的 ",[33,109487,34143],{}," 同步到窗口里显示。没有 ",[33,109490,109491],{},"sync()","，窗口可能看不到最新状态。",[26,109494,109495],{"className":28,"code":108592,"language":30,"meta":31,"style":31},[33,109496,109497],{"__ignoreMap":31},[36,109498,109499,109501,109503,109505,109507,109509,109511],{"class":38,"line":39},[36,109500,108599],{"class":49},[36,109502,54],{"class":53},[36,109504,108604],{"class":49},[36,109506,1414],{"class":53},[36,109508,108609],{"class":49},[36,109510,1414],{"class":53},[36,109512,108614],{"class":49},[14,109514,109515],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[26,109517,109519],{"className":28,"code":109518,"language":30,"meta":31,"style":31},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[33,109520,109521,109533],{"__ignoreMap":31},[36,109522,109523,109525,109527,109529,109531],{"class":38,"line":39},[36,109524,2281],{"class":53},[36,109526,108891],{"class":49},[36,109528,1839],{"class":53},[36,109530,4842],{"class":60},[36,109532,4488],{"class":49},[36,109534,109535],{"class":38,"line":46},[36,109536,109537],{"class":49},"    time.sleep(sleep_time)\n",[14,109539,109540],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[868,109542,109544],{"id":109543},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[26,109546,109548],{"className":28,"code":109547,"language":30,"meta":31,"style":31},"from pathlib import Path\n",[33,109549,109550],{"__ignoreMap":31},[36,109551,109552,109554,109556,109558],{"class":38,"line":39},[36,109553,31479],{"class":53},[36,109555,108955],{"class":49},[36,109557,31135],{"class":53},[36,109559,108960],{"class":49},[14,109561,109562,109563,109566,109567,109570],{},"导入 ",[33,109564,109565],{},"Path","，用来处理文件路径。相比直接写字符串，",[33,109568,109569],{},"Path(\"render_output.png\")"," 更清晰。",[26,109572,109574],{"className":28,"code":109573,"language":30,"meta":31,"style":31},"from PIL import Image\n",[33,109575,109576],{"__ignoreMap":31},[36,109577,109578,109580,109582,109584],{"class":38,"line":39},[36,109579,31479],{"class":53},[36,109581,48005],{"class":60},[36,109583,48008],{"class":53},[36,109585,48011],{"class":49},[14,109587,109588],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[26,109590,109591],{"className":53809,"code":109328,"language":53811,"meta":31,"style":31},[33,109592,109593],{"__ignoreMap":31},[36,109594,109595,109597,109599,109601,109603,109605,109607,109609,109611,109613,109615,109617],{"class":38,"line":39},[36,109596,1789],{"class":49},[36,109598,109159],{"class":52042},[36,109600,15664],{"class":2713},[36,109602,54],{"class":49},[36,109604,109164],{"class":998},[36,109606,101750],{"class":2713},[36,109608,54],{"class":49},[36,109610,109349],{"class":998},[36,109612,109352],{"class":2713},[36,109614,54],{"class":49},[36,109616,109357],{"class":998},[36,109618,101788],{"class":49},[14,109620,109621,109622,109624,109625,109627,109628,109631,109632,109634],{},"定义一个相机。",[33,109623,80552],{}," 是相机名字。",[33,109626,104790],{}," 是相机在世界里的位置。",[33,109629,109630],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[33,109633,104790],{}," 来调视角。",[26,109636,109638],{"className":28,"code":109637,"language":30,"meta":31,"style":31},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[33,109639,109640],{"__ignoreMap":31},[36,109641,109642,109644,109646,109648,109650,109652,109654,109656,109658,109660,109662],{"class":38,"line":39},[36,109643,108214],{"class":49},[36,109645,54],{"class":53},[36,109647,108518],{"class":49},[36,109649,25726],{"class":416},[36,109651,54],{"class":53},[36,109653,43084],{"class":60},[36,109655,154],{"class":49},[36,109657,25722],{"class":416},[36,109659,54],{"class":53},[36,109661,108533],{"class":60},[36,109663,75],{"class":49},[14,109665,109666,109667,101662,109669,109671],{},"创建离屏渲染器。",[33,109668,25726],{},[33,109670,25722],{}," 决定输出图片大小。",[26,109673,109674],{"className":28,"code":102320,"language":30,"meta":31,"style":31},[33,109675,109676,109692],{"__ignoreMap":31},[36,109677,109678,109680,109682,109684,109686,109688,109690],{"class":38,"line":39},[36,109679,3774],{"class":53},[36,109681,102145],{"class":49},[36,109683,26788],{"class":53},[36,109685,33185],{"class":60},[36,109687,901],{"class":49},[36,109689,67],{"class":60},[36,109691,31528],{"class":49},[36,109693,109694],{"class":38,"line":46},[36,109695,102343],{"class":49},[14,109697,109698],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[26,109700,109702],{"className":28,"code":109701,"language":30,"meta":31,"style":31},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[33,109703,109704],{"__ignoreMap":31},[36,109705,109706,109709,109711,109713,109715],{"class":38,"line":39},[36,109707,109708],{"class":49},"renderer.update_scene(data, ",[36,109710,109159],{"class":416},[36,109712,54],{"class":53},[36,109714,109164],{"class":998},[36,109716,75],{"class":49},[14,109718,109719,109720,109722,109723,109726],{},"告诉 renderer：用当前 ",[33,109721,34143],{}," 的状态更新画面，并使用名为 ",[33,109724,109725],{},"fixed_camera"," 的相机视角。",[26,109728,109729],{"className":28,"code":108624,"language":30,"meta":31,"style":31},[33,109730,109731],{"__ignoreMap":31},[36,109732,109733,109735,109737],{"class":38,"line":39},[36,109734,108224],{"class":49},[36,109736,54],{"class":53},[36,109738,108229],{"class":49},[14,109740,109741,109742,109745],{},"真正渲染出图像。",[33,109743,109744],{},"image"," 是一个 NumPy 数组，不是文件。",[26,109747,109749],{"className":28,"code":109748,"language":30,"meta":31,"style":31},"Image.fromarray(image).save(output_path)\n",[33,109750,109751],{"__ignoreMap":31},[36,109752,109753],{"class":38,"line":39},[36,109754,109748],{"class":49},[14,109756,109757,109758,29130],{},"把数组转换成图片，并保存到 ",[33,109759,109760],{},"render_output.png",[26,109762,109764],{"className":28,"code":109763,"language":30,"meta":31,"style":31},"renderer.close()\n",[33,109765,109766],{"__ignoreMap":31},[36,109767,109768],{"class":38,"line":39},[36,109769,109763],{"class":49},[14,109771,109772],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[21,109774,102960],{"id":102959},[14,109776,109777,109778,109780,109781,29130],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[33,109779,109760],{},"，并输出图像数组形状，例如 ",[33,109782,109783],{},"(480, 640, 3)",[14,109785,109786],{},"如果图片里看不到方块，先检查：",[851,109788,109789,109792,109795],{},[854,109790,109791],{},"方块是否掉到相机视野外。",[854,109793,109794],{},"camera 位置是否合理。",[854,109796,109797,109798,109801],{},"是否在 ",[33,109799,109800],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[21,109803,102992],{"id":102991},[14,109805,109806],{},"运行 viewer:",[26,109808,109810],{"className":24566,"code":109809,"language":24568,"meta":31,"style":31},"python ch5_viewer.py\n",[33,109811,109812],{"__ignoreMap":31},[36,109813,109814,109816],{"class":38,"line":39},[36,109815,30],{"class":2713},[36,109817,108940],{"class":998},[14,109819,109820],{},"运行 renderer:",[26,109822,109824],{"className":24566,"code":109823,"language":24568,"meta":31,"style":31},"python ch5_renderer.py\n",[33,109825,109826],{"__ignoreMap":31},[36,109827,109828,109830],{"class":38,"line":39},[36,109829,30],{"class":2713},[36,109831,109269],{"class":998},[14,109833,109834],{},"如果在服务器上运行:",[26,109836,109838],{"className":24566,"code":109837,"language":24568,"meta":31,"style":31},"MUJOCO_GL=egl python ch5_renderer.py\n",[33,109839,109840],{"__ignoreMap":31},[36,109841,109842,109844,109846,109848,109851],{"class":38,"line":39},[36,109843,108458],{"class":49},[36,109845,54],{"class":53},[36,109847,108448],{"class":998},[36,109849,109850],{"class":2713}," python",[36,109852,109269],{"class":998},[14,109854,108426],{},[26,109856,109858],{"className":24566,"code":109857,"language":24568,"meta":31,"style":31},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[33,109859,109860],{"__ignoreMap":31},[36,109861,109862,109864,109866,109868,109870],{"class":38,"line":39},[36,109863,108458],{"class":49},[36,109865,54],{"class":53},[36,109867,108452],{"class":998},[36,109869,109850],{"class":2713},[36,109871,109269],{"class":998},[14,109873,109874],{},"再做几个练习：",[851,109876,109877,109884,109887,109893],{},[854,109878,109879,109880,109883],{},"把 renderer 分辨率改成 ",[33,109881,109882],{},"height=240, width=320","，观察输出 shape。",[854,109885,109886],{},"把方块颜色改成蓝色，重新保存图片。",[854,109888,109889,109890,109892],{},"把相机 ",[33,109891,104790],{}," 改远一点，观察画面中物体是否变小。",[854,109894,109895,109896,103058,109899,109902],{},"把 viewer 示例中的 ",[33,109897,109898],{},"data.time \u003C 5.0",[33,109900,109901],{},"data.time \u003C 20.0","，观察更长时间。",[21,109904,103097],{"id":103096},[868,109906,109908],{"id":109907},"viewer-窗口打不开","viewer 窗口打不开",[14,109910,109911],{},"安装:",[26,109913,109915],{"className":24566,"code":109914,"language":24568,"meta":31,"style":31},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[33,109916,109917],{"__ignoreMap":31},[36,109918,109919,109921,109923,109925,109927,109929,109931,109933,109935,109937,109939],{"class":38,"line":39},[36,109920,25321],{"class":2713},[36,109922,27060],{"class":998},[36,109924,24578],{"class":998},[36,109926,27145],{"class":60},[36,109928,103150],{"class":998},[36,109930,101478],{"class":998},[36,109932,103155],{"class":998},[36,109934,101491],{"class":998},[36,109936,101497],{"class":998},[36,109938,101488],{"class":998},[36,109940,109941],{"class":998}," libXinerama\n",[868,109943,109945],{"id":109944},"glfwerror",[33,109946,109947],{},"GLFWError",[14,109949,109950],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[868,109952,109954],{"id":109953},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109956,109957,109958,83281,109960,109962],{},"尝试 ",[33,109959,101681],{},[33,109961,101684],{},"。可能存在版本差异。",[868,109964,109965],{"id":109965},"保存图片是黑的",[14,109967,103219],{},[851,109969,109970,109973,109976,109986],{},[854,109971,109972],{},"XML 里是否有 light。",[854,109974,109975],{},"相机是否对着模型。",[854,109977,109978,109979,109982,109983,29130],{},"是否先 ",[33,109980,109981],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[33,109984,109985],{},"renderer.render()",[854,109987,109988],{},"物体是否已经掉出视野。",[868,109990,109991],{"id":109991},"远程服务器没有显示器",[14,109993,109994],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[26,109996,109997],{"className":24566,"code":109837,"language":24568,"meta":31,"style":31},[33,109998,109999],{"__ignoreMap":31},[36,110000,110001,110003,110005,110007,110009],{"class":38,"line":39},[36,110002,108458],{"class":49},[36,110004,54],{"class":53},[36,110006,108448],{"class":998},[36,110008,109850],{"class":2713},[36,110010,109269],{"class":998},[14,110012,110013],{},"如果 EGL 不可用，再尝试：",[26,110015,110016],{"className":24566,"code":109857,"language":24568,"meta":31,"style":31},[33,110017,110018],{"__ignoreMap":31},[36,110019,110020,110022,110024,110026,110028],{"class":38,"line":39},[36,110021,108458],{"class":49},[36,110023,54],{"class":53},[36,110025,108452],{"class":998},[36,110027,109850],{"class":2713},[36,110029,109269],{"class":998},[21,110031,103251],{"id":103250},[14,110033,110034],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[851,110036,110037,110040,110043],{},[854,110038,110039],{},"先用 viewer 看模型和控制是否正常。",[854,110041,110042],{},"再用 renderer 保存图片或构造视觉观测。",[854,110044,110045],{},"最后把状态、动作、图像、奖励组织成训练数据。",[807,110047,110048],{},"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":46,"depth":46,"links":110050},[110051,110052,110053,110058,110063,110064,110065,110072],{"id":101290,"depth":46,"text":101291},{"id":101413,"depth":46,"text":101414},{"id":101688,"depth":46,"text":101689,"children":110054},[110055,110056,110057],{"id":108555,"depth":78,"text":108556},{"id":108585,"depth":78,"text":108586},{"id":108620,"depth":78,"text":108621},{"id":101896,"depth":46,"text":101897,"children":110059},[110060,110061,110062],{"id":102216,"depth":78,"text":102216},{"id":109365,"depth":78,"text":109366},{"id":109543,"depth":78,"text":109544},{"id":102959,"depth":46,"text":102960},{"id":102991,"depth":46,"text":102992},{"id":103096,"depth":46,"text":103097,"children":110066},[110067,110068,110069,110070,110071],{"id":109907,"depth":78,"text":109908},{"id":109944,"depth":78,"text":109947},{"id":109953,"depth":78,"text":109954},{"id":109965,"depth":78,"text":109965},{"id":109991,"depth":78,"text":109991},{"id":103250,"depth":46,"text":103251},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108163,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":110079,"title":110080,"body":110081,"description":31,"extension":824,"meta":111992,"navigation":193,"path":111993,"seo":111994,"stem":111995,"__hash__":111996},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":110082,"toc":111968},[110083,110086,110088,110091,110093,110112,110115,110121,110124,110126,110128,110152,110154,110168,110170,110211,110213,110224,110226,110229,110235,110238,110272,110275,110307,110310,110342,110346,110349,110389,110392,110398,110401,110407,110411,110414,110420,110423,110427,110430,110470,110472,110485,110488,110490,111072,111074,111086,111089,111100,111102,111105,111124,111136,111139,111160,111163,111166,111209,111212,111215,111235,111242,111244,111262,111277,111280,111286,111289,111295,111312,111319,111350,111361,111395,111406,111423,111432,111440,111445,111459,111462,111483,111489,111503,111508,111538,111548,111573,111581,111604,111607,111623,111626,111634,111640,111662,111675,111696,111705,111744,111755,111757,111760,111766,111769,111772,111778,111781,111801,111804,111806,111845,111847,111850,111858,111861,111864,111891,111894,111904,111910,111913,111919,111921,111927,111931,111934,111936,111939,111963,111966],[10,110084,110080],{"id":110085},"_6控制任务cartpole",[21,110087,101291],{"id":101290},[14,110089,110090],{},"本章搭建一个最小 Cartpole 控制任务。",[14,110092,104975],{},[851,110094,110095,110098,110100,110103,110106,110109],{},[854,110096,110097],{},"slide joint",[854,110099,106828],{},[854,110101,110102],{},"cart force actuator",[854,110104,110105],{},"状态观测",[854,110107,110108],{},"简单控制循环",[854,110110,110111],{},"reward 设计雏形",[14,110113,110114],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[26,110116,110119],{"className":110117,"code":110118,"language":5935,"meta":31},[5933],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[33,110120,110118],{"__ignoreMap":31},[14,110122,110123],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[21,110125,101414],{"id":101413},[14,110127,101417],{},[26,110129,110130],{"className":24566,"code":105032,"language":24568,"meta":31,"style":31},[33,110131,110132],{"__ignoreMap":31},[36,110133,110134,110136,110138,110140,110142,110144,110146,110148,110150],{"class":38,"line":39},[36,110135,25321],{"class":2713},[36,110137,27060],{"class":998},[36,110139,24578],{"class":998},[36,110141,27145],{"class":60},[36,110143,105047],{"class":998},[36,110145,101442],{"class":998},[36,110147,103145],{"class":998},[36,110149,101458],{"class":998},[36,110151,105056],{"class":998},[14,110153,103463],{},[26,110155,110156],{"className":24566,"code":101563,"language":24568,"meta":31,"style":31},[33,110157,110158],{"__ignoreMap":31},[36,110159,110160,110162,110164,110166],{"class":38,"line":39},[36,110161,24575],{"class":2713},[36,110163,24578],{"class":998},[36,110165,101574],{"class":998},[36,110167,101577],{"class":998},[14,110169,103480],{},[26,110171,110173],{"className":24566,"code":110172,"language":24568,"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,110174,110175,110192,110201],{"__ignoreMap":31},[36,110176,110177,110179,110181,110183,110186,110188,110190],{"class":38,"line":39},[36,110178,31075],{"class":2713},[36,110180,29921],{"class":998},[36,110182,25860],{"class":60},[36,110184,110185],{"class":998}," mujoco-cartpole",[36,110187,101619],{"class":998},[36,110189,101622],{"class":60},[36,110191,101625],{"class":60},[36,110193,110194,110196,110198],{"class":38,"line":46},[36,110195,31075],{"class":2713},[36,110197,101632],{"class":998},[36,110199,110200],{"class":998}," mujoco-cartpole\n",[36,110202,110203,110205,110207,110209],{"class":38,"line":78},[36,110204,24575],{"class":2713},[36,110206,24578],{"class":998},[36,110208,101574],{"class":998},[36,110210,101577],{"class":998},[14,110212,101648],{},[851,110214,110215,110218,110221],{},[854,110216,110217],{},"本章不依赖 Gymnasium。",[854,110219,110220],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[854,110222,110223],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[21,110225,101689],{"id":101688},[14,110227,110228],{},"Cartpole 的模型结构:",[26,110230,110233],{"className":110231,"code":110232,"language":5935,"meta":31},[5933],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[33,110234,110232],{"__ignoreMap":31},[14,110236,110237],{},"小车通过 slide joint 左右移动:",[26,110239,110241],{"className":53809,"code":110240,"language":53811,"meta":31,"style":31},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[33,110242,110243],{"__ignoreMap":31},[36,110244,110245,110247,110249,110251,110253,110256,110258,110260,110263,110265,110267,110270],{"class":38,"line":39},[36,110246,1789],{"class":49},[36,110248,103600],{"class":52042},[36,110250,15664],{"class":2713},[36,110252,54],{"class":49},[36,110254,110255],{"class":998},"\"cart_x\"",[36,110257,54566],{"class":2713},[36,110259,54],{"class":49},[36,110261,110262],{"class":998},"\"slide\"",[36,110264,106672],{"class":2713},[36,110266,54],{"class":49},[36,110268,110269],{"class":998},"\"1 0 0\"",[36,110271,101788],{"class":49},[14,110273,110274],{},"杆子通过 hinge joint 旋转:",[26,110276,110278],{"className":53809,"code":110277,"language":53811,"meta":31,"style":31},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[33,110279,110280],{"__ignoreMap":31},[36,110281,110282,110284,110286,110288,110290,110293,110295,110297,110299,110301,110303,110305],{"class":38,"line":39},[36,110283,1789],{"class":49},[36,110285,103600],{"class":52042},[36,110287,15664],{"class":2713},[36,110289,54],{"class":49},[36,110291,110292],{"class":998},"\"pole_hinge\"",[36,110294,54566],{"class":2713},[36,110296,54],{"class":49},[36,110298,106663],{"class":998},[36,110300,106672],{"class":2713},[36,110302,54],{"class":49},[36,110304,106677],{"class":998},[36,110306,101788],{"class":49},[14,110308,110309],{},"控制力作用在小车 slide joint 上:",[26,110311,110313],{"className":53809,"code":110312,"language":53811,"meta":31,"style":31},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[33,110314,110315],{"__ignoreMap":31},[36,110316,110317,110319,110321,110323,110325,110328,110330,110332,110334,110336,110338,110340],{"class":38,"line":39},[36,110318,1789],{"class":49},[36,110320,106718],{"class":52042},[36,110322,15664],{"class":2713},[36,110324,54],{"class":49},[36,110326,110327],{"class":998},"\"cart_motor\"",[36,110329,106728],{"class":2713},[36,110331,54],{"class":49},[36,110333,110255],{"class":998},[36,110335,106735],{"class":2713},[36,110337,54],{"class":49},[36,110339,55058],{"class":998},[36,110341,101788],{"class":49},[868,110343,110345],{"id":110344},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,110347,110348],{},"这个简化模型有两个关节：",[1031,110350,110351,110362],{},[1034,110352,110353],{},[1037,110354,110355,110357,110359],{},[1040,110356,103403],{"align":24480},[1040,110358,24481],{"align":24480},[1040,110360,110361],{"align":24480},"对应状态",[1078,110363,110364,110377],{},[1037,110365,110366,110371,110374],{},[1083,110367,110368],{"align":24480},[33,110369,110370],{},"cart_x",[1083,110372,110373],{"align":24480},"slide",[1083,110375,110376],{"align":24480},"小车 x 位置",[1037,110378,110379,110384,110386],{},[1083,110380,110381],{"align":24480},[33,110382,110383],{},"pole_hinge",[1083,110385,106484],{"align":24480},[1083,110387,110388],{"align":24480},"杆子角度",[14,110390,110391],{},"所以：",[26,110393,110396],{"className":110394,"code":110395,"language":5935,"meta":31},[5933],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[33,110397,110395],{"__ignoreMap":31},[14,110399,110400],{},"把它们拼起来就是观测：",[26,110402,110405],{"className":110403,"code":110404,"language":5935,"meta":31},[5933],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[33,110406,110404],{"__ignoreMap":31},[868,110408,110410],{"id":110409},"action-是什么","action 是什么",[14,110412,110413],{},"本章只有一个 actuator：",[26,110415,110418],{"className":110416,"code":110417,"language":5935,"meta":31},[5933],"data.ctrl[0] = action\n",[33,110419,110417],{"__ignoreMap":31},[14,110421,110422],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[868,110424,110426],{"id":110425},"reward-是什么","reward 是什么",[14,110428,110429],{},"奖励函数：",[26,110431,110433],{"className":28,"code":110432,"language":30,"meta":31,"style":31},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[33,110434,110435],{"__ignoreMap":31},[36,110436,110437,110439,110442,110444,110446,110448,110451,110453,110456,110458,110460,110462,110465,110467],{"class":38,"line":39},[36,110438,17790],{"class":53},[36,110440,110441],{"class":60}," float",[36,110443,901],{"class":49},[36,110445,103047],{"class":60},[36,110447,53013],{"class":53},[36,110449,110450],{"class":60}," 0.1",[36,110452,7265],{"class":53},[36,110454,110455],{"class":49}," cart_x ",[36,110457,1339],{"class":53},[36,110459,110455],{"class":49},[36,110461,1414],{"class":53},[36,110463,110464],{"class":49}," pole_angle ",[36,110466,1339],{"class":53},[36,110468,110469],{"class":49}," pole_angle)\n",[14,110471,106870],{},[851,110473,110474,110479,110482],{},[854,110475,110476,110477,29130],{},"基础奖励是 ",[33,110478,103047],{},[854,110480,110481],{},"小车离中心越远，扣分越多。",[854,110483,110484],{},"杆子角度越大，扣分越多。",[14,110486,110487],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[21,110489,101897],{"id":101896},[26,110491,110493],{"className":28,"code":110492,"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,110494,110495,110501,110511,110515,110519,110527,110532,110536,110540,110544,110549,110553,110558,110563,110568,110572,110577,110582,110587,110591,110595,110599,110603,110607,110612,110616,110620,110624,110628,110632,110642,110649,110653,110657,110671,110685,110698,110728,110732,110736,110748,110760,110768,110772,110785,110789,110793,110802,110806,110822,110832,110845,110858,110862,110885,110903,110907,110919,110923,110927,110937,110947,110951,110967,111008,111012,111032,111048,111052,111056,111068],{"__ignoreMap":31},[36,110496,110497,110499],{"class":38,"line":39},[36,110498,31135],{"class":53},[36,110500,101945],{"class":49},[36,110502,110503,110505,110507,110509],{"class":38,"line":46},[36,110504,31135],{"class":53},[36,110506,32122],{"class":49},[36,110508,32125],{"class":53},[36,110510,32128],{"class":49},[36,110512,110513],{"class":38,"line":78},[36,110514,194],{"emptyLinePlaceholder":193},[36,110516,110517],{"class":38,"line":125},[36,110518,194],{"emptyLinePlaceholder":193},[36,110520,110521,110523,110525],{"class":38,"line":131},[36,110522,101958],{"class":60},[36,110524,14308],{"class":53},[36,110526,101963],{"class":998},[36,110528,110529],{"class":38,"line":396},[36,110530,110531],{"class":998},"\u003Cmujoco model=\"cartpole\">\n",[36,110533,110534],{"class":38,"line":407},[36,110535,101973],{"class":998},[36,110537,110538],{"class":38,"line":2061},[36,110539,194],{"emptyLinePlaceholder":193},[36,110541,110542],{"class":38,"line":2067},[36,110543,101982],{"class":998},[36,110545,110546],{"class":38,"line":2079},[36,110547,110548],{"class":998},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[36,110550,110551],{"class":38,"line":2362},[36,110552,194],{"emptyLinePlaceholder":193},[36,110554,110555],{"class":38,"line":2367},[36,110556,110557],{"class":998},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[36,110559,110560],{"class":38,"line":2373},[36,110561,110562],{"class":998},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[36,110564,110565],{"class":38,"line":2378},[36,110566,110567],{"class":998},"      \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,110569,110570],{"class":38,"line":2392},[36,110571,194],{"emptyLinePlaceholder":193},[36,110573,110574],{"class":38,"line":2397},[36,110575,110576],{"class":998},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[36,110578,110579],{"class":38,"line":2403},[36,110580,110581],{"class":998},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[36,110583,110584],{"class":38,"line":2424},[36,110585,110586],{"class":998},"        \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,110588,110589],{"class":38,"line":2429},[36,110590,107082],{"class":998},[36,110592,110593],{"class":38,"line":2443},[36,110594,102011],{"class":998},[36,110596,110597],{"class":38,"line":2448},[36,110598,102016],{"class":998},[36,110600,110601],{"class":38,"line":2477},[36,110602,194],{"emptyLinePlaceholder":193},[36,110604,110605],{"class":38,"line":2482},[36,110606,107099],{"class":998},[36,110608,110609],{"class":38,"line":2499},[36,110610,110611],{"class":998},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[36,110613,110614],{"class":38,"line":2504},[36,110615,107109],{"class":998},[36,110617,110618],{"class":38,"line":2509},[36,110619,102021],{"class":998},[36,110621,110622],{"class":38,"line":2514},[36,110623,96342],{"class":998},[36,110625,110626],{"class":38,"line":2528},[36,110627,194],{"emptyLinePlaceholder":193},[36,110629,110630],{"class":38,"line":2533},[36,110631,194],{"emptyLinePlaceholder":193},[36,110633,110634,110636,110639],{"class":38,"line":3326},[36,110635,32689],{"class":53},[36,110637,110638],{"class":2713}," get_observation",[36,110640,110641],{"class":49},"(data: mujoco.MjData) -> np.ndarray:\n",[36,110643,110644,110646],{"class":38,"line":3340},[36,110645,4839],{"class":53},[36,110647,110648],{"class":49}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[36,110650,110651],{"class":38,"line":3348},[36,110652,194],{"emptyLinePlaceholder":193},[36,110654,110655],{"class":38,"line":3353},[36,110656,194],{"emptyLinePlaceholder":193},[36,110658,110659,110661,110664,110667,110669],{"class":38,"line":3359},[36,110660,32689],{"class":53},[36,110662,110663],{"class":2713}," compute_reward",[36,110665,110666],{"class":49},"(obs: np.ndarray) -> ",[36,110668,478],{"class":60},[36,110670,4488],{"class":49},[36,110672,110673,110676,110678,110681,110683],{"class":38,"line":3365},[36,110674,110675],{"class":49},"    cart_x ",[36,110677,54],{"class":53},[36,110679,110680],{"class":49}," obs[",[36,110682,643],{"class":60},[36,110684,33988],{"class":49},[36,110686,110687,110690,110692,110694,110696],{"class":38,"line":3370},[36,110688,110689],{"class":49},"    pole_angle ",[36,110691,54],{"class":53},[36,110693,110680],{"class":49},[36,110695,61],{"class":60},[36,110697,33988],{"class":49},[36,110699,110700,110702,110704,110706,110708,110710,110712,110714,110716,110718,110720,110722,110724,110726],{"class":38,"line":8695},[36,110701,4839],{"class":53},[36,110703,110441],{"class":60},[36,110705,901],{"class":49},[36,110707,103047],{"class":60},[36,110709,53013],{"class":53},[36,110711,110450],{"class":60},[36,110713,7265],{"class":53},[36,110715,110455],{"class":49},[36,110717,1339],{"class":53},[36,110719,110455],{"class":49},[36,110721,1414],{"class":53},[36,110723,110464],{"class":49},[36,110725,1339],{"class":53},[36,110727,110469],{"class":49},[36,110729,110730],{"class":38,"line":8719},[36,110731,194],{"emptyLinePlaceholder":193},[36,110733,110734],{"class":38,"line":8724},[36,110735,194],{"emptyLinePlaceholder":193},[36,110737,110738,110740,110742,110744,110746],{"class":38,"line":8730},[36,110739,32689],{"class":53},[36,110741,2723],{"class":2713},[36,110743,102042],{"class":49},[36,110745,96330],{"class":60},[36,110747,4488],{"class":49},[36,110749,110750,110752,110754,110756,110758],{"class":38,"line":8757},[36,110751,102051],{"class":49},[36,110753,54],{"class":53},[36,110755,102056],{"class":49},[36,110757,101958],{"class":60},[36,110759,75],{"class":49},[36,110761,110762,110764,110766],{"class":38,"line":8762},[36,110763,102065],{"class":49},[36,110765,54],{"class":53},[36,110767,102070],{"class":49},[36,110769,110770],{"class":38,"line":8768},[36,110771,194],{"emptyLinePlaceholder":193},[36,110773,110774,110776,110778,110780,110782],{"class":38,"line":8780},[36,110775,105713],{"class":49},[36,110777,61],{"class":60},[36,110779,5192],{"class":49},[36,110781,54],{"class":53},[36,110783,110784],{"class":60}," 0.1\n",[36,110786,110787],{"class":38,"line":8792},[36,110788,105726],{"class":49},[36,110790,110791],{"class":38,"line":8804},[36,110792,194],{"emptyLinePlaceholder":193},[36,110794,110795,110798,110800],{"class":38,"line":10463},[36,110796,110797],{"class":49},"    total_reward ",[36,110799,54],{"class":53},[36,110801,105405],{"class":60},[36,110803,110804],{"class":38,"line":10488},[36,110805,194],{"emptyLinePlaceholder":193},[36,110807,110808,110810,110812,110814,110816,110818,110820],{"class":38,"line":10511},[36,110809,3950],{"class":53},[36,110811,32358],{"class":49},[36,110813,26788],{"class":53},[36,110815,33185],{"class":60},[36,110817,901],{"class":49},[36,110819,7157],{"class":60},[36,110821,31528],{"class":49},[36,110823,110824,110827,110829],{"class":38,"line":10535},[36,110825,110826],{"class":49},"        obs ",[36,110828,54],{"class":53},[36,110830,110831],{"class":49}," get_observation(data)\n",[36,110833,110834,110837,110839,110841,110843],{"class":38,"line":10540},[36,110835,110836],{"class":49},"        pole_angle ",[36,110838,54],{"class":53},[36,110840,110680],{"class":49},[36,110842,61],{"class":60},[36,110844,33988],{"class":49},[36,110846,110847,110850,110852,110854,110856],{"class":38,"line":10545},[36,110848,110849],{"class":49},"        pole_angular_velocity ",[36,110851,54],{"class":53},[36,110853,110680],{"class":49},[36,110855,162],{"class":60},[36,110857,33988],{"class":49},[36,110859,110860],{"class":38,"line":10550},[36,110861,194],{"emptyLinePlaceholder":193},[36,110863,110864,110867,110869,110872,110874,110876,110878,110880,110882],{"class":38,"line":10559},[36,110865,110866],{"class":49},"        action ",[36,110868,54],{"class":53},[36,110870,110871],{"class":60}," 2.0",[36,110873,7265],{"class":53},[36,110875,110464],{"class":49},[36,110877,1365],{"class":53},[36,110879,62609],{"class":60},[36,110881,7265],{"class":53},[36,110883,110884],{"class":49}," pole_angular_velocity\n",[36,110886,110887,110889,110891,110893,110895,110897,110899,110901],{"class":38,"line":10564},[36,110888,110866],{"class":49},[36,110890,54],{"class":53},[36,110892,108091],{"class":49},[36,110894,1414],{"class":53},[36,110896,103047],{"class":60},[36,110898,154],{"class":49},[36,110900,103047],{"class":60},[36,110902,75],{"class":49},[36,110904,110905],{"class":38,"line":10570},[36,110906,194],{"emptyLinePlaceholder":193},[36,110908,110909,110911,110913,110915,110917],{"class":38,"line":10591},[36,110910,107261],{"class":49},[36,110912,643],{"class":60},[36,110914,5192],{"class":49},[36,110916,54],{"class":53},[36,110918,108114],{"class":49},[36,110920,110921],{"class":38,"line":10597},[36,110922,102160],{"class":49},[36,110924,110925],{"class":38,"line":10611},[36,110926,194],{"emptyLinePlaceholder":193},[36,110928,110929,110932,110934],{"class":38,"line":10617},[36,110930,110931],{"class":49},"        reward ",[36,110933,54],{"class":53},[36,110935,110936],{"class":49}," compute_reward(get_observation(data))\n",[36,110938,110939,110942,110944],{"class":38,"line":10644},[36,110940,110941],{"class":49},"        total_reward ",[36,110943,10224],{"class":53},[36,110945,110946],{"class":49}," reward\n",[36,110948,110949],{"class":38,"line":10653},[36,110950,194],{"emptyLinePlaceholder":193},[36,110952,110953,110955,110957,110959,110961,110963,110965],{"class":38,"line":10659},[36,110954,3246],{"class":53},[36,110956,32358],{"class":49},[36,110958,1214],{"class":53},[36,110960,6501],{"class":60},[36,110962,102203],{"class":53},[36,110964,4842],{"class":60},[36,110966,4488],{"class":49},[36,110968,110969,110971,110973,110976,110979,110982,110985,110987,110990,110993,110995,110997,110999,111001,111004,111006],{"class":38,"line":10667},[36,110970,35392],{"class":60},[36,110972,901],{"class":49},[36,110974,110975],{"class":998},"\"step:\"",[36,110977,110978],{"class":49},", step, ",[36,110980,110981],{"class":998},"\"obs:\"",[36,110983,110984],{"class":49},", np.round(obs, ",[36,110986,162],{"class":60},[36,110988,110989],{"class":49},"), ",[36,110991,110992],{"class":998},"\"action:\"",[36,110994,154],{"class":49},[36,110996,32760],{"class":60},[36,110998,901],{"class":49},[36,111000,478],{"class":60},[36,111002,111003],{"class":49},"(action), ",[36,111005,162],{"class":60},[36,111007,31239],{"class":49},[36,111009,111010],{"class":38,"line":10672},[36,111011,194],{"emptyLinePlaceholder":193},[36,111013,111014,111016,111018,111021,111023,111025,111028,111030],{"class":38,"line":17348},[36,111015,32041],{"class":60},[36,111017,901],{"class":49},[36,111019,111020],{"class":998},"\"total_reward:\"",[36,111022,154],{"class":49},[36,111024,32760],{"class":60},[36,111026,111027],{"class":49},"(total_reward, ",[36,111029,162],{"class":60},[36,111031,31239],{"class":49},[36,111033,111034,111036,111038,111041,111044,111046],{"class":38,"line":17354},[36,111035,32041],{"class":60},[36,111037,901],{"class":49},[36,111039,111040],{"class":998},"\"final obs:\"",[36,111042,111043],{"class":49},", np.round(get_observation(data), ",[36,111045,162],{"class":60},[36,111047,31239],{"class":49},[36,111049,111050],{"class":38,"line":17377},[36,111051,194],{"emptyLinePlaceholder":193},[36,111053,111054],{"class":38,"line":17383},[36,111055,194],{"emptyLinePlaceholder":193},[36,111057,111058,111060,111062,111064,111066],{"class":38,"line":17406},[36,111059,2281],{"class":53},[36,111061,31962],{"class":60},[36,111063,102203],{"class":53},[36,111065,102206],{"class":998},[36,111067,4488],{"class":49},[36,111069,111070],{"class":38,"line":17420},[36,111071,102213],{"class":49},[14,111073,104214],{},[26,111075,111077],{"className":24566,"code":111076,"language":24568,"meta":31,"style":31},"touch ch6_cartpole.py\n",[33,111078,111079],{"__ignoreMap":31},[36,111080,111081,111083],{"class":38,"line":39},[36,111082,101927],{"class":2713},[36,111084,111085],{"class":998}," ch6_cartpole.py\n",[14,111087,111088],{},"运行：",[26,111090,111092],{"className":24566,"code":111091,"language":24568,"meta":31,"style":31},"python ch6_cartpole.py\n",[33,111093,111094],{"__ignoreMap":31},[36,111095,111096,111098],{"class":38,"line":39},[36,111097,30],{"class":2713},[36,111099,111085],{"class":998},[868,111101,102216],{"id":102216},[14,111103,111104],{},"构造观测：",[26,111106,111108],{"className":28,"code":111107,"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,111109,111110,111118],{"__ignoreMap":31},[36,111111,111112,111114,111116],{"class":38,"line":39},[36,111113,32689],{"class":53},[36,111115,110638],{"class":2713},[36,111117,110641],{"class":49},[36,111119,111120,111122],{"class":38,"line":46},[36,111121,4839],{"class":53},[36,111123,110648],{"class":49},[14,111125,111126,111129,111130,111132,111133,111135],{},[33,111127,111128],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[33,111131,104674],{}," 2 维，",[33,111134,105004],{}," 2 维，所以 obs 是 4 维。",[14,111137,111138],{},"设置初始角度：",[26,111140,111142],{"className":28,"code":111141,"language":30,"meta":31,"style":31},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[33,111143,111144,111156],{"__ignoreMap":31},[36,111145,111146,111148,111150,111152,111154],{"class":38,"line":39},[36,111147,105343],{"class":49},[36,111149,61],{"class":60},[36,111151,5192],{"class":49},[36,111153,54],{"class":53},[36,111155,110784],{"class":60},[36,111157,111158],{"class":38,"line":46},[36,111159,105187],{"class":49},[14,111161,111162],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,111164,111165],{},"简单反馈控制：",[26,111167,111169],{"className":28,"code":111168,"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,111170,111171,111191],{"__ignoreMap":31},[36,111172,111173,111175,111177,111179,111181,111183,111185,111187,111189],{"class":38,"line":39},[36,111174,108086],{"class":49},[36,111176,54],{"class":53},[36,111178,110871],{"class":60},[36,111180,7265],{"class":53},[36,111182,110464],{"class":49},[36,111184,1365],{"class":53},[36,111186,62609],{"class":60},[36,111188,7265],{"class":53},[36,111190,110884],{"class":49},[36,111192,111193,111195,111197,111199,111201,111203,111205,111207],{"class":38,"line":46},[36,111194,108086],{"class":49},[36,111196,54],{"class":53},[36,111198,108091],{"class":49},[36,111200,1414],{"class":53},[36,111202,103047],{"class":60},[36,111204,154],{"class":49},[36,111206,103047],{"class":60},[36,111208,75],{"class":49},[14,111210,111211],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,111213,111214],{},"限制动作：",[26,111216,111218],{"className":28,"code":111217,"language":30,"meta":31,"style":31},"np.clip(action, -1.0, 1.0)\n",[33,111219,111220],{"__ignoreMap":31},[36,111221,111222,111225,111227,111229,111231,111233],{"class":38,"line":39},[36,111223,111224],{"class":49},"np.clip(action, ",[36,111226,1414],{"class":53},[36,111228,103047],{"class":60},[36,111230,154],{"class":49},[36,111232,103047],{"class":60},[36,111234,75],{"class":49},[14,111236,111237,111238,111241],{},"因为 XML 里 ",[33,111239,111240],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[868,111243,102352],{"id":102352},[26,111245,111246],{"className":28,"code":111107,"language":30,"meta":31,"style":31},[33,111247,111248,111256],{"__ignoreMap":31},[36,111249,111250,111252,111254],{"class":38,"line":39},[36,111251,32689],{"class":53},[36,111253,110638],{"class":2713},[36,111255,110641],{"class":49},[36,111257,111258,111260],{"class":38,"line":46},[36,111259,4839],{"class":53},[36,111261,110648],{"class":49},[14,111263,111264,111265,111268,111269,111272,111273,111276],{},"这段定义了一个函数，用来获取当前观测。",[33,111266,111267],{},"data.qpos.copy()"," 是位置数组副本，",[33,111270,111271],{},"data.qvel.copy()"," 是速度数组副本。",[33,111274,111275],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,111278,111279],{},"在本章模型里：",[26,111281,111284],{"className":111282,"code":111283,"language":5935,"meta":31},[5933],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[33,111285,111283],{"__ignoreMap":31},[14,111287,111288],{},"所以返回的 obs 是：",[26,111290,111293],{"className":111291,"code":111292,"language":5935,"meta":31},[5933],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[33,111294,111292],{"__ignoreMap":31},[26,111296,111298],{"className":28,"code":111297,"language":30,"meta":31,"style":31},"def compute_reward(obs: np.ndarray) -> float:\n",[33,111299,111300],{"__ignoreMap":31},[36,111301,111302,111304,111306,111308,111310],{"class":38,"line":39},[36,111303,32689],{"class":53},[36,111305,110663],{"class":2713},[36,111307,110666],{"class":49},[36,111309,478],{"class":60},[36,111311,4488],{"class":49},[14,111313,111314,111315,111318],{},"这行定义奖励函数。输入是观测 ",[33,111316,111317],{},"obs","，输出是一个浮点数奖励。",[26,111320,111322],{"className":28,"code":111321,"language":30,"meta":31,"style":31},"cart_x = obs[0]\npole_angle = obs[1]\n",[33,111323,111324,111337],{"__ignoreMap":31},[36,111325,111326,111329,111331,111333,111335],{"class":38,"line":39},[36,111327,111328],{"class":49},"cart_x ",[36,111330,54],{"class":53},[36,111332,110680],{"class":49},[36,111334,643],{"class":60},[36,111336,33988],{"class":49},[36,111338,111339,111342,111344,111346,111348],{"class":38,"line":46},[36,111340,111341],{"class":49},"pole_angle ",[36,111343,54],{"class":53},[36,111345,110680],{"class":49},[36,111347,61],{"class":60},[36,111349,33988],{"class":49},[14,111351,111352,111353,111356,111357,111360],{},"数组索引从 0 开始。",[33,111354,111355],{},"obs[0]"," 是第一个元素，也就是小车位置。",[33,111358,111359],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[26,111362,111363],{"className":28,"code":110432,"language":30,"meta":31,"style":31},[33,111364,111365],{"__ignoreMap":31},[36,111366,111367,111369,111371,111373,111375,111377,111379,111381,111383,111385,111387,111389,111391,111393],{"class":38,"line":39},[36,111368,17790],{"class":53},[36,111370,110441],{"class":60},[36,111372,901],{"class":49},[36,111374,103047],{"class":60},[36,111376,53013],{"class":53},[36,111378,110450],{"class":60},[36,111380,7265],{"class":53},[36,111382,110455],{"class":49},[36,111384,1339],{"class":53},[36,111386,110455],{"class":49},[36,111388,1414],{"class":53},[36,111390,110464],{"class":49},[36,111392,1339],{"class":53},[36,111394,110469],{"class":49},[14,111396,111397,111398,111401,111402,111405],{},"这行计算奖励。",[33,111399,111400],{},"cart_x * cart_x"," 是小车位置的平方，",[33,111403,111404],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[26,111407,111409],{"className":28,"code":111408,"language":30,"meta":31,"style":31},"data.qpos[1] = 0.1\n",[33,111410,111411],{"__ignoreMap":31},[36,111412,111413,111415,111417,111419,111421],{"class":38,"line":39},[36,111414,105343],{"class":49},[36,111416,61],{"class":60},[36,111418,5192],{"class":49},[36,111420,54],{"class":53},[36,111422,110784],{"class":60},[14,111424,111425,111426,111428,111429,111431],{},"手动设置杆子的初始角度。因为 ",[33,111427,106100],{}," 是小车位置，",[33,111430,106103],{}," 是杆子角度，所以这里改的是杆子。",[26,111433,111434],{"className":28,"code":105187,"language":30,"meta":31,"style":31},[33,111435,111436],{"__ignoreMap":31},[36,111437,111438],{"class":38,"line":39},[36,111439,105187],{"class":49},[14,111441,106146,111442,111444],{},[33,111443,104674],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[26,111446,111448],{"className":28,"code":111447,"language":30,"meta":31,"style":31},"total_reward = 0.0\n",[33,111449,111450],{"__ignoreMap":31},[36,111451,111452,111455,111457],{"class":38,"line":39},[36,111453,111454],{"class":49},"total_reward ",[36,111456,54],{"class":53},[36,111458,105405],{"class":60},[14,111460,111461],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[26,111463,111465],{"className":28,"code":111464,"language":30,"meta":31,"style":31},"for step in range(1000):\n",[33,111466,111467],{"__ignoreMap":31},[36,111468,111469,111471,111473,111475,111477,111479,111481],{"class":38,"line":39},[36,111470,3774],{"class":53},[36,111472,32358],{"class":49},[36,111474,26788],{"class":53},[36,111476,33185],{"class":60},[36,111478,901],{"class":49},[36,111480,7157],{"class":60},[36,111482,31528],{"class":49},[14,111484,111485,111486,111488],{},"循环 1000 步。",[33,111487,107778],{}," 是当前步数，从 0 到 999。",[26,111490,111492],{"className":28,"code":111491,"language":30,"meta":31,"style":31},"obs = get_observation(data)\n",[33,111493,111494],{"__ignoreMap":31},[36,111495,111496,111499,111501],{"class":38,"line":39},[36,111497,111498],{"class":49},"obs ",[36,111500,54],{"class":53},[36,111502,110831],{"class":49},[14,111504,111505,111506,29130],{},"读取当前状态，保存到 ",[33,111507,111317],{},[26,111509,111511],{"className":28,"code":111510,"language":30,"meta":31,"style":31},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[33,111512,111513,111525],{"__ignoreMap":31},[36,111514,111515,111517,111519,111521,111523],{"class":38,"line":39},[36,111516,111341],{"class":49},[36,111518,54],{"class":53},[36,111520,110680],{"class":49},[36,111522,61],{"class":60},[36,111524,33988],{"class":49},[36,111526,111527,111530,111532,111534,111536],{"class":38,"line":46},[36,111528,111529],{"class":49},"pole_angular_velocity ",[36,111531,54],{"class":53},[36,111533,110680],{"class":49},[36,111535,162],{"class":60},[36,111537,33988],{"class":49},[14,111539,111540,111541,111544,111545,29130],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[33,111542,111543],{},"obs[3]","？因为 obs 的顺序是 ",[33,111546,111547],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[26,111549,111551],{"className":28,"code":111550,"language":30,"meta":31,"style":31},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[33,111552,111553],{"__ignoreMap":31},[36,111554,111555,111557,111559,111561,111563,111565,111567,111569,111571],{"class":38,"line":39},[36,111556,108086],{"class":49},[36,111558,54],{"class":53},[36,111560,110871],{"class":60},[36,111562,7265],{"class":53},[36,111564,110464],{"class":49},[36,111566,1365],{"class":53},[36,111568,62609],{"class":60},[36,111570,7265],{"class":53},[36,111572,110884],{"class":49},[14,111574,111575,111576,101662,111578,111580],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[33,111577,105904],{},[33,111579,36071],{}," 是人为设置的系数，不是固定公式。",[26,111582,111584],{"className":28,"code":111583,"language":30,"meta":31,"style":31},"action = np.clip(action, -1.0, 1.0)\n",[33,111585,111586],{"__ignoreMap":31},[36,111587,111588,111590,111592,111594,111596,111598,111600,111602],{"class":38,"line":39},[36,111589,108086],{"class":49},[36,111591,54],{"class":53},[36,111593,108091],{"class":49},[36,111595,1414],{"class":53},[36,111597,103047],{"class":60},[36,111599,154],{"class":49},[36,111601,103047],{"class":60},[36,111603,75],{"class":49},[14,111605,111606],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[26,111608,111609],{"className":28,"code":110417,"language":30,"meta":31,"style":31},[33,111610,111611],{"__ignoreMap":31},[36,111612,111613,111615,111617,111619,111621],{"class":38,"line":39},[36,111614,106515],{"class":49},[36,111616,643],{"class":60},[36,111618,5192],{"class":49},[36,111620,54],{"class":53},[36,111622,108114],{"class":49},[14,111624,111625],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[26,111627,111628],{"className":28,"code":105149,"language":30,"meta":31,"style":31},[33,111629,111630],{"__ignoreMap":31},[36,111631,111632],{"class":38,"line":39},[36,111633,105149],{"class":49},[14,111635,111636,111637,111639],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[33,111638,106770],{}," 计算小车和杆子的下一刻状态。",[26,111641,111643],{"className":28,"code":111642,"language":30,"meta":31,"style":31},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[33,111644,111645,111654],{"__ignoreMap":31},[36,111646,111647,111650,111652],{"class":38,"line":39},[36,111648,111649],{"class":49},"reward ",[36,111651,54],{"class":53},[36,111653,110936],{"class":49},[36,111655,111656,111658,111660],{"class":38,"line":46},[36,111657,111454],{"class":49},[36,111659,10224],{"class":53},[36,111661,110946],{"class":49},[14,111663,111664,111665,111667,111668,111671,111672,29130],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[33,111666,10224],{}," 是简写，",[33,111669,111670],{},"total_reward += reward"," 等价于 ",[33,111673,111674],{},"total_reward = total_reward + reward",[26,111676,111678],{"className":28,"code":111677,"language":30,"meta":31,"style":31},"if step % 100 == 0:\n",[33,111679,111680],{"__ignoreMap":31},[36,111681,111682,111684,111686,111688,111690,111692,111694],{"class":38,"line":39},[36,111683,2281],{"class":53},[36,111685,32358],{"class":49},[36,111687,1214],{"class":53},[36,111689,6501],{"class":60},[36,111691,102203],{"class":53},[36,111693,4842],{"class":60},[36,111695,4488],{"class":49},[14,111697,111698,111700,111701,111704],{},[33,111699,1214],{}," 是取余数。",[33,111702,111703],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[26,111706,111708],{"className":28,"code":111707,"language":30,"meta":31,"style":31},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[33,111709,111710],{"__ignoreMap":31},[36,111711,111712,111714,111716,111718,111720,111722,111724,111726,111728,111730,111732,111734,111736,111738,111740,111742],{"class":38,"line":39},[36,111713,199],{"class":60},[36,111715,901],{"class":49},[36,111717,110975],{"class":998},[36,111719,110978],{"class":49},[36,111721,110981],{"class":998},[36,111723,110984],{"class":49},[36,111725,162],{"class":60},[36,111727,110989],{"class":49},[36,111729,110992],{"class":998},[36,111731,154],{"class":49},[36,111733,32760],{"class":60},[36,111735,901],{"class":49},[36,111737,478],{"class":60},[36,111739,111003],{"class":49},[36,111741,162],{"class":60},[36,111743,31239],{"class":49},[14,111745,111746,111747,111750,111751,111754],{},"打印当前步数、观测和动作。",[33,111748,111749],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[33,111752,111753],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[21,111756,102960],{"id":102959},[14,111758,111759],{},"观测向量:",[26,111761,111764],{"className":111762,"code":111763,"language":5935,"meta":31},[5933],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[33,111765,111763],{"__ignoreMap":31},[14,111767,111768],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111770,111771],{},"每隔 100 步会打印一次：",[26,111773,111776],{"className":111774,"code":111775,"language":5935,"meta":31},[5933],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[33,111777,111775],{"__ignoreMap":31},[14,111779,111780],{},"重点观察：",[851,111782,111783,111789,111794],{},[854,111784,111785,111788],{},[33,111786,111787],{},"pole_angle"," 是否越来越大。",[854,111790,111791,111793],{},[33,111792,110370],{}," 是否跑得太远。",[854,111795,111796,111797,83281,111799,29130],{},"action 是否经常被 clip 到 ",[33,111798,104559],{},[33,111800,61],{},[14,111802,111803],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[21,111805,102992],{"id":102991},[851,111807,111808,111814,111817,111823,111833,111839,111842],{},[854,111809,111810,111811,29130],{},"把初始角度改为 ",[33,111812,111813],{},"data.qpos[1] = 0.3",[854,111815,111816],{},"重新运行，观察控制是否变差。",[854,111818,111819,111820,111822],{},"把 actuator ",[33,111821,107711],{}," 改小。",[854,111824,111825,111826,111829,111830,29130],{},"打印 ",[33,111827,111828],{},"model.nq, model.nv, model.nu","，应为 ",[33,111831,111832],{},"2 2 1",[854,111834,111835,111836,111838],{},"把 reward 里的 ",[33,111837,111404],{}," 系数改大，观察总奖励变化。",[854,111840,111841],{},"把控制器改成反号，观察杆子是否更容易倒。",[854,111843,111844],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[21,111846,103097],{"id":103096},[868,111848,111849],{"id":111849},"杆子方向和预期不一致",[14,111851,103040,111852,111854,111855,111857],{},[33,111853,106883],{}," 和 capsule 的 ",[33,111856,103820],{},"，必要时用 viewer 可视化确认。",[868,111859,111860],{"id":111860},"控制器越控越倒",[14,111862,111863],{},"说明反馈符号可能反了，尝试:",[26,111865,111867],{"className":28,"code":111866,"language":30,"meta":31,"style":31},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[33,111868,111869],{"__ignoreMap":31},[36,111870,111871,111873,111875,111877,111879,111881,111883,111885,111887,111889],{"class":38,"line":39},[36,111872,108086],{"class":49},[36,111874,54],{"class":53},[36,111876,53013],{"class":53},[36,111878,105904],{"class":60},[36,111880,7265],{"class":53},[36,111882,110464],{"class":49},[36,111884,1414],{"class":53},[36,111886,62609],{"class":60},[36,111888,7265],{"class":53},[36,111890,110884],{"class":49},[868,111892,111893],{"id":111893},"小车飞走",[14,111895,111896,111897,111899,111900,111903],{},"降低 ",[33,111898,107711],{}," 或缩小 ",[33,111901,111902],{},"action"," 的 clip 范围。",[868,111905,111907,111909],{"id":111906},"obs3-为什么是杆子角速度",[33,111908,111543],{}," 为什么是杆子角速度",[14,111911,111912],{},"因为这个模型里：",[26,111914,111917],{"className":111915,"code":111916,"language":5935,"meta":31},[5933],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[33,111918,111916],{"__ignoreMap":31},[14,111920,110391],{},[26,111922,111925],{"className":111923,"code":111924,"language":5935,"meta":31},[5933],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[33,111926,111924],{"__ignoreMap":31},[868,111928,111930],{"id":111929},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111932,111933],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[21,111935,103251],{"id":103250},[14,111937,111938],{},"一个控制任务通常包含：",[851,111940,111941,111944,111952,111957,111960],{},[854,111942,111943],{},"模型：Cartpole 的 body、joint、actuator。",[854,111945,111946,111947,1104,111949,111951],{},"观测：从 ",[33,111948,104674],{},[33,111950,105004],{}," 里取状态。",[854,111953,111954,111955,29130],{},"动作：写入 ",[33,111956,101720],{},[854,111958,111959],{},"奖励：根据任务目标打分。",[854,111961,111962],{},"循环：obs -> action -> step -> reward。",[14,111964,111965],{},"这就是后面 Gymnasium 环境的基本骨架。",[807,111967,104930],{},{"title":31,"searchDepth":46,"depth":46,"links":111969},[111970,111971,111972,111977,111981,111982,111983,111991],{"id":101290,"depth":46,"text":101291},{"id":101413,"depth":46,"text":101414},{"id":101688,"depth":46,"text":101689,"children":111973},[111974,111975,111976],{"id":110344,"depth":78,"text":110345},{"id":110409,"depth":78,"text":110410},{"id":110425,"depth":78,"text":110426},{"id":101896,"depth":46,"text":101897,"children":111978},[111979,111980],{"id":102216,"depth":78,"text":102216},{"id":102352,"depth":78,"text":102352},{"id":102959,"depth":46,"text":102960},{"id":102991,"depth":46,"text":102992},{"id":103096,"depth":46,"text":103097,"children":111984},[111985,111986,111987,111988,111990],{"id":111849,"depth":78,"text":111849},{"id":111860,"depth":78,"text":111860},{"id":111893,"depth":78,"text":111893},{"id":111906,"depth":78,"text":111989},"obs[3] 为什么是杆子角速度",{"id":111929,"depth":78,"text":111930},{"id":103250,"depth":46,"text":103251},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":110080,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111998,"title":111999,"body":112000,"description":31,"extension":824,"meta":114014,"navigation":193,"path":114015,"seo":114016,"stem":114017,"__hash__":114018},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112001,"toc":113990},[112002,112005,112007,112010,112012,112029,112032,112035,112041,112044,112046,112048,112072,112074,112088,112090,112131,112133,112151,112153,112156,112162,112165,112193,112197,112203,112228,112231,112262,112269,112272,112275,112281,112284,112290,112293,112299,112303,112306,112331,112334,112336,113096,113098,113110,113112,113123,113125,113128,113145,113148,113150,113161,113164,113166,113212,113215,113228,113231,113313,113316,113318,113334,113344,113357,113360,113399,113409,113420,113430,113443,113446,113475,113478,113488,113491,113497,113514,113525,113527,113533,113550,113561,113582,113585,113597,113600,113621,113624,113632,113640,113657,113660,113729,113736,113744,113747,113760,113767,113769,113772,113778,113781,113784,113790,113796,113798,113838,113840,113846,113855,113858,113860,113880,113883,113886,113892,113896,113898,113925,113928,113931,113958,113964,113967,113970,113972,113975,113978,113984,113987],[10,112003,111999],{"id":112004},"_7控制任务reacher-机械臂到达目标",[21,112006,101291],{"id":101290},[14,112008,112009],{},"本章搭建一个二维两关节 reacher 任务。",[14,112011,104975],{},[851,112013,112014,112017,112020,112023,112026],{},[854,112015,112016],{},"两个 hinge joint",[854,112018,112019],{},"两个 motor actuator",[854,112021,112022],{},"site 作为末端点和目标点",[854,112024,112025],{},"根据末端和目标距离设计 reward",[854,112027,112028],{},"构造机械臂任务的基本形式",[14,112030,112031],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,112033,112034],{},"Reacher 任务可以理解为：",[26,112036,112039],{"className":112037,"code":112038,"language":5935,"meta":31},[5933],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[33,112040,112038],{"__ignoreMap":31},[14,112042,112043],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[21,112045,101414],{"id":101413},[14,112047,101417],{},[26,112049,112050],{"className":24566,"code":105032,"language":24568,"meta":31,"style":31},[33,112051,112052],{"__ignoreMap":31},[36,112053,112054,112056,112058,112060,112062,112064,112066,112068,112070],{"class":38,"line":39},[36,112055,25321],{"class":2713},[36,112057,27060],{"class":998},[36,112059,24578],{"class":998},[36,112061,27145],{"class":60},[36,112063,105047],{"class":998},[36,112065,101442],{"class":998},[36,112067,103145],{"class":998},[36,112069,101458],{"class":998},[36,112071,105056],{"class":998},[14,112073,103463],{},[26,112075,112076],{"className":24566,"code":101563,"language":24568,"meta":31,"style":31},[33,112077,112078],{"__ignoreMap":31},[36,112079,112080,112082,112084,112086],{"class":38,"line":39},[36,112081,24575],{"class":2713},[36,112083,24578],{"class":998},[36,112085,101574],{"class":998},[36,112087,101577],{"class":998},[14,112089,103480],{},[26,112091,112093],{"className":24566,"code":112092,"language":24568,"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,112094,112095,112112,112121],{"__ignoreMap":31},[36,112096,112097,112099,112101,112103,112106,112108,112110],{"class":38,"line":39},[36,112098,31075],{"class":2713},[36,112100,29921],{"class":998},[36,112102,25860],{"class":60},[36,112104,112105],{"class":998}," mujoco-reacher",[36,112107,101619],{"class":998},[36,112109,101622],{"class":60},[36,112111,101625],{"class":60},[36,112113,112114,112116,112118],{"class":38,"line":46},[36,112115,31075],{"class":2713},[36,112117,101632],{"class":998},[36,112119,112120],{"class":998}," mujoco-reacher\n",[36,112122,112123,112125,112127,112129],{"class":38,"line":78},[36,112124,24575],{"class":2713},[36,112126,24578],{"class":998},[36,112128,101574],{"class":998},[36,112130,101577],{"class":998},[14,112132,101648],{},[851,112134,112135,112138,112141],{},[854,112136,112137],{},"本章使用低维状态，不使用图像输入。",[854,112139,112140],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[854,112142,112143,112144,1104,112146,1104,112148,112150],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[33,112145,104674],{},[33,112147,105004],{},[33,112149,104324],{}," 的方法一致。",[21,112152,101689],{"id":101688},[14,112154,112155],{},"Reacher 任务核心:",[26,112157,112160],{"className":112158,"code":112159,"language":5935,"meta":31},[5933],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[33,112161,112159],{"__ignoreMap":31},[14,112163,112164],{},"读取 site 世界坐标:",[26,112166,112168],{"className":28,"code":112167,"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,112169,112170,112183],{"__ignoreMap":31},[36,112171,112172,112174,112176,112178,112181],{"class":38,"line":39},[36,112173,104278],{"class":49},[36,112175,54],{"class":53},[36,112177,104049],{"class":49},[36,112179,112180],{"class":998},"\"tip\"",[36,112182,75],{"class":49},[36,112184,112185,112188,112190],{"class":38,"line":46},[36,112186,112187],{"class":49},"tip_pos ",[36,112189,54],{"class":53},[36,112191,112192],{"class":49}," data.site_xpos[site_id]\n",[868,112194,112196],{"id":112195},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,112198,112199,112200,112202],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[33,112201,104674],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[26,112204,112206],{"className":28,"code":112205,"language":30,"meta":31,"style":31},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[33,112207,112208,112218],{"__ignoreMap":31},[36,112209,112210,112213,112215],{"class":38,"line":39},[36,112211,112212],{"class":49},"tip ",[36,112214,54],{"class":53},[36,112216,112217],{"class":49}," data.site_xpos[tip_site_id]\n",[36,112219,112220,112223,112225],{"class":38,"line":46},[36,112221,112222],{"class":49},"target ",[36,112224,54],{"class":53},[36,112226,112227],{"class":49}," data.site_xpos[target_site_id]\n",[14,112229,112230],{},"这样 reward 就很容易写：",[26,112232,112234],{"className":28,"code":112233,"language":30,"meta":31,"style":31},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[33,112235,112236,112251],{"__ignoreMap":31},[36,112237,112238,112241,112243,112246,112248],{"class":38,"line":39},[36,112239,112240],{"class":49},"dist ",[36,112242,54],{"class":53},[36,112244,112245],{"class":49}," np.linalg.norm(tip ",[36,112247,1414],{"class":53},[36,112249,112250],{"class":49}," target)\n",[36,112252,112253,112255,112257,112259],{"class":38,"line":46},[36,112254,111649],{"class":49},[36,112256,54],{"class":53},[36,112258,53013],{"class":53},[36,112260,112261],{"class":49},"dist\n",[14,112263,112264,112265,112268],{},"距离越小，",[33,112266,112267],{},"-dist"," 越接近 0，奖励越高。",[868,112270,112271],{"id":112271},"两关节机械臂的状态",[14,112273,112274],{},"这个模型有两个 hinge joint：",[26,112276,112279],{"className":112277,"code":112278,"language":5935,"meta":31},[5933],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[33,112280,112278],{"__ignoreMap":31},[14,112282,112283],{},"再加上末端和目标位置：",[26,112285,112288],{"className":112286,"code":112287,"language":5935,"meta":31},[5933],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[33,112289,112287],{"__ignoreMap":31},[14,112291,112292],{},"总维度：",[26,112294,112297],{"className":112295,"code":112296,"language":5935,"meta":31},[5933],"2 + 2 + 3 + 3 = 10\n",[33,112298,112296],{"__ignoreMap":31},[868,112300,112302],{"id":112301},"为什么-gravity-是-0","为什么 gravity 是 0",[14,112304,112305],{},"本章把重力设为：",[26,112307,112309],{"className":53809,"code":112308,"language":53811,"meta":31,"style":31},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[33,112310,112311],{"__ignoreMap":31},[36,112312,112313,112315,112317,112319,112321,112323,112325,112327,112329],{"class":38,"line":39},[36,112314,1789],{"class":49},[36,112316,69908],{"class":52042},[36,112318,101838],{"class":2713},[36,112320,54],{"class":49},[36,112322,101843],{"class":998},[36,112324,101846],{"class":2713},[36,112326,54],{"class":49},[36,112328,104415],{"class":998},[36,112330,101788],{"class":49},[14,112332,112333],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[21,112335,101897],{"id":101896},[26,112337,112339],{"className":28,"code":112338,"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,112340,112341,112347,112357,112361,112365,112373,112378,112383,112387,112391,112396,112401,112405,112410,112415,112420,112424,112429,112434,112439,112444,112448,112452,112456,112460,112464,112469,112474,112478,112482,112486,112490,112494,112509,112518,112530,112553,112560,112564,112568,112578,112592,112606,112613,112617,112621,112635,112647,112659,112672,112687,112704,112708,112712,112724,112736,112744,112752,112756,112772,112777,112790,112803,112818,112822,112857,112889,112893,112897,112906,112910,112926,112936,112947,112963,112979,112995,113011,113015,113033,113053,113072,113076,113080,113092],{"__ignoreMap":31},[36,112342,112343,112345],{"class":38,"line":39},[36,112344,31135],{"class":53},[36,112346,101945],{"class":49},[36,112348,112349,112351,112353,112355],{"class":38,"line":46},[36,112350,31135],{"class":53},[36,112352,32122],{"class":49},[36,112354,32125],{"class":53},[36,112356,32128],{"class":49},[36,112358,112359],{"class":38,"line":78},[36,112360,194],{"emptyLinePlaceholder":193},[36,112362,112363],{"class":38,"line":125},[36,112364,194],{"emptyLinePlaceholder":193},[36,112366,112367,112369,112371],{"class":38,"line":131},[36,112368,101958],{"class":60},[36,112370,14308],{"class":53},[36,112372,101963],{"class":998},[36,112374,112375],{"class":38,"line":396},[36,112376,112377],{"class":998},"\u003Cmujoco model=\"two_link_reacher\">\n",[36,112379,112380],{"class":38,"line":407},[36,112381,112382],{"class":998},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[36,112384,112385],{"class":38,"line":2061},[36,112386,194],{"emptyLinePlaceholder":193},[36,112388,112389],{"class":38,"line":2067},[36,112390,101982],{"class":998},[36,112392,112393],{"class":38,"line":2079},[36,112394,112395],{"class":998},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[36,112397,112398],{"class":38,"line":2362},[36,112399,112400],{"class":998},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[36,112402,112403],{"class":38,"line":2367},[36,112404,194],{"emptyLinePlaceholder":193},[36,112406,112407],{"class":38,"line":2373},[36,112408,112409],{"class":998},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[36,112411,112412],{"class":38,"line":2378},[36,112413,112414],{"class":998},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[36,112416,112417],{"class":38,"line":2392},[36,112418,112419],{"class":998},"      \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,112421,112422],{"class":38,"line":2397},[36,112423,194],{"emptyLinePlaceholder":193},[36,112425,112426],{"class":38,"line":2403},[36,112427,112428],{"class":998},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[36,112430,112431],{"class":38,"line":2424},[36,112432,112433],{"class":998},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[36,112435,112436],{"class":38,"line":2429},[36,112437,112438],{"class":998},"        \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,112440,112441],{"class":38,"line":2443},[36,112442,112443],{"class":998},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[36,112445,112446],{"class":38,"line":2448},[36,112447,107082],{"class":998},[36,112449,112450],{"class":38,"line":2477},[36,112451,102011],{"class":998},[36,112453,112454],{"class":38,"line":2482},[36,112455,102016],{"class":998},[36,112457,112458],{"class":38,"line":2499},[36,112459,194],{"emptyLinePlaceholder":193},[36,112461,112462],{"class":38,"line":2504},[36,112463,107099],{"class":998},[36,112465,112466],{"class":38,"line":2509},[36,112467,112468],{"class":998},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[36,112470,112471],{"class":38,"line":2514},[36,112472,112473],{"class":998},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[36,112475,112476],{"class":38,"line":2528},[36,112477,107109],{"class":998},[36,112479,112480],{"class":38,"line":2533},[36,112481,102021],{"class":998},[36,112483,112484],{"class":38,"line":3326},[36,112485,96342],{"class":998},[36,112487,112488],{"class":38,"line":3340},[36,112489,194],{"emptyLinePlaceholder":193},[36,112491,112492],{"class":38,"line":3348},[36,112493,194],{"emptyLinePlaceholder":193},[36,112495,112496,112498,112501,112504,112506],{"class":38,"line":3353},[36,112497,32689],{"class":53},[36,112499,112500],{"class":2713}," site_position",[36,112502,112503],{"class":49},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[36,112505,2049],{"class":60},[36,112507,112508],{"class":49},") -> np.ndarray:\n",[36,112510,112511,112513,112515],{"class":38,"line":3359},[36,112512,104044],{"class":49},[36,112514,54],{"class":53},[36,112516,112517],{"class":49}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[36,112519,112520,112522,112524,112526,112528],{"class":38,"line":3365},[36,112521,3850],{"class":53},[36,112523,104093],{"class":49},[36,112525,1789],{"class":53},[36,112527,4842],{"class":60},[36,112529,4488],{"class":49},[36,112531,112532,112534,112536,112538,112540,112543,112545,112547,112549,112551],{"class":38,"line":3370},[36,112533,104076],{"class":53},[36,112535,104079],{"class":60},[36,112537,901],{"class":49},[36,112539,949],{"class":53},[36,112541,112542],{"class":998},"\"site not found: ",[36,112544,1775],{"class":60},[36,112546,80552],{"class":49},[36,112548,1825],{"class":60},[36,112550,1141],{"class":998},[36,112552,75],{"class":49},[36,112554,112555,112557],{"class":38,"line":8695},[36,112556,4839],{"class":53},[36,112558,112559],{"class":49}," data.site_xpos[site_id].copy()\n",[36,112561,112562],{"class":38,"line":8719},[36,112563,194],{"emptyLinePlaceholder":193},[36,112565,112566],{"class":38,"line":8724},[36,112567,194],{"emptyLinePlaceholder":193},[36,112569,112570,112572,112575],{"class":38,"line":8730},[36,112571,32689],{"class":53},[36,112573,112574],{"class":2713}," get_obs",[36,112576,112577],{"class":49},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[36,112579,112580,112583,112585,112588,112590],{"class":38,"line":8757},[36,112581,112582],{"class":49},"    tip ",[36,112584,54],{"class":53},[36,112586,112587],{"class":49}," site_position(model, data, ",[36,112589,112180],{"class":998},[36,112591,75],{"class":49},[36,112593,112594,112597,112599,112601,112604],{"class":38,"line":8762},[36,112595,112596],{"class":49},"    target ",[36,112598,54],{"class":53},[36,112600,112587],{"class":49},[36,112602,112603],{"class":998},"\"target\"",[36,112605,75],{"class":49},[36,112607,112608,112610],{"class":38,"line":8768},[36,112609,4839],{"class":53},[36,112611,112612],{"class":49}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[36,112614,112615],{"class":38,"line":8780},[36,112616,194],{"emptyLinePlaceholder":193},[36,112618,112619],{"class":38,"line":8792},[36,112620,194],{"emptyLinePlaceholder":193},[36,112622,112623,112625,112628,112631,112633],{"class":38,"line":8804},[36,112624,32689],{"class":53},[36,112626,112627],{"class":2713}," reward",[36,112629,112630],{"class":49},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[36,112632,478],{"class":60},[36,112634,4488],{"class":49},[36,112636,112637,112639,112641,112643,112645],{"class":38,"line":10463},[36,112638,112582],{"class":49},[36,112640,54],{"class":53},[36,112642,112587],{"class":49},[36,112644,112180],{"class":998},[36,112646,75],{"class":49},[36,112648,112649,112651,112653,112655,112657],{"class":38,"line":10488},[36,112650,112596],{"class":49},[36,112652,54],{"class":53},[36,112654,112587],{"class":49},[36,112656,112603],{"class":998},[36,112658,75],{"class":49},[36,112660,112661,112664,112666,112668,112670],{"class":38,"line":10511},[36,112662,112663],{"class":49},"    dist ",[36,112665,54],{"class":53},[36,112667,112245],{"class":49},[36,112669,1414],{"class":53},[36,112671,112250],{"class":49},[36,112673,112674,112677,112679,112682,112684],{"class":38,"line":10535},[36,112675,112676],{"class":49},"    control_cost ",[36,112678,54],{"class":53},[36,112680,112681],{"class":60}," 0.01",[36,112683,7265],{"class":53},[36,112685,112686],{"class":49}," np.sum(np.square(data.ctrl))\n",[36,112688,112689,112691,112693,112695,112697,112699,112701],{"class":38,"line":10540},[36,112690,4839],{"class":53},[36,112692,110441],{"class":60},[36,112694,901],{"class":49},[36,112696,1414],{"class":53},[36,112698,112240],{"class":49},[36,112700,1414],{"class":53},[36,112702,112703],{"class":49}," control_cost)\n",[36,112705,112706],{"class":38,"line":10545},[36,112707,194],{"emptyLinePlaceholder":193},[36,112709,112710],{"class":38,"line":10550},[36,112711,194],{"emptyLinePlaceholder":193},[36,112713,112714,112716,112718,112720,112722],{"class":38,"line":10559},[36,112715,32689],{"class":53},[36,112717,2723],{"class":2713},[36,112719,102042],{"class":49},[36,112721,96330],{"class":60},[36,112723,4488],{"class":49},[36,112725,112726,112728,112730,112732,112734],{"class":38,"line":10564},[36,112727,102051],{"class":49},[36,112729,54],{"class":53},[36,112731,102056],{"class":49},[36,112733,101958],{"class":60},[36,112735,75],{"class":49},[36,112737,112738,112740,112742],{"class":38,"line":10570},[36,112739,102065],{"class":49},[36,112741,54],{"class":53},[36,112743,102070],{"class":49},[36,112745,112746,112748,112750],{"class":38,"line":10591},[36,112747,110797],{"class":49},[36,112749,54],{"class":53},[36,112751,105405],{"class":60},[36,112753,112754],{"class":38,"line":10597},[36,112755,194],{"emptyLinePlaceholder":193},[36,112757,112758,112760,112762,112764,112766,112768,112770],{"class":38,"line":10611},[36,112759,3950],{"class":53},[36,112761,32358],{"class":49},[36,112763,26788],{"class":53},[36,112765,33185],{"class":60},[36,112767,901],{"class":49},[36,112769,65816],{"class":60},[36,112771,31528],{"class":49},[36,112773,112774],{"class":38,"line":10617},[36,112775,112776],{"class":49},"        mujoco.mj_forward(model, data)\n",[36,112778,112779,112782,112784,112786,112788],{"class":38,"line":10644},[36,112780,112781],{"class":49},"        tip ",[36,112783,54],{"class":53},[36,112785,112587],{"class":49},[36,112787,112180],{"class":998},[36,112789,75],{"class":49},[36,112791,112792,112795,112797,112799,112801],{"class":38,"line":10653},[36,112793,112794],{"class":49},"        target ",[36,112796,54],{"class":53},[36,112798,112587],{"class":49},[36,112800,112603],{"class":998},[36,112802,75],{"class":49},[36,112804,112805,112808,112810,112813,112815],{"class":38,"line":10659},[36,112806,112807],{"class":49},"        error ",[36,112809,54],{"class":53},[36,112811,112812],{"class":49}," target ",[36,112814,1414],{"class":53},[36,112816,112817],{"class":49}," tip\n",[36,112819,112820],{"class":38,"line":10667},[36,112821,194],{"emptyLinePlaceholder":193},[36,112823,112824,112826,112828,112830,112832,112835,112837,112839,112842,112844,112847,112849,112851,112853,112855],{"class":38,"line":10672},[36,112825,107261],{"class":49},[36,112827,643],{"class":60},[36,112829,5192],{"class":49},[36,112831,54],{"class":53},[36,112833,112834],{"class":49}," np.clip(",[36,112836,105904],{"class":60},[36,112838,7265],{"class":53},[36,112840,112841],{"class":49}," error[",[36,112843,181],{"class":60},[36,112845,112846],{"class":49},"], ",[36,112848,1414],{"class":53},[36,112850,103047],{"class":60},[36,112852,154],{"class":49},[36,112854,103047],{"class":60},[36,112856,75],{"class":49},[36,112858,112859,112861,112863,112865,112867,112869,112871,112873,112875,112877,112879,112881,112883,112885,112887],{"class":38,"line":17348},[36,112860,107261],{"class":49},[36,112862,61],{"class":60},[36,112864,5192],{"class":49},[36,112866,54],{"class":53},[36,112868,112834],{"class":49},[36,112870,105904],{"class":60},[36,112872,7265],{"class":53},[36,112874,112841],{"class":49},[36,112876,643],{"class":60},[36,112878,112846],{"class":49},[36,112880,1414],{"class":53},[36,112882,103047],{"class":60},[36,112884,154],{"class":49},[36,112886,103047],{"class":60},[36,112888,75],{"class":49},[36,112890,112891],{"class":38,"line":17354},[36,112892,194],{"emptyLinePlaceholder":193},[36,112894,112895],{"class":38,"line":17377},[36,112896,102160],{"class":49},[36,112898,112899,112901,112903],{"class":38,"line":17383},[36,112900,110941],{"class":49},[36,112902,10224],{"class":53},[36,112904,112905],{"class":49}," reward(model, data)\n",[36,112907,112908],{"class":38,"line":17406},[36,112909,194],{"emptyLinePlaceholder":193},[36,112911,112912,112914,112916,112918,112920,112922,112924],{"class":38,"line":17420},[36,112913,3246],{"class":53},[36,112915,32358],{"class":49},[36,112917,1214],{"class":53},[36,112919,6501],{"class":60},[36,112921,102203],{"class":53},[36,112923,4842],{"class":60},[36,112925,4488],{"class":49},[36,112927,112928,112931,112933],{"class":38,"line":17440},[36,112929,112930],{"class":49},"            obs ",[36,112932,54],{"class":53},[36,112934,112935],{"class":49}," get_obs(model, data)\n",[36,112937,112938,112940,112942,112944],{"class":38,"line":17446},[36,112939,35392],{"class":60},[36,112941,901],{"class":49},[36,112943,110975],{"class":998},[36,112945,112946],{"class":49},", step)\n",[36,112948,112949,112951,112953,112956,112959,112961],{"class":38,"line":17457},[36,112950,35392],{"class":60},[36,112952,901],{"class":49},[36,112954,112955],{"class":998},"\"  tip:\"",[36,112957,112958],{"class":49},", np.round(tip, ",[36,112960,162],{"class":60},[36,112962,31239],{"class":49},[36,112964,112965,112967,112969,112972,112975,112977],{"class":38,"line":17480},[36,112966,35392],{"class":60},[36,112968,901],{"class":49},[36,112970,112971],{"class":998},"\"  target:\"",[36,112973,112974],{"class":49},", np.round(target, ",[36,112976,162],{"class":60},[36,112978,31239],{"class":49},[36,112980,112981,112983,112985,112988,112991,112993],{"class":38,"line":17502},[36,112982,35392],{"class":60},[36,112984,901],{"class":49},[36,112986,112987],{"class":998},"\"  ctrl:\"",[36,112989,112990],{"class":49},", np.round(data.ctrl.copy(), ",[36,112992,162],{"class":60},[36,112994,31239],{"class":49},[36,112996,112997,112999,113001,113004,113007,113009],{"class":38,"line":17507},[36,112998,35392],{"class":60},[36,113000,901],{"class":49},[36,113002,113003],{"class":998},"\"  obs_dim:\"",[36,113005,113006],{"class":49},", obs.shape[",[36,113008,643],{"class":60},[36,113010,165],{"class":49},[36,113012,113013],{"class":38,"line":17513},[36,113014,194],{"emptyLinePlaceholder":193},[36,113016,113017,113019,113021,113023,113025,113027,113029,113031],{"class":38,"line":17527},[36,113018,32041],{"class":60},[36,113020,901],{"class":49},[36,113022,111020],{"class":998},[36,113024,154],{"class":49},[36,113026,32760],{"class":60},[36,113028,111027],{"class":49},[36,113030,162],{"class":60},[36,113032,31239],{"class":49},[36,113034,113035,113037,113039,113042,113045,113047,113049,113051],{"class":38,"line":17540},[36,113036,32041],{"class":60},[36,113038,901],{"class":49},[36,113040,113041],{"class":998},"\"final tip:\"",[36,113043,113044],{"class":49},", np.round(site_position(model, data, ",[36,113046,112180],{"class":998},[36,113048,110989],{"class":49},[36,113050,162],{"class":60},[36,113052,31239],{"class":49},[36,113054,113055,113057,113059,113062,113064,113066,113068,113070],{"class":38,"line":17545},[36,113056,32041],{"class":60},[36,113058,901],{"class":49},[36,113060,113061],{"class":998},"\"target:\"",[36,113063,113044],{"class":49},[36,113065,112603],{"class":998},[36,113067,110989],{"class":49},[36,113069,162],{"class":60},[36,113071,31239],{"class":49},[36,113073,113074],{"class":38,"line":17559},[36,113075,194],{"emptyLinePlaceholder":193},[36,113077,113078],{"class":38,"line":17564},[36,113079,194],{"emptyLinePlaceholder":193},[36,113081,113082,113084,113086,113088,113090],{"class":38,"line":17570},[36,113083,2281],{"class":53},[36,113085,31962],{"class":60},[36,113087,102203],{"class":53},[36,113089,102206],{"class":998},[36,113091,4488],{"class":49},[36,113093,113094],{"class":38,"line":17575},[36,113095,102213],{"class":49},[14,113097,104214],{},[26,113099,113101],{"className":24566,"code":113100,"language":24568,"meta":31,"style":31},"touch ch7_reacher.py\n",[33,113102,113103],{"__ignoreMap":31},[36,113104,113105,113107],{"class":38,"line":39},[36,113106,101927],{"class":2713},[36,113108,113109],{"class":998}," ch7_reacher.py\n",[14,113111,111088],{},[26,113113,113115],{"className":24566,"code":113114,"language":24568,"meta":31,"style":31},"python ch7_reacher.py\n",[33,113116,113117],{"__ignoreMap":31},[36,113118,113119,113121],{"class":38,"line":39},[36,113120,30],{"class":2713},[36,113122,113109],{"class":998},[868,113124,102216],{"id":102216},[14,113126,113127],{},"读取 site 坐标：",[26,113129,113131],{"className":28,"code":113130,"language":30,"meta":31,"style":31},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[33,113132,113133],{"__ignoreMap":31},[36,113134,113135,113137,113139,113141,113143],{"class":38,"line":39},[36,113136,32689],{"class":53},[36,113138,112500],{"class":2713},[36,113140,112503],{"class":49},[36,113142,2049],{"class":60},[36,113144,112508],{"class":49},[14,113146,113147],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,113149,111104],{},[26,113151,113153],{"className":28,"code":113152,"language":30,"meta":31,"style":31},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[33,113154,113155],{"__ignoreMap":31},[36,113156,113157,113159],{"class":38,"line":39},[36,113158,17790],{"class":53},[36,113160,112612],{"class":49},[14,113162,113163],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,113165,110429],{},[26,113167,113169],{"className":28,"code":113168,"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,113170,113171,113183,113196],{"__ignoreMap":31},[36,113172,113173,113175,113177,113179,113181],{"class":38,"line":39},[36,113174,112240],{"class":49},[36,113176,54],{"class":53},[36,113178,112245],{"class":49},[36,113180,1414],{"class":53},[36,113182,112250],{"class":49},[36,113184,113185,113188,113190,113192,113194],{"class":38,"line":46},[36,113186,113187],{"class":49},"control_cost ",[36,113189,54],{"class":53},[36,113191,112681],{"class":60},[36,113193,7265],{"class":53},[36,113195,112686],{"class":49},[36,113197,113198,113200,113202,113204,113206,113208,113210],{"class":38,"line":78},[36,113199,17790],{"class":53},[36,113201,110441],{"class":60},[36,113203,901],{"class":49},[36,113205,1414],{"class":53},[36,113207,112240],{"class":49},[36,113209,1414],{"class":53},[36,113211,112703],{"class":49},[14,113213,113214],{},"奖励由两部分组成：",[851,113216,113217,113222],{},[854,113218,113219,113221],{},[33,113220,112267],{},"：末端离目标越远，奖励越低。",[854,113223,113224,113227],{},[33,113225,113226],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,113229,113230],{},"简单控制器：",[26,113232,113234],{"className":28,"code":113233,"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,113235,113236,113249,113281],{"__ignoreMap":31},[36,113237,113238,113241,113243,113245,113247],{"class":38,"line":39},[36,113239,113240],{"class":49},"error ",[36,113242,54],{"class":53},[36,113244,112812],{"class":49},[36,113246,1414],{"class":53},[36,113248,112817],{"class":49},[36,113250,113251,113253,113255,113257,113259,113261,113263,113265,113267,113269,113271,113273,113275,113277,113279],{"class":38,"line":46},[36,113252,106515],{"class":49},[36,113254,643],{"class":60},[36,113256,5192],{"class":49},[36,113258,54],{"class":53},[36,113260,112834],{"class":49},[36,113262,105904],{"class":60},[36,113264,7265],{"class":53},[36,113266,112841],{"class":49},[36,113268,181],{"class":60},[36,113270,112846],{"class":49},[36,113272,1414],{"class":53},[36,113274,103047],{"class":60},[36,113276,154],{"class":49},[36,113278,103047],{"class":60},[36,113280,75],{"class":49},[36,113282,113283,113285,113287,113289,113291,113293,113295,113297,113299,113301,113303,113305,113307,113309,113311],{"class":38,"line":78},[36,113284,106515],{"class":49},[36,113286,61],{"class":60},[36,113288,5192],{"class":49},[36,113290,54],{"class":53},[36,113292,112834],{"class":49},[36,113294,105904],{"class":60},[36,113296,7265],{"class":53},[36,113298,112841],{"class":49},[36,113300,643],{"class":60},[36,113302,112846],{"class":49},[36,113304,1414],{"class":53},[36,113306,103047],{"class":60},[36,113308,154],{"class":49},[36,113310,103047],{"class":60},[36,113312,75],{"class":49},[14,113314,113315],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[868,113317,102352],{"id":102352},[26,113319,113320],{"className":28,"code":113130,"language":30,"meta":31,"style":31},[33,113321,113322],{"__ignoreMap":31},[36,113323,113324,113326,113328,113330,113332],{"class":38,"line":39},[36,113325,32689],{"class":53},[36,113327,112500],{"class":2713},[36,113329,112503],{"class":49},[36,113331,2049],{"class":60},[36,113333,112508],{"class":49},[14,113335,113336,113337,113339,113340,83281,113342,29130],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[33,113338,80552],{}," 是 site 的名字，比如 ",[33,113341,112180],{},[33,113343,112603],{},[26,113345,113347],{"className":28,"code":113346,"language":30,"meta":31,"style":31},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[33,113348,113349],{"__ignoreMap":31},[36,113350,113351,113353,113355],{"class":38,"line":39},[36,113352,104278],{"class":49},[36,113354,54],{"class":53},[36,113356,112517],{"class":49},[14,113358,113359],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[26,113361,113363],{"className":28,"code":113362,"language":30,"meta":31,"style":31},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[33,113364,113365,113377],{"__ignoreMap":31},[36,113366,113367,113369,113371,113373,113375],{"class":38,"line":39},[36,113368,2281],{"class":53},[36,113370,104093],{"class":49},[36,113372,1789],{"class":53},[36,113374,4842],{"class":60},[36,113376,4488],{"class":49},[36,113378,113379,113381,113383,113385,113387,113389,113391,113393,113395,113397],{"class":38,"line":46},[36,113380,104539],{"class":53},[36,113382,104079],{"class":60},[36,113384,901],{"class":49},[36,113386,949],{"class":53},[36,113388,112542],{"class":998},[36,113390,1775],{"class":60},[36,113392,80552],{"class":49},[36,113394,1825],{"class":60},[36,113396,1141],{"class":998},[36,113398,75],{"class":49},[14,113400,113401,113402,113405,113406,113408],{},"如果 site 没找到，就主动报错。",[33,113403,113404],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[33,113407,80552],{}," 的值放进字符串里。",[26,113410,113412],{"className":28,"code":113411,"language":30,"meta":31,"style":31},"return data.site_xpos[site_id].copy()\n",[33,113413,113414],{"__ignoreMap":31},[36,113415,113416,113418],{"class":38,"line":39},[36,113417,17790],{"class":53},[36,113419,112559],{"class":49},[14,113421,113422,113423,113425,113426,113429],{},"返回这个 site 的世界坐标。",[33,113424,104324],{}," 里的每一行都是一个 site 的 ",[33,113427,113428],{},"(x, y, z)"," 坐标。",[26,113431,113433],{"className":28,"code":113432,"language":30,"meta":31,"style":31},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[33,113434,113435],{"__ignoreMap":31},[36,113436,113437,113439,113441],{"class":38,"line":39},[36,113438,32689],{"class":53},[36,113440,112574],{"class":2713},[36,113442,112577],{"class":49},[14,113444,113445],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[26,113447,113449],{"className":28,"code":113448,"language":30,"meta":31,"style":31},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[33,113450,113451,113463],{"__ignoreMap":31},[36,113452,113453,113455,113457,113459,113461],{"class":38,"line":39},[36,113454,112212],{"class":49},[36,113456,54],{"class":53},[36,113458,112587],{"class":49},[36,113460,112180],{"class":998},[36,113462,75],{"class":49},[36,113464,113465,113467,113469,113471,113473],{"class":38,"line":46},[36,113466,112222],{"class":49},[36,113468,54],{"class":53},[36,113470,112587],{"class":49},[36,113472,112603],{"class":998},[36,113474,75],{"class":49},[14,113476,113477],{},"分别读取末端点和目标点的世界坐标。",[26,113479,113480],{"className":28,"code":113152,"language":30,"meta":31,"style":31},[33,113481,113482],{"__ignoreMap":31},[36,113483,113484,113486],{"class":38,"line":39},[36,113485,17790],{"class":53},[36,113487,112612],{"class":49},[14,113489,113490],{},"把四部分拼成一个观测数组：",[26,113492,113495],{"className":113493,"code":113494,"language":5935,"meta":31},[5933],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[33,113496,113494],{"__ignoreMap":31},[26,113498,113500],{"className":28,"code":113499,"language":30,"meta":31,"style":31},"dist = np.linalg.norm(tip - target)\n",[33,113501,113502],{"__ignoreMap":31},[36,113503,113504,113506,113508,113510,113512],{"class":38,"line":39},[36,113505,112240],{"class":49},[36,113507,54],{"class":53},[36,113509,112245],{"class":49},[36,113511,1414],{"class":53},[36,113513,112250],{"class":49},[14,113515,113516,113517,113520,113521,113524],{},"计算 tip 到 target 的距离。",[33,113518,113519],{},"tip - target"," 得到一个三维向量，",[33,113522,113523],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,113526,15377],{},[26,113528,113531],{"className":113529,"code":113530,"language":5935,"meta":31},[5933],"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,113532,113530],{"__ignoreMap":31},[26,113534,113536],{"className":28,"code":113535,"language":30,"meta":31,"style":31},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[33,113537,113538],{"__ignoreMap":31},[36,113539,113540,113542,113544,113546,113548],{"class":38,"line":39},[36,113541,113187],{"class":49},[36,113543,54],{"class":53},[36,113545,112681],{"class":60},[36,113547,7265],{"class":53},[36,113549,112686],{"class":49},[14,113551,113552,113553,113556,113557,113560],{},"计算动作惩罚。",[33,113554,113555],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[33,113558,113559],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[26,113562,113564],{"className":28,"code":113563,"language":30,"meta":31,"style":31},"return float(-dist - control_cost)\n",[33,113565,113566],{"__ignoreMap":31},[36,113567,113568,113570,113572,113574,113576,113578,113580],{"class":38,"line":39},[36,113569,17790],{"class":53},[36,113571,110441],{"class":60},[36,113573,901],{"class":49},[36,113575,1414],{"class":53},[36,113577,112240],{"class":49},[36,113579,1414],{"class":53},[36,113581,112703],{"class":49},[14,113583,113584],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[26,113586,113587],{"className":28,"code":111447,"language":30,"meta":31,"style":31},[33,113588,113589],{"__ignoreMap":31},[36,113590,113591,113593,113595],{"class":38,"line":39},[36,113592,111454],{"class":49},[36,113594,54],{"class":53},[36,113596,105405],{"class":60},[14,113598,113599],{},"累计奖励变量，记录整个运行过程的总分。",[26,113601,113603],{"className":28,"code":113602,"language":30,"meta":31,"style":31},"for step in range(500):\n",[33,113604,113605],{"__ignoreMap":31},[36,113606,113607,113609,113611,113613,113615,113617,113619],{"class":38,"line":39},[36,113608,3774],{"class":53},[36,113610,32358],{"class":49},[36,113612,26788],{"class":53},[36,113614,33185],{"class":60},[36,113616,901],{"class":49},[36,113618,65816],{"class":60},[36,113620,31528],{"class":49},[14,113622,113623],{},"运行 500 个控制步。",[26,113625,113626],{"className":28,"code":105187,"language":30,"meta":31,"style":31},[33,113627,113628],{"__ignoreMap":31},[36,113629,113630],{"class":38,"line":39},[36,113631,105187],{"class":49},[14,113633,113634,113635,101662,113637,113639],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[33,113636,103875],{},[33,113638,103878],{}," 是当前状态下的坐标。",[26,113641,113643],{"className":28,"code":113642,"language":30,"meta":31,"style":31},"error = target - tip\n",[33,113644,113645],{"__ignoreMap":31},[36,113646,113647,113649,113651,113653,113655],{"class":38,"line":39},[36,113648,113240],{"class":49},[36,113650,54],{"class":53},[36,113652,112812],{"class":49},[36,113654,1414],{"class":53},[36,113656,112817],{"class":49},[14,113658,113659],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[26,113661,113663],{"className":28,"code":113662,"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,113664,113665,113697],{"__ignoreMap":31},[36,113666,113667,113669,113671,113673,113675,113677,113679,113681,113683,113685,113687,113689,113691,113693,113695],{"class":38,"line":39},[36,113668,106515],{"class":49},[36,113670,643],{"class":60},[36,113672,5192],{"class":49},[36,113674,54],{"class":53},[36,113676,112834],{"class":49},[36,113678,105904],{"class":60},[36,113680,7265],{"class":53},[36,113682,112841],{"class":49},[36,113684,181],{"class":60},[36,113686,112846],{"class":49},[36,113688,1414],{"class":53},[36,113690,103047],{"class":60},[36,113692,154],{"class":49},[36,113694,103047],{"class":60},[36,113696,75],{"class":49},[36,113698,113699,113701,113703,113705,113707,113709,113711,113713,113715,113717,113719,113721,113723,113725,113727],{"class":38,"line":46},[36,113700,106515],{"class":49},[36,113702,61],{"class":60},[36,113704,5192],{"class":49},[36,113706,54],{"class":53},[36,113708,112834],{"class":49},[36,113710,105904],{"class":60},[36,113712,7265],{"class":53},[36,113714,112841],{"class":49},[36,113716,643],{"class":60},[36,113718,112846],{"class":49},[36,113720,1414],{"class":53},[36,113722,103047],{"class":60},[36,113724,154],{"class":49},[36,113726,103047],{"class":60},[36,113728,75],{"class":49},[14,113730,113731,113732,113735],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[33,113733,113734],{},"error -> ctrl -> step"," 的流程。",[26,113737,113738],{"className":28,"code":105149,"language":30,"meta":31,"style":31},[33,113739,113740],{"__ignoreMap":31},[36,113741,113742],{"class":38,"line":39},[36,113743,105149],{"class":49},[14,113745,113746],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[26,113748,113750],{"className":28,"code":113749,"language":30,"meta":31,"style":31},"obs = get_obs(model, data)\n",[33,113751,113752],{"__ignoreMap":31},[36,113753,113754,113756,113758],{"class":38,"line":39},[36,113755,111498],{"class":49},[36,113757,54],{"class":53},[36,113759,112935],{"class":49},[14,113761,113762,113763,113766],{},"读取最新观测。后面打印 ",[33,113764,113765],{},"obs.shape[0]","，用来确认观测维度是 10。",[21,113768,102960],{"id":102959},[14,113770,113771],{},"观测维度为:",[26,113773,113776],{"className":113774,"code":113775,"language":5935,"meta":31},[5933],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[33,113777,113775],{"__ignoreMap":31},[14,113779,113780],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113782,113783],{},"程序每 100 步打印：",[26,113785,113788],{"className":113786,"code":113787,"language":5935,"meta":31},[5933],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[33,113789,113787],{"__ignoreMap":31},[14,113791,113792,113793,113795],{},"如果控制有效，你应该看到最终 ",[33,113794,103875],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[21,113797,102992],{"id":102991},[851,113799,113800,113803,113806,113812,113818,113825,113835],{},[854,113801,113802],{},"修改目标点位置。",[854,113804,113805],{},"重新运行，观察最终 tip 是否变化。",[854,113807,113808,113809,113811],{},"把 gravity 改成 ",[33,113810,103233],{},"，观察控制是否变差。",[854,113813,111825,113814,111829,113816,29130],{},[33,113815,102802],{},[33,113817,181],{},[854,113819,103055,113820,103058,113822,113824],{},[33,113821,111240],{},[33,113823,107951],{},"，观察机械臂是否更难移动。",[854,113826,103055,113827,83272,113829,103058,113831,113834],{},[33,113828,103878],{},[33,113830,104790],{},[33,113832,113833],{},"0.2 0 0.6","，观察 reward 和 final tip。",[854,113836,113837],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[21,113839,103097],{"id":103096},[868,113841,113843],{"id":113842},"site-not-found",[33,113844,113845],{},"site not found",[14,113847,113848,113849,101662,113852,29130],{},"检查 XML 中是否有 ",[33,113850,113851],{},"site name=\"tip\"",[33,113853,113854],{},"site name=\"target\"",[868,113856,113857],{"id":113857},"机械臂完全不动",[14,113859,103167],{},[851,113861,113862,113867,113870,113875],{},[854,113863,113864,113866],{},[33,113865,102802],{}," 是否为 2",[854,113868,113869],{},"actuator 是否引用正确 joint",[854,113871,113872,113874],{},[33,113873,101720],{}," 是否被赋值",[854,113876,113877,113878],{},"是否执行了 ",[33,113879,101329],{},[868,113881,113882],{"id":113882},"控制效果不好",[14,113884,113885],{},"正常。本章重点不是控制器最优，而是任务结构:",[26,113887,113890],{"className":113888,"code":113889,"language":5935,"meta":31},[5933],"obs → action → mj_step → reward → next_obs\n",[33,113891,113889],{"__ignoreMap":31},[868,113893,113895],{"id":113894},"tip-坐标不变化","tip 坐标不变化",[14,113897,103219],{},[851,113899,113900,113905,113913,113922],{},[854,113901,113902,113903,29130],{},"是否每步调用了 ",[33,113904,101329],{},[854,113906,113907,113908,101662,113910,29130],{},"是否写入了 ",[33,113909,106770],{},[33,113911,113912],{},"data.ctrl[1]",[854,113914,113915,113916,1104,113919,29130],{},"actuator 是否正确引用 ",[33,113917,113918],{},"joint1",[33,113920,113921],{},"joint2",[854,113923,113924],{},"控制输入是否太小。",[868,113926,113927],{"id":113927},"目标点不会动",[14,113929,113930],{},"本章的 target 是固定 site：",[26,113932,113934],{"className":53809,"code":113933,"language":53811,"meta":31,"style":31},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[33,113935,113936],{"__ignoreMap":31},[36,113937,113938,113940,113942,113944,113946,113948,113950,113952,113955],{"class":38,"line":39},[36,113939,1789],{"class":49},[36,113941,103854],{"class":52042},[36,113943,15664],{"class":2713},[36,113945,54],{"class":49},[36,113947,112603],{"class":998},[36,113949,101750],{"class":2713},[36,113951,54],{"class":49},[36,113953,113954],{"class":998},"\"0.5 0 0.4\"",[36,113956,113957],{"class":49}," ...\u002F>\n",[14,113959,113960,113961,113963],{},"它直接挂在 ",[33,113962,102485],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[868,113965,113966],{"id":113966},"机械臂不像真实机械臂",[14,113968,113969],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[21,113971,103251],{"id":103250},[14,113973,113974],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113976,113977],{},"核心公式：",[26,113979,113982],{"className":113980,"code":113981,"language":5935,"meta":31},[5933],"distance = ||tip - target||\nreward = -distance - action_cost\n",[33,113983,113981],{"__ignoreMap":31},[14,113985,113986],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[807,113988,113989],{},"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":46,"depth":46,"links":113991},[113992,113993,113994,113999,114003,114004,114005,114013],{"id":101290,"depth":46,"text":101291},{"id":101413,"depth":46,"text":101414},{"id":101688,"depth":46,"text":101689,"children":113995},[113996,113997,113998],{"id":112195,"depth":78,"text":112196},{"id":112271,"depth":78,"text":112271},{"id":112301,"depth":78,"text":112302},{"id":101896,"depth":46,"text":101897,"children":114000},[114001,114002],{"id":102216,"depth":78,"text":102216},{"id":102352,"depth":78,"text":102352},{"id":102959,"depth":46,"text":102960},{"id":102991,"depth":46,"text":102992},{"id":103096,"depth":46,"text":103097,"children":114006},[114007,114008,114009,114010,114011,114012],{"id":113842,"depth":78,"text":113845},{"id":113857,"depth":78,"text":113857},{"id":113882,"depth":78,"text":113882},{"id":113894,"depth":78,"text":113895},{"id":113927,"depth":78,"text":113927},{"id":113966,"depth":78,"text":113966},{"id":103250,"depth":46,"text":103251},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111999,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114020,"title":114021,"body":114022,"description":31,"extension":824,"meta":117484,"navigation":193,"path":117485,"seo":117486,"stem":117487,"__hash__":117488},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114023,"toc":117455},[114024,114027,114029,114032,114035,114060,114063,114069,114072,114078,114080,114082,114106,114108,114126,114128,114171,114173,114200,114202,114205,114257,114260,114266,114275,114278,114316,114319,114358,114361,114369,114376,114379,114385,114387,114441,114448,114493,114496,114500,114516,114526,114528,115789,115791,115803,115805,115816,115818,115821,115842,115845,115848,115881,115887,115890,115923,115926,115929,115970,115975,115989,115992,116005,116010,116033,116035,116050,116060,116075,116082,116102,116117,116135,116138,116155,116163,116179,116185,116217,116230,116262,116272,116307,116321,116367,116381,116423,116434,116447,116453,116486,116489,116516,116526,116566,116576,116593,116600,116618,116621,116662,116675,116690,116693,116716,116719,116731,116734,116753,116758,116779,116782,116797,116800,116834,116846,116861,116864,116889,116892,116911,116914,116946,116949,116973,116979,117009,117016,117029,117032,117034,117036,117042,117045,117048,117060,117063,117065,117119,117121,117125,117131,117140,117143,117150,117152,117175,117178,117182,117184,117202,117208,117210,117243,117246,117252,117256,117259,117279,117284,117288,117295,117315,117320,117324,117327,117347,117350,117436,117440,117443,117449,117452],[10,114025,114021],{"id":114026},"_8gymnasium-风格强化学习接口基础",[21,114028,101291],{"id":101290},[14,114030,114031],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,114033,114034],{},"你将实现:",[26,114036,114038],{"className":28,"code":114037,"language":30,"meta":31,"style":31},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[33,114039,114040,114050],{"__ignoreMap":31},[36,114041,114042,114045,114047],{"class":38,"line":39},[36,114043,114044],{"class":49},"obs, info ",[36,114046,54],{"class":53},[36,114048,114049],{"class":49}," env.reset()\n",[36,114051,114052,114055,114057],{"class":38,"line":46},[36,114053,114054],{"class":49},"obs, reward, terminated, truncated, info ",[36,114056,54],{"class":53},[36,114058,114059],{"class":49}," env.step(action)\n",[14,114061,114062],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,114064,114065,114066,114068],{},"前面章节的代码都是“脚本式”的：在 ",[33,114067,102939],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,114070,114071],{},"可以先记住 Gymnasium 环境的核心交互：",[26,114073,114076],{"className":114074,"code":114075,"language":5935,"meta":31},[5933],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[33,114077,114075],{"__ignoreMap":31},[21,114079,101414],{"id":101413},[14,114081,101417],{},[26,114083,114084],{"className":24566,"code":105032,"language":24568,"meta":31,"style":31},[33,114085,114086],{"__ignoreMap":31},[36,114087,114088,114090,114092,114094,114096,114098,114100,114102,114104],{"class":38,"line":39},[36,114089,25321],{"class":2713},[36,114091,27060],{"class":998},[36,114093,24578],{"class":998},[36,114095,27145],{"class":60},[36,114097,105047],{"class":998},[36,114099,101442],{"class":998},[36,114101,103145],{"class":998},[36,114103,101458],{"class":998},[36,114105,105056],{"class":998},[14,114107,103463],{},[26,114109,114111],{"className":24566,"code":114110,"language":24568,"meta":31,"style":31},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[33,114112,114113],{"__ignoreMap":31},[36,114114,114115,114117,114119,114121,114123],{"class":38,"line":39},[36,114116,24575],{"class":2713},[36,114118,24578],{"class":998},[36,114120,101574],{"class":998},[36,114122,108355],{"class":998},[36,114124,114125],{"class":998}," gymnasium\n",[14,114127,103480],{},[26,114129,114131],{"className":24566,"code":114130,"language":24568,"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,114132,114133,114150,114159],{"__ignoreMap":31},[36,114134,114135,114137,114139,114141,114144,114146,114148],{"class":38,"line":39},[36,114136,31075],{"class":2713},[36,114138,29921],{"class":998},[36,114140,25860],{"class":60},[36,114142,114143],{"class":998}," mujoco-gym-api",[36,114145,101619],{"class":998},[36,114147,101622],{"class":60},[36,114149,101625],{"class":60},[36,114151,114152,114154,114156],{"class":38,"line":46},[36,114153,31075],{"class":2713},[36,114155,101632],{"class":998},[36,114157,114158],{"class":998}," mujoco-gym-api\n",[36,114160,114161,114163,114165,114167,114169],{"class":38,"line":78},[36,114162,24575],{"class":2713},[36,114164,24578],{"class":998},[36,114166,101574],{"class":998},[36,114168,108355],{"class":998},[36,114170,114125],{"class":998},[14,114172,101648],{},[851,114174,114175,114185,114188,114194],{},[854,114176,114177,114178,114181,114182,29130],{},"本章使用 ",[33,114179,114180],{},"gymnasium","，不是旧版 ",[33,114183,114184],{},"gym",[854,114186,114187],{},"Gymnasium API 与旧 Gym API 有差异。",[854,114189,114190,114191,29130],{},"旧 Gym 常见返回值是 4 个: ",[33,114192,114193],{},"obs, reward, done, info",[854,114195,114196,114197,29130],{},"Gymnasium 返回值是 5 个: ",[33,114198,114199],{},"obs, reward, terminated, truncated, info",[21,114201,101689],{"id":101688},[14,114203,114204],{},"强化学习环境接口包含:",[1031,114206,114207,114216],{},[1034,114208,114209],{},[1037,114210,114211,114214],{},[1040,114212,114213],{"align":24480},"方法",[1040,114215,103340],{"align":24480},[1078,114217,114218,114228,114238,114248],{},[1037,114219,114220,114225],{},[1083,114221,114222],{"align":24480},[33,114223,114224],{},"reset()",[1083,114226,114227],{"align":24480},"重置环境",[1037,114229,114230,114235],{},[1083,114231,114232],{"align":24480},[33,114233,114234],{},"step(action)",[1083,114236,114237],{"align":24480},"执行动作",[1037,114239,114240,114245],{},[1083,114241,114242],{"align":24480},[33,114243,114244],{},"observation_space",[1083,114246,114247],{"align":24480},"观测空间",[1037,114249,114250,114255],{},[1083,114251,114252],{"align":24480},[33,114253,114254],{},"action_space",[1083,114256,24398],{"align":24480},[14,114258,114259],{},"一个最小环境需要完成:",[26,114261,114264],{"className":114262,"code":114263,"language":5935,"meta":31},[5933],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[33,114265,114263],{"__ignoreMap":31},[868,114267,114269,101662,114272,105282],{"id":114268},"terminated-和-truncated-的区别",[33,114270,114271],{},"terminated",[33,114273,114274],{},"truncated",[14,114276,114277],{},"Gymnasium 把“结束”拆成两个概念：",[1031,114279,114280,114290],{},[1034,114281,114282],{},[1037,114283,114284,114286,114288],{},[1040,114285,105218],{"align":24480},[1040,114287,101344],{"align":24480},[1040,114289,21931],{"align":24480},[1078,114291,114292,114304],{},[1037,114293,114294,114298,114301],{},[1083,114295,114296],{"align":24480},[33,114297,114271],{},[1083,114299,114300],{"align":24480},"任务自然结束",[1083,114302,114303],{"align":24480},"机械臂到达目标、机器人摔倒",[1037,114305,114306,114310,114313],{},[1083,114307,114308],{"align":24480},[33,114309,114274],{},[1083,114311,114312],{"align":24480},"因外部限制截断",[1083,114314,114315],{"align":24480},"达到最大步数、时间限制",[14,114317,114318],{},"本章中：",[26,114320,114322],{"className":28,"code":114321,"language":30,"meta":31,"style":31},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[33,114323,114324,114339],{"__ignoreMap":31},[36,114325,114326,114329,114331,114334,114336],{"class":38,"line":39},[36,114327,114328],{"class":49},"terminated ",[36,114330,54],{"class":53},[36,114332,114333],{"class":49}," dist ",[36,114335,1789],{"class":53},[36,114337,114338],{"class":60}," 0.05\n",[36,114340,114341,114344,114346,114348,114351,114353,114355],{"class":38,"line":46},[36,114342,114343],{"class":49},"truncated ",[36,114345,54],{"class":53},[36,114347,39615],{"class":60},[36,114349,114350],{"class":49},".steps ",[36,114352,2460],{"class":53},[36,114354,39615],{"class":60},[36,114356,114357],{"class":49},".max_steps\n",[14,114359,114360],{},"也就是：",[851,114362,114363,114366],{},[854,114364,114365],{},"末端距离目标小于 0.05，任务成功结束。",[854,114367,114368],{},"步数超过上限，episode 被截断。",[868,114370,114372,101662,114374],{"id":114371},"observation_space-和-action_space",[33,114373,114244],{},[33,114375,114254],{},[14,114377,114378],{},"这两个对象告诉算法：",[26,114380,114383],{"className":114381,"code":114382,"language":5935,"meta":31},[5933],"观测长什么样\n动作允许多大\n",[33,114384,114382],{"__ignoreMap":31},[14,114386,15377],{},[26,114388,114390],{"className":28,"code":114389,"language":30,"meta":31,"style":31},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[33,114391,114392],{"__ignoreMap":31},[36,114393,114394,114396,114399,114401,114404,114407,114410,114412,114414,114417,114419,114421,114423,114425,114427,114429,114431,114434,114436,114438],{"class":38,"line":39},[36,114395,31565],{"class":60},[36,114397,114398],{"class":49},".action_space ",[36,114400,54],{"class":53},[36,114402,114403],{"class":49}," spaces.Box(",[36,114405,114406],{"class":416},"low",[36,114408,114409],{"class":53},"=-",[36,114411,103047],{"class":60},[36,114413,154],{"class":49},[36,114415,114416],{"class":416},"high",[36,114418,54],{"class":53},[36,114420,103047],{"class":60},[36,114422,154],{"class":49},[36,114424,96607],{"class":416},[36,114426,54],{"class":53},[36,114428,901],{"class":49},[36,114430,181],{"class":60},[36,114432,114433],{"class":49},",), ",[36,114435,473],{"class":416},[36,114437,54],{"class":53},[36,114439,114440],{"class":49},"np.float32)\n",[14,114442,114443,114444,114447],{},"表示动作是 2 维数组，每个值都在 ",[33,114445,114446],{},"[-1, 1]"," 范围内。",[26,114449,114451],{"className":28,"code":114450,"language":30,"meta":31,"style":31},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[33,114452,114453],{"__ignoreMap":31},[36,114454,114455,114457,114460,114462,114464,114466,114468,114471,114473,114475,114477,114479,114481,114483,114485,114487,114489,114491],{"class":38,"line":39},[36,114456,31565],{"class":60},[36,114458,114459],{"class":49},".observation_space ",[36,114461,54],{"class":53},[36,114463,114403],{"class":49},[36,114465,114406],{"class":416},[36,114467,114409],{"class":53},[36,114469,114470],{"class":49},"np.inf, ",[36,114472,114416],{"class":416},[36,114474,54],{"class":53},[36,114476,114470],{"class":49},[36,114478,96607],{"class":416},[36,114480,54],{"class":53},[36,114482,901],{"class":49},[36,114484,332],{"class":60},[36,114486,114433],{"class":49},[36,114488,473],{"class":416},[36,114490,54],{"class":53},[36,114492,114440],{"class":49},[14,114494,114495],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[868,114497,114499],{"id":114498},"frame_skip-是什么","frame_skip 是什么",[26,114501,114503],{"className":28,"code":114502,"language":30,"meta":31,"style":31},"self.frame_skip = 5\n",[33,114504,114505],{"__ignoreMap":31},[36,114506,114507,114509,114512,114514],{"class":38,"line":39},[36,114508,31565],{"class":60},[36,114510,114511],{"class":49},".frame_skip ",[36,114513,54],{"class":53},[36,114515,55169],{"class":60},[14,114517,114518,114519,114522,114523,114525],{},"表示外部调用一次 ",[33,114520,114521],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[33,114524,101859],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[21,114527,101897],{"id":101896},[26,114529,114531],{"className":28,"code":114530,"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,114532,114533,114545,114551,114561,114572,114576,114580,114588,114593,114597,114601,114605,114609,114613,114617,114621,114626,114630,114634,114638,114643,114647,114651,114655,114659,114663,114667,114671,114675,114679,114683,114687,114691,114695,114713,114728,114732,114745,114755,114770,114787,114791,114812,114831,114856,114870,114874,114884,114896,114906,114910,114952,114990,114994,115004,115020,115035,115054,115061,115065,115078,115093,115108,115121,115140,115156,115160,115201,115216,115231,115235,115274,115285,115298,115302,115312,115321,115325,115335,115350,115368,115372,115383,115400,115413,115417,115427,115431,115442,115453,115457,115471,115485,115501,115505,115518,115535,115550,115557,115561,115565,115577,115587,115605,115617,115629,115633,115641,115657,115666,115675,115683,115725,115738,115743,115747,115765,115769,115773,115785],{"__ignoreMap":31},[36,114534,114535,114537,114540,114542],{"class":38,"line":39},[36,114536,31135],{"class":53},[36,114538,114539],{"class":49}," gymnasium ",[36,114541,32125],{"class":53},[36,114543,114544],{"class":49}," gym\n",[36,114546,114547,114549],{"class":38,"line":46},[36,114548,31135],{"class":53},[36,114550,101945],{"class":49},[36,114552,114553,114555,114557,114559],{"class":38,"line":78},[36,114554,31135],{"class":53},[36,114556,32122],{"class":49},[36,114558,32125],{"class":53},[36,114560,32128],{"class":49},[36,114562,114563,114565,114567,114569],{"class":38,"line":125},[36,114564,31479],{"class":53},[36,114566,114539],{"class":49},[36,114568,31135],{"class":53},[36,114570,114571],{"class":49}," spaces\n",[36,114573,114574],{"class":38,"line":131},[36,114575,194],{"emptyLinePlaceholder":193},[36,114577,114578],{"class":38,"line":396},[36,114579,194],{"emptyLinePlaceholder":193},[36,114581,114582,114584,114586],{"class":38,"line":407},[36,114583,101958],{"class":60},[36,114585,14308],{"class":53},[36,114587,101963],{"class":998},[36,114589,114590],{"class":38,"line":2061},[36,114591,114592],{"class":998},"\u003Cmujoco model=\"gym_reacher\">\n",[36,114594,114595],{"class":38,"line":2067},[36,114596,112382],{"class":998},[36,114598,114599],{"class":38,"line":2079},[36,114600,194],{"emptyLinePlaceholder":193},[36,114602,114603],{"class":38,"line":2362},[36,114604,101982],{"class":998},[36,114606,114607],{"class":38,"line":2367},[36,114608,112400],{"class":998},[36,114610,114611],{"class":38,"line":2373},[36,114612,194],{"emptyLinePlaceholder":193},[36,114614,114615],{"class":38,"line":2378},[36,114616,112409],{"class":998},[36,114618,114619],{"class":38,"line":2392},[36,114620,112414],{"class":998},[36,114622,114623],{"class":38,"line":2397},[36,114624,114625],{"class":998},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[36,114627,114628],{"class":38,"line":2403},[36,114629,194],{"emptyLinePlaceholder":193},[36,114631,114632],{"class":38,"line":2424},[36,114633,112428],{"class":998},[36,114635,114636],{"class":38,"line":2429},[36,114637,112433],{"class":998},[36,114639,114640],{"class":38,"line":2443},[36,114641,114642],{"class":998},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[36,114644,114645],{"class":38,"line":2448},[36,114646,112443],{"class":998},[36,114648,114649],{"class":38,"line":2477},[36,114650,107082],{"class":998},[36,114652,114653],{"class":38,"line":2482},[36,114654,102011],{"class":998},[36,114656,114657],{"class":38,"line":2499},[36,114658,102016],{"class":998},[36,114660,114661],{"class":38,"line":2504},[36,114662,194],{"emptyLinePlaceholder":193},[36,114664,114665],{"class":38,"line":2509},[36,114666,107099],{"class":998},[36,114668,114669],{"class":38,"line":2514},[36,114670,112468],{"class":998},[36,114672,114673],{"class":38,"line":2528},[36,114674,112473],{"class":998},[36,114676,114677],{"class":38,"line":2533},[36,114678,107109],{"class":998},[36,114680,114681],{"class":38,"line":3326},[36,114682,102021],{"class":998},[36,114684,114685],{"class":38,"line":3340},[36,114686,96342],{"class":998},[36,114688,114689],{"class":38,"line":3348},[36,114690,194],{"emptyLinePlaceholder":193},[36,114692,114693],{"class":38,"line":3353},[36,114694,194],{"emptyLinePlaceholder":193},[36,114696,114697,114699,114702,114704,114706,114708,114711],{"class":38,"line":3359},[36,114698,15438],{"class":53},[36,114700,114701],{"class":2713}," ReacherEnv",[36,114703,901],{"class":49},[36,114705,114184],{"class":2713},[36,114707,1440],{"class":49},[36,114709,114710],{"class":2713},"Env",[36,114712,31528],{"class":49},[36,114714,114715,114718,114720,114722,114725],{"class":38,"line":3365},[36,114716,114717],{"class":49},"    metadata ",[36,114719,54],{"class":53},[36,114721,5197],{"class":49},[36,114723,114724],{"class":998},"\"render_modes\"",[36,114726,114727],{"class":49},": []}\n",[36,114729,114730],{"class":38,"line":3370},[36,114731,194],{"emptyLinePlaceholder":193},[36,114733,114734,114736,114738,114741,114743],{"class":38,"line":8695},[36,114735,31543],{"class":53},[36,114737,31546],{"class":60},[36,114739,114740],{"class":49},"(self) -> ",[36,114742,96330],{"class":60},[36,114744,4488],{"class":49},[36,114746,114747,114749,114751,114753],{"class":38,"line":8719},[36,114748,31559],{"class":60},[36,114750,18005],{"class":49},[36,114752,31571],{"class":60},[36,114754,2726],{"class":49},[36,114756,114757,114759,114762,114764,114766,114768],{"class":38,"line":8724},[36,114758,31587],{"class":60},[36,114760,114761],{"class":49},".model ",[36,114763,54],{"class":53},[36,114765,102056],{"class":49},[36,114767,101958],{"class":60},[36,114769,75],{"class":49},[36,114771,114772,114774,114777,114779,114782,114784],{"class":38,"line":8730},[36,114773,31587],{"class":60},[36,114775,114776],{"class":49},".data ",[36,114778,54],{"class":53},[36,114780,114781],{"class":49}," mujoco.MjData(",[36,114783,31565],{"class":60},[36,114785,114786],{"class":49},".model)\n",[36,114788,114789],{"class":38,"line":8757},[36,114790,194],{"emptyLinePlaceholder":193},[36,114792,114793,114795,114798,114800,114803,114805,114808,114810],{"class":38,"line":8762},[36,114794,31587],{"class":60},[36,114796,114797],{"class":49},".tip_site_id ",[36,114799,54],{"class":53},[36,114801,114802],{"class":49}," mujoco.mj_name2id(",[36,114804,31565],{"class":60},[36,114806,114807],{"class":49},".model, mujoco.mjtObj.mjOBJ_SITE, ",[36,114809,112180],{"class":998},[36,114811,75],{"class":49},[36,114813,114814,114816,114819,114821,114823,114825,114827,114829],{"class":38,"line":8768},[36,114815,31587],{"class":60},[36,114817,114818],{"class":49},".target_site_id ",[36,114820,54],{"class":53},[36,114822,114802],{"class":49},[36,114824,31565],{"class":60},[36,114826,114807],{"class":49},[36,114828,112603],{"class":998},[36,114830,75],{"class":49},[36,114832,114833,114835,114837,114839,114841,114843,114846,114848,114850,114852,114854],{"class":38,"line":8780},[36,114834,3246],{"class":53},[36,114836,39615],{"class":60},[36,114838,114797],{"class":49},[36,114840,1789],{"class":53},[36,114842,4842],{"class":60},[36,114844,114845],{"class":53}," or",[36,114847,39615],{"class":60},[36,114849,114818],{"class":49},[36,114851,1789],{"class":53},[36,114853,4842],{"class":60},[36,114855,4488],{"class":49},[36,114857,114858,114861,114863,114865,114868],{"class":38,"line":8792},[36,114859,114860],{"class":53},"            raise",[36,114862,104079],{"class":60},[36,114864,901],{"class":49},[36,114866,114867],{"class":998},"\"required sites not found\"",[36,114869,75],{"class":49},[36,114871,114872],{"class":38,"line":8804},[36,114873,194],{"emptyLinePlaceholder":193},[36,114875,114876,114878,114880,114882],{"class":38,"line":10463},[36,114877,31587],{"class":60},[36,114879,114511],{"class":49},[36,114881,54],{"class":53},[36,114883,55169],{"class":60},[36,114885,114886,114888,114891,114893],{"class":38,"line":10488},[36,114887,31587],{"class":60},[36,114889,114890],{"class":49},".max_steps ",[36,114892,54],{"class":53},[36,114894,114895],{"class":60}," 200\n",[36,114897,114898,114900,114902,114904],{"class":38,"line":10511},[36,114899,31587],{"class":60},[36,114901,114350],{"class":49},[36,114903,54],{"class":53},[36,114905,48075],{"class":60},[36,114907,114908],{"class":38,"line":10535},[36,114909,194],{"emptyLinePlaceholder":193},[36,114911,114912,114914,114916,114918,114920,114922,114924,114926,114928,114930,114932,114934,114936,114938,114940,114942,114944,114946,114948,114950],{"class":38,"line":10540},[36,114913,31587],{"class":60},[36,114915,114398],{"class":49},[36,114917,54],{"class":53},[36,114919,114403],{"class":49},[36,114921,114406],{"class":416},[36,114923,114409],{"class":53},[36,114925,103047],{"class":60},[36,114927,154],{"class":49},[36,114929,114416],{"class":416},[36,114931,54],{"class":53},[36,114933,103047],{"class":60},[36,114935,154],{"class":49},[36,114937,96607],{"class":416},[36,114939,54],{"class":53},[36,114941,901],{"class":49},[36,114943,181],{"class":60},[36,114945,114433],{"class":49},[36,114947,473],{"class":416},[36,114949,54],{"class":53},[36,114951,114440],{"class":49},[36,114953,114954,114956,114958,114960,114962,114964,114966,114968,114970,114972,114974,114976,114978,114980,114982,114984,114986,114988],{"class":38,"line":10545},[36,114955,31587],{"class":60},[36,114957,114459],{"class":49},[36,114959,54],{"class":53},[36,114961,114403],{"class":49},[36,114963,114406],{"class":416},[36,114965,114409],{"class":53},[36,114967,114470],{"class":49},[36,114969,114416],{"class":416},[36,114971,54],{"class":53},[36,114973,114470],{"class":49},[36,114975,96607],{"class":416},[36,114977,54],{"class":53},[36,114979,901],{"class":49},[36,114981,332],{"class":60},[36,114983,114433],{"class":49},[36,114985,473],{"class":416},[36,114987,54],{"class":53},[36,114989,114440],{"class":49},[36,114991,114992],{"class":38,"line":10550},[36,114993,194],{"emptyLinePlaceholder":193},[36,114995,114996,114998,115001],{"class":38,"line":10559},[36,114997,31543],{"class":53},[36,114999,115000],{"class":2713}," _get_obs",[36,115002,115003],{"class":49},"(self) -> np.ndarray:\n",[36,115005,115006,115008,115010,115012,115015,115017],{"class":38,"line":10564},[36,115007,112781],{"class":49},[36,115009,54],{"class":53},[36,115011,39615],{"class":60},[36,115013,115014],{"class":49},".data.site_xpos[",[36,115016,31565],{"class":60},[36,115018,115019],{"class":49},".tip_site_id].copy()\n",[36,115021,115022,115024,115026,115028,115030,115032],{"class":38,"line":10570},[36,115023,112794],{"class":49},[36,115025,54],{"class":53},[36,115027,39615],{"class":60},[36,115029,115014],{"class":49},[36,115031,31565],{"class":60},[36,115033,115034],{"class":49},".target_site_id].copy()\n",[36,115036,115037,115039,115041,115044,115046,115049,115051],{"class":38,"line":10591},[36,115038,110826],{"class":49},[36,115040,54],{"class":53},[36,115042,115043],{"class":49}," np.concatenate([",[36,115045,31565],{"class":60},[36,115047,115048],{"class":49},".data.qpos.copy(), ",[36,115050,31565],{"class":60},[36,115052,115053],{"class":49},".data.qvel.copy(), tip, target])\n",[36,115055,115056,115058],{"class":38,"line":10597},[36,115057,15496],{"class":53},[36,115059,115060],{"class":49}," obs.astype(np.float32)\n",[36,115062,115063],{"class":38,"line":10611},[36,115064,194],{"emptyLinePlaceholder":193},[36,115066,115067,115069,115072,115074,115076],{"class":38,"line":10617},[36,115068,31543],{"class":53},[36,115070,115071],{"class":2713}," _get_reward",[36,115073,114740],{"class":49},[36,115075,478],{"class":60},[36,115077,4488],{"class":49},[36,115079,115080,115082,115084,115086,115088,115090],{"class":38,"line":10644},[36,115081,112781],{"class":49},[36,115083,54],{"class":53},[36,115085,39615],{"class":60},[36,115087,115014],{"class":49},[36,115089,31565],{"class":60},[36,115091,115092],{"class":49},".tip_site_id]\n",[36,115094,115095,115097,115099,115101,115103,115105],{"class":38,"line":10653},[36,115096,112794],{"class":49},[36,115098,54],{"class":53},[36,115100,39615],{"class":60},[36,115102,115014],{"class":49},[36,115104,31565],{"class":60},[36,115106,115107],{"class":49},".target_site_id]\n",[36,115109,115110,115113,115115,115117,115119],{"class":38,"line":10659},[36,115111,115112],{"class":49},"        dist ",[36,115114,54],{"class":53},[36,115116,112245],{"class":49},[36,115118,1414],{"class":53},[36,115120,112250],{"class":49},[36,115122,115123,115126,115128,115130,115132,115135,115137],{"class":38,"line":10667},[36,115124,115125],{"class":49},"        control_cost ",[36,115127,54],{"class":53},[36,115129,112681],{"class":60},[36,115131,7265],{"class":53},[36,115133,115134],{"class":49}," np.sum(np.square(",[36,115136,31565],{"class":60},[36,115138,115139],{"class":49},".data.ctrl))\n",[36,115141,115142,115144,115146,115148,115150,115152,115154],{"class":38,"line":10672},[36,115143,15496],{"class":53},[36,115145,110441],{"class":60},[36,115147,901],{"class":49},[36,115149,1414],{"class":53},[36,115151,112240],{"class":49},[36,115153,1414],{"class":53},[36,115155,112703],{"class":49},[36,115157,115158],{"class":38,"line":17348},[36,115159,194],{"emptyLinePlaceholder":193},[36,115161,115162,115164,115167,115170,115172,115175,115177,115179,115181,115183,115185,115188,115191,115193,115195,115197,115199],{"class":38,"line":17354},[36,115163,31543],{"class":53},[36,115165,115166],{"class":2713}," reset",[36,115168,115169],{"class":49},"(self, ",[36,115171,1339],{"class":53},[36,115173,115174],{"class":49},", seed: ",[36,115176,904],{"class":60},[36,115178,25854],{"class":53},[36,115180,39675],{"class":60},[36,115182,14308],{"class":53},[36,115184,39675],{"class":60},[36,115186,115187],{"class":49},", options: ",[36,115189,115190],{"class":60},"dict",[36,115192,25854],{"class":53},[36,115194,39675],{"class":60},[36,115196,14308],{"class":53},[36,115198,39675],{"class":60},[36,115200,31528],{"class":49},[36,115202,115203,115205,115208,115211,115213],{"class":38,"line":17377},[36,115204,31559],{"class":60},[36,115206,115207],{"class":49},"().reset(",[36,115209,115210],{"class":416},"seed",[36,115212,54],{"class":53},[36,115214,115215],{"class":49},"seed)\n",[36,115217,115218,115221,115223,115226,115228],{"class":38,"line":17383},[36,115219,115220],{"class":49},"        mujoco.mj_resetData(",[36,115222,31565],{"class":60},[36,115224,115225],{"class":49},".model, ",[36,115227,31565],{"class":60},[36,115229,115230],{"class":49},".data)\n",[36,115232,115233],{"class":38,"line":17406},[36,115234,194],{"emptyLinePlaceholder":193},[36,115236,115237,115239,115242,115244,115246,115249,115251,115253,115255,115257,115259,115261,115263,115265,115267,115269,115271],{"class":38,"line":17420},[36,115238,31587],{"class":60},[36,115240,115241],{"class":49},".data.qpos[:] ",[36,115243,54],{"class":53},[36,115245,39615],{"class":60},[36,115247,115248],{"class":49},".np_random.uniform(",[36,115250,114406],{"class":416},[36,115252,114409],{"class":53},[36,115254,86952],{"class":60},[36,115256,154],{"class":49},[36,115258,114416],{"class":416},[36,115260,54],{"class":53},[36,115262,86952],{"class":60},[36,115264,154],{"class":49},[36,115266,32238],{"class":416},[36,115268,54],{"class":53},[36,115270,31565],{"class":60},[36,115272,115273],{"class":49},".model.nq)\n",[36,115275,115276,115278,115281,115283],{"class":38,"line":17440},[36,115277,31587],{"class":60},[36,115279,115280],{"class":49},".data.qvel[:] ",[36,115282,54],{"class":53},[36,115284,105405],{"class":60},[36,115286,115287,115290,115292,115294,115296],{"class":38,"line":17446},[36,115288,115289],{"class":49},"        mujoco.mj_forward(",[36,115291,31565],{"class":60},[36,115293,115225],{"class":49},[36,115295,31565],{"class":60},[36,115297,115230],{"class":49},[36,115299,115300],{"class":38,"line":17457},[36,115301,194],{"emptyLinePlaceholder":193},[36,115303,115304,115306,115308,115310],{"class":38,"line":17480},[36,115305,31587],{"class":60},[36,115307,114350],{"class":49},[36,115309,54],{"class":53},[36,115311,48075],{"class":60},[36,115313,115314,115316,115318],{"class":38,"line":17502},[36,115315,15496],{"class":53},[36,115317,39615],{"class":60},[36,115319,115320],{"class":49},"._get_obs(), {}\n",[36,115322,115323],{"class":38,"line":17507},[36,115324,194],{"emptyLinePlaceholder":193},[36,115326,115327,115329,115332],{"class":38,"line":17513},[36,115328,31543],{"class":53},[36,115330,115331],{"class":2713}," step",[36,115333,115334],{"class":49},"(self, action):\n",[36,115336,115337,115339,115341,115344,115346,115348],{"class":38,"line":17527},[36,115338,110866],{"class":49},[36,115340,54],{"class":53},[36,115342,115343],{"class":49}," np.asarray(action, ",[36,115345,473],{"class":416},[36,115347,54],{"class":53},[36,115349,114440],{"class":49},[36,115351,115352,115354,115356,115358,115360,115363,115365],{"class":38,"line":17540},[36,115353,110866],{"class":49},[36,115355,54],{"class":53},[36,115357,108091],{"class":49},[36,115359,31565],{"class":60},[36,115361,115362],{"class":49},".action_space.low, ",[36,115364,31565],{"class":60},[36,115366,115367],{"class":49},".action_space.high)\n",[36,115369,115370],{"class":38,"line":17545},[36,115371,194],{"emptyLinePlaceholder":193},[36,115373,115374,115376,115379,115381],{"class":38,"line":17559},[36,115375,31587],{"class":60},[36,115377,115378],{"class":49},".data.ctrl[:] ",[36,115380,54],{"class":53},[36,115382,108114],{"class":49},[36,115384,115385,115387,115389,115391,115393,115395,115397],{"class":38,"line":17564},[36,115386,4152],{"class":53},[36,115388,102145],{"class":49},[36,115390,26788],{"class":53},[36,115392,33185],{"class":60},[36,115394,901],{"class":49},[36,115396,31565],{"class":60},[36,115398,115399],{"class":49},".frame_skip):\n",[36,115401,115402,115405,115407,115409,115411],{"class":38,"line":17570},[36,115403,115404],{"class":49},"            mujoco.mj_step(",[36,115406,31565],{"class":60},[36,115408,115225],{"class":49},[36,115410,31565],{"class":60},[36,115412,115230],{"class":49},[36,115414,115415],{"class":38,"line":17575},[36,115416,194],{"emptyLinePlaceholder":193},[36,115418,115419,115421,115423,115425],{"class":38,"line":17589},[36,115420,31587],{"class":60},[36,115422,114350],{"class":49},[36,115424,10224],{"class":53},[36,115426,56441],{"class":60},[36,115428,115429],{"class":38,"line":17594},[36,115430,194],{"emptyLinePlaceholder":193},[36,115432,115433,115435,115437,115439],{"class":38,"line":17599},[36,115434,110826],{"class":49},[36,115436,54],{"class":53},[36,115438,39615],{"class":60},[36,115440,115441],{"class":49},"._get_obs()\n",[36,115443,115444,115446,115448,115450],{"class":38,"line":17613},[36,115445,110931],{"class":49},[36,115447,54],{"class":53},[36,115449,39615],{"class":60},[36,115451,115452],{"class":49},"._get_reward()\n",[36,115454,115455],{"class":38,"line":17625},[36,115456,194],{"emptyLinePlaceholder":193},[36,115458,115459,115461,115463,115465,115467,115469],{"class":38,"line":17630},[36,115460,112781],{"class":49},[36,115462,54],{"class":53},[36,115464,39615],{"class":60},[36,115466,115014],{"class":49},[36,115468,31565],{"class":60},[36,115470,115092],{"class":49},[36,115472,115473,115475,115477,115479,115481,115483],{"class":38,"line":17643},[36,115474,112794],{"class":49},[36,115476,54],{"class":53},[36,115478,39615],{"class":60},[36,115480,115014],{"class":49},[36,115482,31565],{"class":60},[36,115484,115107],{"class":49},[36,115486,115487,115489,115491,115493,115496,115498],{"class":38,"line":17648},[36,115488,115112],{"class":49},[36,115490,54],{"class":53},[36,115492,110441],{"class":60},[36,115494,115495],{"class":49},"(np.linalg.norm(tip ",[36,115497,1414],{"class":53},[36,115499,115500],{"class":49}," target))\n",[36,115502,115503],{"class":38,"line":17653},[36,115504,194],{"emptyLinePlaceholder":193},[36,115506,115507,115510,115512,115514,115516],{"class":38,"line":17658},[36,115508,115509],{"class":49},"        terminated ",[36,115511,54],{"class":53},[36,115513,114333],{"class":49},[36,115515,1789],{"class":53},[36,115517,114338],{"class":60},[36,115519,115520,115523,115525,115527,115529,115531,115533],{"class":38,"line":17671},[36,115521,115522],{"class":49},"        truncated ",[36,115524,54],{"class":53},[36,115526,39615],{"class":60},[36,115528,114350],{"class":49},[36,115530,2460],{"class":53},[36,115532,39615],{"class":60},[36,115534,114357],{"class":49},[36,115536,115537,115540,115542,115544,115547],{"class":38,"line":17676},[36,115538,115539],{"class":49},"        info ",[36,115541,54],{"class":53},[36,115543,5197],{"class":49},[36,115545,115546],{"class":998},"\"distance\"",[36,115548,115549],{"class":49},": dist}\n",[36,115551,115552,115554],{"class":38,"line":33375},[36,115553,15496],{"class":53},[36,115555,115556],{"class":49}," obs, reward, terminated, truncated, info\n",[36,115558,115559],{"class":38,"line":33381},[36,115560,194],{"emptyLinePlaceholder":193},[36,115562,115563],{"class":38,"line":33387},[36,115564,194],{"emptyLinePlaceholder":193},[36,115566,115567,115569,115571,115573,115575],{"class":38,"line":33393},[36,115568,32689],{"class":53},[36,115570,2723],{"class":2713},[36,115572,102042],{"class":49},[36,115574,96330],{"class":60},[36,115576,4488],{"class":49},[36,115578,115579,115582,115584],{"class":38,"line":33399},[36,115580,115581],{"class":49},"    env ",[36,115583,54],{"class":53},[36,115585,115586],{"class":49}," ReacherEnv()\n",[36,115588,115589,115592,115594,115597,115599,115601,115603],{"class":38,"line":33410},[36,115590,115591],{"class":49},"    obs, info ",[36,115593,54],{"class":53},[36,115595,115596],{"class":49}," env.reset(",[36,115598,115210],{"class":416},[36,115600,54],{"class":53},[36,115602,643],{"class":60},[36,115604,75],{"class":49},[36,115606,115607,115609,115611,115614],{"class":38,"line":33416},[36,115608,32041],{"class":60},[36,115610,901],{"class":49},[36,115612,115613],{"class":998},"\"initial obs shape:\"",[36,115615,115616],{"class":49},", obs.shape)\n",[36,115618,115619,115621,115623,115626],{"class":38,"line":33436},[36,115620,32041],{"class":60},[36,115622,901],{"class":49},[36,115624,115625],{"class":998},"\"initial info:\"",[36,115627,115628],{"class":49},", info)\n",[36,115630,115631],{"class":38,"line":33442},[36,115632,194],{"emptyLinePlaceholder":193},[36,115634,115635,115637,115639],{"class":38,"line":33453},[36,115636,110797],{"class":49},[36,115638,54],{"class":53},[36,115640,105405],{"class":60},[36,115642,115643,115645,115647,115649,115651,115653,115655],{"class":38,"line":33459},[36,115644,3950],{"class":53},[36,115646,32358],{"class":49},[36,115648,26788],{"class":53},[36,115650,33185],{"class":60},[36,115652,901],{"class":49},[36,115654,72],{"class":60},[36,115656,31528],{"class":49},[36,115658,115659,115661,115663],{"class":38,"line":33465},[36,115660,110866],{"class":49},[36,115662,54],{"class":53},[36,115664,115665],{"class":49}," env.action_space.sample()\n",[36,115667,115668,115671,115673],{"class":38,"line":33471},[36,115669,115670],{"class":49},"        obs, reward, terminated, truncated, info ",[36,115672,54],{"class":53},[36,115674,114059],{"class":49},[36,115676,115677,115679,115681],{"class":38,"line":33477},[36,115678,110941],{"class":49},[36,115680,10224],{"class":53},[36,115682,110946],{"class":49},[36,115684,115685,115687,115689,115691,115693,115696,115698,115700,115703,115705,115707,115710,115712,115714,115717,115719,115721,115723],{"class":38,"line":33483},[36,115686,33193],{"class":60},[36,115688,901],{"class":49},[36,115690,110975],{"class":998},[36,115692,110978],{"class":49},[36,115694,115695],{"class":998},"\"reward:\"",[36,115697,154],{"class":49},[36,115699,32760],{"class":60},[36,115701,115702],{"class":49},"(reward, ",[36,115704,162],{"class":60},[36,115706,110989],{"class":49},[36,115708,115709],{"class":998},"\"distance:\"",[36,115711,154],{"class":49},[36,115713,32760],{"class":60},[36,115715,115716],{"class":49},"(info[",[36,115718,115546],{"class":998},[36,115720,112846],{"class":49},[36,115722,162],{"class":60},[36,115724,31239],{"class":49},[36,115726,115727,115729,115732,115735],{"class":38,"line":33489},[36,115728,3246],{"class":53},[36,115730,115731],{"class":49}," terminated ",[36,115733,115734],{"class":53},"or",[36,115736,115737],{"class":49}," truncated:\n",[36,115739,115740],{"class":38,"line":33495},[36,115741,115742],{"class":53},"            break\n",[36,115744,115745],{"class":38,"line":33515},[36,115746,194],{"emptyLinePlaceholder":193},[36,115748,115749,115751,115753,115755,115757,115759,115761,115763],{"class":38,"line":33521},[36,115750,32041],{"class":60},[36,115752,901],{"class":49},[36,115754,111020],{"class":998},[36,115756,154],{"class":49},[36,115758,32760],{"class":60},[36,115760,111027],{"class":49},[36,115762,162],{"class":60},[36,115764,31239],{"class":49},[36,115766,115767],{"class":38,"line":33537},[36,115768,194],{"emptyLinePlaceholder":193},[36,115770,115771],{"class":38,"line":33543},[36,115772,194],{"emptyLinePlaceholder":193},[36,115774,115775,115777,115779,115781,115783],{"class":38,"line":33557},[36,115776,2281],{"class":53},[36,115778,31962],{"class":60},[36,115780,102203],{"class":53},[36,115782,102206],{"class":998},[36,115784,4488],{"class":49},[36,115786,115787],{"class":38,"line":33563},[36,115788,102213],{"class":49},[14,115790,104214],{},[26,115792,115794],{"className":24566,"code":115793,"language":24568,"meta":31,"style":31},"touch ch8_gym_env.py\n",[33,115795,115796],{"__ignoreMap":31},[36,115797,115798,115800],{"class":38,"line":39},[36,115799,101927],{"class":2713},[36,115801,115802],{"class":998}," ch8_gym_env.py\n",[14,115804,111088],{},[26,115806,115808],{"className":24566,"code":115807,"language":24568,"meta":31,"style":31},"python ch8_gym_env.py\n",[33,115809,115810],{"__ignoreMap":31},[36,115811,115812,115814],{"class":38,"line":39},[36,115813,30],{"class":2713},[36,115815,115802],{"class":998},[868,115817,102216],{"id":102216},[14,115819,115820],{},"继承 Gymnasium 环境：",[26,115822,115824],{"className":28,"code":115823,"language":30,"meta":31,"style":31},"class ReacherEnv(gym.Env):\n",[33,115825,115826],{"__ignoreMap":31},[36,115827,115828,115830,115832,115834,115836,115838,115840],{"class":38,"line":39},[36,115829,15438],{"class":53},[36,115831,114701],{"class":2713},[36,115833,901],{"class":49},[36,115835,114184],{"class":2713},[36,115837,1440],{"class":49},[36,115839,114710],{"class":2713},[36,115841,31528],{"class":49},[14,115843,115844],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115846,115847],{},"初始化模型：",[26,115849,115851],{"className":28,"code":115850,"language":30,"meta":31,"style":31},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[33,115852,115853,115867],{"__ignoreMap":31},[36,115854,115855,115857,115859,115861,115863,115865],{"class":38,"line":39},[36,115856,31565],{"class":60},[36,115858,114761],{"class":49},[36,115860,54],{"class":53},[36,115862,102056],{"class":49},[36,115864,101958],{"class":60},[36,115866,75],{"class":49},[36,115868,115869,115871,115873,115875,115877,115879],{"class":38,"line":46},[36,115870,31565],{"class":60},[36,115872,114776],{"class":49},[36,115874,54],{"class":53},[36,115876,114781],{"class":49},[36,115878,31565],{"class":60},[36,115880,114786],{"class":49},[14,115882,115883,115884,115886],{},"这和前面章节一样，只是现在放到了类的 ",[33,115885,31571],{}," 里。",[14,115888,115889],{},"缓存 site ID：",[26,115891,115893],{"className":28,"code":115892,"language":30,"meta":31,"style":31},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[33,115894,115895,115909],{"__ignoreMap":31},[36,115896,115897,115899,115901,115903,115905,115907],{"class":38,"line":39},[36,115898,31565],{"class":60},[36,115900,114797],{"class":49},[36,115902,54],{"class":53},[36,115904,114802],{"class":49},[36,115906,90296],{"class":60},[36,115908,75],{"class":49},[36,115910,115911,115913,115915,115917,115919,115921],{"class":38,"line":46},[36,115912,31565],{"class":60},[36,115914,114818],{"class":49},[36,115916,54],{"class":53},[36,115918,114802],{"class":49},[36,115920,90296],{"class":60},[36,115922,75],{"class":49},[14,115924,115925],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115927,115928],{},"reset：",[26,115930,115932],{"className":28,"code":115931,"language":30,"meta":31,"style":31},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[33,115933,115934],{"__ignoreMap":31},[36,115935,115936,115938,115940,115942,115944,115946,115948,115950,115952,115954,115956,115958,115960,115962,115964,115966,115968],{"class":38,"line":39},[36,115937,32689],{"class":53},[36,115939,115166],{"class":2713},[36,115941,115169],{"class":49},[36,115943,1339],{"class":53},[36,115945,115174],{"class":49},[36,115947,904],{"class":60},[36,115949,25854],{"class":53},[36,115951,39675],{"class":60},[36,115953,14308],{"class":53},[36,115955,39675],{"class":60},[36,115957,115187],{"class":49},[36,115959,115190],{"class":60},[36,115961,25854],{"class":53},[36,115963,39675],{"class":60},[36,115965,14308],{"class":53},[36,115967,39675],{"class":60},[36,115969,31528],{"class":49},[14,115971,115972,115974],{},[33,115973,70798],{}," 做四件事：",[851,115976,115977,115980,115983,115986],{},[854,115978,115979],{},"设置随机种子。",[854,115981,115982],{},"重置 MuJoCo data。",[854,115984,115985],{},"随机初始化关节角。",[854,115987,115988],{},"返回初始观测和 info。",[14,115990,115991],{},"step：",[26,115993,115995],{"className":28,"code":115994,"language":30,"meta":31,"style":31},"def step(self, action):\n",[33,115996,115997],{"__ignoreMap":31},[36,115998,115999,116001,116003],{"class":38,"line":39},[36,116000,32689],{"class":53},[36,116002,115331],{"class":2713},[36,116004,115334],{"class":49},[14,116006,116007,116009],{},[33,116008,107778],{}," 做六件事：",[851,116011,116012,116015,116021,116024,116027,116030],{},[854,116013,116014],{},"检查并裁剪 action。",[854,116016,116017,116018,29130],{},"写入 ",[33,116019,116020],{},"self.data.ctrl",[854,116022,116023],{},"连续推进若干个 MuJoCo 物理步。",[854,116025,116026],{},"计算新观测。",[854,116028,116029],{},"计算奖励和结束条件。",[854,116031,116032],{},"返回 Gymnasium 标准五元组。",[868,116034,102352],{"id":102352},[26,116036,116038],{"className":28,"code":116037,"language":30,"meta":31,"style":31},"import gymnasium as gym\n",[33,116039,116040],{"__ignoreMap":31},[36,116041,116042,116044,116046,116048],{"class":38,"line":39},[36,116043,31135],{"class":53},[36,116045,114539],{"class":49},[36,116047,32125],{"class":53},[36,116049,114544],{"class":49},[14,116051,116052,116053,116055,116056,116059],{},"导入 Gymnasium，并起别名 ",[33,116054,114184],{},"。后面写 ",[33,116057,116058],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[26,116061,116063],{"className":28,"code":116062,"language":30,"meta":31,"style":31},"from gymnasium import spaces\n",[33,116064,116065],{"__ignoreMap":31},[36,116066,116067,116069,116071,116073],{"class":38,"line":39},[36,116068,31479],{"class":53},[36,116070,114539],{"class":49},[36,116072,31135],{"class":53},[36,116074,114571],{"class":49},[14,116076,116077,116078,116081],{},"导入空间定义工具。",[33,116079,116080],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[26,116083,116084],{"className":28,"code":115823,"language":30,"meta":31,"style":31},[33,116085,116086],{"__ignoreMap":31},[36,116087,116088,116090,116092,116094,116096,116098,116100],{"class":38,"line":39},[36,116089,15438],{"class":53},[36,116091,114701],{"class":2713},[36,116093,901],{"class":49},[36,116095,114184],{"class":2713},[36,116097,1440],{"class":49},[36,116099,114710],{"class":2713},[36,116101,31528],{"class":49},[14,116103,116104,116105,116108,116109,116111,116112,101662,116114,116116],{},"定义一个类，名字叫 ",[33,116106,116107],{},"ReacherEnv","。括号里的 ",[33,116110,116058],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[33,116113,70798],{},[33,116115,107778],{}," 这两个核心方法。",[26,116118,116120],{"className":28,"code":116119,"language":30,"meta":31,"style":31},"metadata = {\"render_modes\": []}\n",[33,116121,116122],{"__ignoreMap":31},[36,116123,116124,116127,116129,116131,116133],{"class":38,"line":39},[36,116125,116126],{"class":49},"metadata ",[36,116128,54],{"class":53},[36,116130,5197],{"class":49},[36,116132,114724],{"class":998},[36,116134,114727],{"class":49},[14,116136,116137],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[26,116139,116141],{"className":28,"code":116140,"language":30,"meta":31,"style":31},"def __init__(self) -> None:\n",[33,116142,116143],{"__ignoreMap":31},[36,116144,116145,116147,116149,116151,116153],{"class":38,"line":39},[36,116146,32689],{"class":53},[36,116148,31546],{"class":60},[36,116150,114740],{"class":49},[36,116152,96330],{"class":60},[36,116154,4488],{"class":49},[14,116156,116157,116159,116160,29130],{},[33,116158,31571],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[33,116161,116162],{},"env = ReacherEnv()",[26,116164,116166],{"className":28,"code":116165,"language":30,"meta":31,"style":31},"super().__init__()\n",[33,116167,116168],{"__ignoreMap":31},[36,116169,116170,116173,116175,116177],{"class":38,"line":39},[36,116171,116172],{"class":60},"super",[36,116174,18005],{"class":49},[36,116176,31571],{"class":60},[36,116178,2726],{"class":49},[14,116180,116181,116182,116184],{},"调用父类 ",[33,116183,116058],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[26,116186,116187],{"className":28,"code":115850,"language":30,"meta":31,"style":31},[33,116188,116189,116203],{"__ignoreMap":31},[36,116190,116191,116193,116195,116197,116199,116201],{"class":38,"line":39},[36,116192,31565],{"class":60},[36,116194,114761],{"class":49},[36,116196,54],{"class":53},[36,116198,102056],{"class":49},[36,116200,101958],{"class":60},[36,116202,75],{"class":49},[36,116204,116205,116207,116209,116211,116213,116215],{"class":38,"line":46},[36,116206,31565],{"class":60},[36,116208,114776],{"class":49},[36,116210,54],{"class":53},[36,116212,114781],{"class":49},[36,116214,31565],{"class":60},[36,116216,114786],{"class":49},[14,116218,116219,116220,116222,116223,101662,116226,116229],{},"把 MuJoCo 模型和状态保存到 ",[33,116221,31565],{}," 上。",[33,116224,116225],{},"self.model",[33,116227,116228],{},"self.data"," 表示这个环境对象自己的模型和状态。",[26,116231,116232],{"className":28,"code":115892,"language":30,"meta":31,"style":31},[33,116233,116234,116248],{"__ignoreMap":31},[36,116235,116236,116238,116240,116242,116244,116246],{"class":38,"line":39},[36,116237,31565],{"class":60},[36,116239,114797],{"class":49},[36,116241,54],{"class":53},[36,116243,114802],{"class":49},[36,116245,90296],{"class":60},[36,116247,75],{"class":49},[36,116249,116250,116252,116254,116256,116258,116260],{"class":38,"line":46},[36,116251,31565],{"class":60},[36,116253,114818],{"class":49},[36,116255,54],{"class":53},[36,116257,114802],{"class":49},[36,116259,90296],{"class":60},[36,116261,75],{"class":49},[14,116263,116264,116265,101662,116268,116271],{},"提前查好 tip 和 target 的 site ID。这样 ",[33,116266,116267],{},"_get_obs",[33,116269,116270],{},"_get_reward"," 里就不用每次按名字查找。",[26,116273,116275],{"className":28,"code":116274,"language":30,"meta":31,"style":31},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[33,116276,116277,116287,116297],{"__ignoreMap":31},[36,116278,116279,116281,116283,116285],{"class":38,"line":39},[36,116280,31565],{"class":60},[36,116282,114511],{"class":49},[36,116284,54],{"class":53},[36,116286,55169],{"class":60},[36,116288,116289,116291,116293,116295],{"class":38,"line":46},[36,116290,31565],{"class":60},[36,116292,114890],{"class":49},[36,116294,54],{"class":53},[36,116296,114895],{"class":60},[36,116298,116299,116301,116303,116305],{"class":38,"line":78},[36,116300,31565],{"class":60},[36,116302,114350],{"class":49},[36,116304,54],{"class":53},[36,116306,48075],{"class":60},[14,116308,116309,116312,116313,116316,116317,116320],{},[33,116310,116311],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[33,116314,116315],{},"max_steps"," 是一个 episode 最多运行多少步。",[33,116318,116319],{},"steps"," 记录当前 episode 已经走了多少步。",[26,116322,116323],{"className":28,"code":114389,"language":30,"meta":31,"style":31},[33,116324,116325],{"__ignoreMap":31},[36,116326,116327,116329,116331,116333,116335,116337,116339,116341,116343,116345,116347,116349,116351,116353,116355,116357,116359,116361,116363,116365],{"class":38,"line":39},[36,116328,31565],{"class":60},[36,116330,114398],{"class":49},[36,116332,54],{"class":53},[36,116334,114403],{"class":49},[36,116336,114406],{"class":416},[36,116338,114409],{"class":53},[36,116340,103047],{"class":60},[36,116342,154],{"class":49},[36,116344,114416],{"class":416},[36,116346,54],{"class":53},[36,116348,103047],{"class":60},[36,116350,154],{"class":49},[36,116352,96607],{"class":416},[36,116354,54],{"class":53},[36,116356,901],{"class":49},[36,116358,181],{"class":60},[36,116360,114433],{"class":49},[36,116362,473],{"class":416},[36,116364,54],{"class":53},[36,116366,114440],{"class":49},[14,116368,116369,116370,116373,116374,101662,116377,116380],{},"定义动作空间。",[33,116371,116372],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[33,116375,116376],{},"low=-1.0",[33,116378,116379],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[26,116382,116383],{"className":28,"code":114450,"language":30,"meta":31,"style":31},[33,116384,116385],{"__ignoreMap":31},[36,116386,116387,116389,116391,116393,116395,116397,116399,116401,116403,116405,116407,116409,116411,116413,116415,116417,116419,116421],{"class":38,"line":39},[36,116388,31565],{"class":60},[36,116390,114459],{"class":49},[36,116392,54],{"class":53},[36,116394,114403],{"class":49},[36,116396,114406],{"class":416},[36,116398,114409],{"class":53},[36,116400,114470],{"class":49},[36,116402,114416],{"class":416},[36,116404,54],{"class":53},[36,116406,114470],{"class":49},[36,116408,96607],{"class":416},[36,116410,54],{"class":53},[36,116412,901],{"class":49},[36,116414,332],{"class":60},[36,116416,114433],{"class":49},[36,116418,473],{"class":416},[36,116420,54],{"class":53},[36,116422,114440],{"class":49},[14,116424,116425,116426,116429,116430,116433],{},"定义观测空间。",[33,116427,116428],{},"shape=(10,)"," 表示观测是 10 个数。",[33,116431,116432],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[26,116435,116437],{"className":28,"code":116436,"language":30,"meta":31,"style":31},"def _get_obs(self) -> np.ndarray:\n",[33,116438,116439],{"__ignoreMap":31},[36,116440,116441,116443,116445],{"class":38,"line":39},[36,116442,32689],{"class":53},[36,116444,115000],{"class":2713},[36,116446,115003],{"class":49},[14,116448,116449,116450,116452],{},"定义内部函数，用来生成观测。函数名前面的 ",[33,116451,1871],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[26,116454,116456],{"className":28,"code":116455,"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,116457,116458,116472],{"__ignoreMap":31},[36,116459,116460,116462,116464,116466,116468,116470],{"class":38,"line":39},[36,116461,112212],{"class":49},[36,116463,54],{"class":53},[36,116465,39615],{"class":60},[36,116467,115014],{"class":49},[36,116469,31565],{"class":60},[36,116471,115019],{"class":49},[36,116473,116474,116476,116478,116480,116482,116484],{"class":38,"line":46},[36,116475,112222],{"class":49},[36,116477,54],{"class":53},[36,116479,39615],{"class":60},[36,116481,115014],{"class":49},[36,116483,31565],{"class":60},[36,116485,115034],{"class":49},[14,116487,116488],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[26,116490,116492],{"className":28,"code":116491,"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,116493,116494,116510],{"__ignoreMap":31},[36,116495,116496,116498,116500,116502,116504,116506,116508],{"class":38,"line":39},[36,116497,111498],{"class":49},[36,116499,54],{"class":53},[36,116501,115043],{"class":49},[36,116503,31565],{"class":60},[36,116505,115048],{"class":49},[36,116507,31565],{"class":60},[36,116509,115053],{"class":49},[36,116511,116512,116514],{"class":38,"line":46},[36,116513,17790],{"class":53},[36,116515,115060],{"class":49},[14,116517,116518,116519,116522,116523,116525],{},"拼接观测，并转换成 ",[33,116520,116521],{},"float32","。很多强化学习库默认使用 ",[33,116524,116521],{},"，所以这里主动转换。",[26,116527,116528],{"className":28,"code":115931,"language":30,"meta":31,"style":31},[33,116529,116530],{"__ignoreMap":31},[36,116531,116532,116534,116536,116538,116540,116542,116544,116546,116548,116550,116552,116554,116556,116558,116560,116562,116564],{"class":38,"line":39},[36,116533,32689],{"class":53},[36,116535,115166],{"class":2713},[36,116537,115169],{"class":49},[36,116539,1339],{"class":53},[36,116541,115174],{"class":49},[36,116543,904],{"class":60},[36,116545,25854],{"class":53},[36,116547,39675],{"class":60},[36,116549,14308],{"class":53},[36,116551,39675],{"class":60},[36,116553,115187],{"class":49},[36,116555,115190],{"class":60},[36,116557,25854],{"class":53},[36,116559,39675],{"class":60},[36,116561,14308],{"class":53},[36,116563,39675],{"class":60},[36,116565,31528],{"class":49},[14,116567,116568,116569,116571,116572,116575],{},"定义 reset。",[33,116570,115210],{}," 用来控制随机数，保证实验可以复现。",[33,116573,116574],{},"options"," 用来接收额外配置，本章暂时不用。",[26,116577,116579],{"className":28,"code":116578,"language":30,"meta":31,"style":31},"super().reset(seed=seed)\n",[33,116580,116581],{"__ignoreMap":31},[36,116582,116583,116585,116587,116589,116591],{"class":38,"line":39},[36,116584,116172],{"class":60},[36,116586,115207],{"class":49},[36,116588,115210],{"class":416},[36,116590,54],{"class":53},[36,116592,115215],{"class":49},[14,116594,116595,116596,116599],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[33,116597,116598],{},"self.np_random"," 生成可复现的随机数。",[26,116601,116603],{"className":28,"code":116602,"language":30,"meta":31,"style":31},"mujoco.mj_resetData(self.model, self.data)\n",[33,116604,116605],{"__ignoreMap":31},[36,116606,116607,116610,116612,116614,116616],{"class":38,"line":39},[36,116608,116609],{"class":49},"mujoco.mj_resetData(",[36,116611,31565],{"class":60},[36,116613,115225],{"class":49},[36,116615,31565],{"class":60},[36,116617,115230],{"class":49},[14,116619,116620],{},"把 MuJoCo 状态重置到默认状态。",[26,116622,116624],{"className":28,"code":116623,"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,116625,116626],{"__ignoreMap":31},[36,116627,116628,116630,116632,116634,116636,116638,116640,116642,116644,116646,116648,116650,116652,116654,116656,116658,116660],{"class":38,"line":39},[36,116629,31565],{"class":60},[36,116631,115241],{"class":49},[36,116633,54],{"class":53},[36,116635,39615],{"class":60},[36,116637,115248],{"class":49},[36,116639,114406],{"class":416},[36,116641,114409],{"class":53},[36,116643,86952],{"class":60},[36,116645,154],{"class":49},[36,116647,114416],{"class":416},[36,116649,54],{"class":53},[36,116651,86952],{"class":60},[36,116653,154],{"class":49},[36,116655,32238],{"class":416},[36,116657,54],{"class":53},[36,116659,31565],{"class":60},[36,116661,115273],{"class":49},[14,116663,115985,116664,116667,116668,116671,116672,116674],{},[33,116665,116666],{},"[:]"," 表示修改整个数组。",[33,116669,116670],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[33,116673,102794],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[26,116676,116678],{"className":28,"code":116677,"language":30,"meta":31,"style":31},"self.data.qvel[:] = 0.0\n",[33,116679,116680],{"__ignoreMap":31},[36,116681,116682,116684,116686,116688],{"class":38,"line":39},[36,116683,31565],{"class":60},[36,116685,115280],{"class":49},[36,116687,54],{"class":53},[36,116689,105405],{"class":60},[14,116691,116692],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[26,116694,116696],{"className":28,"code":116695,"language":30,"meta":31,"style":31},"self.steps = 0\nreturn self._get_obs(), {}\n",[33,116697,116698,116708],{"__ignoreMap":31},[36,116699,116700,116702,116704,116706],{"class":38,"line":39},[36,116701,31565],{"class":60},[36,116703,114350],{"class":49},[36,116705,54],{"class":53},[36,116707,48075],{"class":60},[36,116709,116710,116712,116714],{"class":38,"line":46},[36,116711,17790],{"class":53},[36,116713,39615],{"class":60},[36,116715,115320],{"class":49},[14,116717,116718],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[26,116720,116721],{"className":28,"code":115994,"language":30,"meta":31,"style":31},[33,116722,116723],{"__ignoreMap":31},[36,116724,116725,116727,116729],{"class":38,"line":39},[36,116726,32689],{"class":53},[36,116728,115331],{"class":2713},[36,116730,115334],{"class":49},[14,116732,116733],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[26,116735,116737],{"className":28,"code":116736,"language":30,"meta":31,"style":31},"action = np.asarray(action, dtype=np.float32)\n",[33,116738,116739],{"__ignoreMap":31},[36,116740,116741,116743,116745,116747,116749,116751],{"class":38,"line":39},[36,116742,108086],{"class":49},[36,116744,54],{"class":53},[36,116746,115343],{"class":49},[36,116748,473],{"class":416},[36,116750,54],{"class":53},[36,116752,114440],{"class":49},[14,116754,116755,116756,29130],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[33,116757,116521],{},[26,116759,116761],{"className":28,"code":116760,"language":30,"meta":31,"style":31},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[33,116762,116763],{"__ignoreMap":31},[36,116764,116765,116767,116769,116771,116773,116775,116777],{"class":38,"line":39},[36,116766,108086],{"class":49},[36,116768,54],{"class":53},[36,116770,108091],{"class":49},[36,116772,31565],{"class":60},[36,116774,115362],{"class":49},[36,116776,31565],{"class":60},[36,116778,115367],{"class":49},[14,116780,116781],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[26,116783,116785],{"className":28,"code":116784,"language":30,"meta":31,"style":31},"self.data.ctrl[:] = action\n",[33,116786,116787],{"__ignoreMap":31},[36,116788,116789,116791,116793,116795],{"class":38,"line":39},[36,116790,31565],{"class":60},[36,116792,115378],{"class":49},[36,116794,54],{"class":53},[36,116796,108114],{"class":49},[14,116798,116799],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[26,116801,116803],{"className":28,"code":116802,"language":30,"meta":31,"style":31},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[33,116804,116805,116821],{"__ignoreMap":31},[36,116806,116807,116809,116811,116813,116815,116817,116819],{"class":38,"line":39},[36,116808,3774],{"class":53},[36,116810,102145],{"class":49},[36,116812,26788],{"class":53},[36,116814,33185],{"class":60},[36,116816,901],{"class":49},[36,116818,31565],{"class":60},[36,116820,115399],{"class":49},[36,116822,116823,116826,116828,116830,116832],{"class":38,"line":46},[36,116824,116825],{"class":49},"    mujoco.mj_step(",[36,116827,31565],{"class":60},[36,116829,115225],{"class":49},[36,116831,31565],{"class":60},[36,116833,115230],{"class":49},[14,116835,116836,116837,116840,116841,116843,116844,29130],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[33,116838,116839],{},"frame_skip=5","，所以外部调用一次 ",[33,116842,114521],{},"，内部实际执行 5 次 ",[33,116845,101859],{},[26,116847,116849],{"className":28,"code":116848,"language":30,"meta":31,"style":31},"self.steps += 1\n",[33,116850,116851],{"__ignoreMap":31},[36,116852,116853,116855,116857,116859],{"class":38,"line":39},[36,116854,31565],{"class":60},[36,116856,114350],{"class":49},[36,116858,10224],{"class":53},[36,116860,56441],{"class":60},[14,116862,116863],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[26,116865,116867],{"className":28,"code":116866,"language":30,"meta":31,"style":31},"obs = self._get_obs()\nreward = self._get_reward()\n",[33,116868,116869,116879],{"__ignoreMap":31},[36,116870,116871,116873,116875,116877],{"class":38,"line":39},[36,116872,111498],{"class":49},[36,116874,54],{"class":53},[36,116876,39615],{"class":60},[36,116878,115441],{"class":49},[36,116880,116881,116883,116885,116887],{"class":38,"line":46},[36,116882,111649],{"class":49},[36,116884,54],{"class":53},[36,116886,39615],{"class":60},[36,116888,115452],{"class":49},[14,116890,116891],{},"计算新的观测和奖励。",[26,116893,116895],{"className":28,"code":116894,"language":30,"meta":31,"style":31},"dist = float(np.linalg.norm(tip - target))\n",[33,116896,116897],{"__ignoreMap":31},[36,116898,116899,116901,116903,116905,116907,116909],{"class":38,"line":39},[36,116900,112240],{"class":49},[36,116902,54],{"class":53},[36,116904,110441],{"class":60},[36,116906,115495],{"class":49},[36,116908,1414],{"class":53},[36,116910,115500],{"class":49},[14,116912,116913],{},"计算末端到目标的距离，并转换成 Python float。",[26,116915,116916],{"className":28,"code":114321,"language":30,"meta":31,"style":31},[33,116917,116918,116930],{"__ignoreMap":31},[36,116919,116920,116922,116924,116926,116928],{"class":38,"line":39},[36,116921,114328],{"class":49},[36,116923,54],{"class":53},[36,116925,114333],{"class":49},[36,116927,1789],{"class":53},[36,116929,114338],{"class":60},[36,116931,116932,116934,116936,116938,116940,116942,116944],{"class":38,"line":46},[36,116933,114343],{"class":49},[36,116935,54],{"class":53},[36,116937,39615],{"class":60},[36,116939,114350],{"class":49},[36,116941,2460],{"class":53},[36,116943,39615],{"class":60},[36,116945,114357],{"class":49},[14,116947,116948],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[26,116950,116952],{"className":28,"code":116951,"language":30,"meta":31,"style":31},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[33,116953,116954,116967],{"__ignoreMap":31},[36,116955,116956,116959,116961,116963,116965],{"class":38,"line":39},[36,116957,116958],{"class":49},"info ",[36,116960,54],{"class":53},[36,116962,5197],{"class":49},[36,116964,115546],{"class":998},[36,116966,115549],{"class":49},[36,116968,116969,116971],{"class":38,"line":46},[36,116970,17790],{"class":53},[36,116972,115556],{"class":49},[14,116974,116975,116978],{},[33,116976,116977],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[26,116980,116982],{"className":28,"code":116981,"language":30,"meta":31,"style":31},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[33,116983,116984,116993],{"__ignoreMap":31},[36,116985,116986,116989,116991],{"class":38,"line":39},[36,116987,116988],{"class":49},"env ",[36,116990,54],{"class":53},[36,116992,115586],{"class":49},[36,116994,116995,116997,116999,117001,117003,117005,117007],{"class":38,"line":46},[36,116996,114044],{"class":49},[36,116998,54],{"class":53},[36,117000,115596],{"class":49},[36,117002,115210],{"class":416},[36,117004,54],{"class":53},[36,117006,643],{"class":60},[36,117008,75],{"class":49},[14,117010,117011,117012,117015],{},"创建环境并重置。",[33,117013,117014],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[26,117017,117019],{"className":28,"code":117018,"language":30,"meta":31,"style":31},"action = env.action_space.sample()\n",[33,117020,117021],{"__ignoreMap":31},[36,117022,117023,117025,117027],{"class":38,"line":39},[36,117024,108086],{"class":49},[36,117026,54],{"class":53},[36,117028,115665],{"class":49},[14,117030,117031],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[21,117033,102960],{"id":102959},[14,117035,106128],{},[26,117037,117040],{"className":117038,"code":117039,"language":5935,"meta":31},[5933],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[33,117041,117039],{"__ignoreMap":31},[14,117043,117044],{},"这个环境已经具备强化学习环境的基本结构。",[14,117046,117047],{},"主函数里使用随机动作：",[26,117049,117050],{"className":28,"code":117018,"language":30,"meta":31,"style":31},[33,117051,117052],{"__ignoreMap":31},[36,117053,117054,117056,117058],{"class":38,"line":39},[36,117055,108086],{"class":49},[36,117057,54],{"class":53},[36,117059,115665],{"class":49},[14,117061,117062],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[21,117064,102992],{"id":102991},[851,117066,117067,117070,117076,117085,117094,117103,117109],{},[854,117068,117069],{},"运行程序。",[854,117071,117072,117073,29130],{},"确认 ",[33,117074,117075],{},"obs.shape == (10,)",[854,117077,111825,117078,117081,117082,29130],{},[33,117079,117080],{},"env.action_space","，应类似 ",[33,117083,117084],{},"Box(-1.0, 1.0, (2,), float32)",[854,117086,106229,117087,117090,117091,29130],{},[33,117088,117089],{},"self.max_steps = 10","，确认环境会更快 ",[33,117092,117093],{},"truncated=True",[854,117095,103055,117096,103058,117099,117102],{},[33,117097,117098],{},"terminated = dist \u003C 0.05",[33,117100,117101],{},"dist \u003C 0.2","，观察是否更容易结束。",[854,117104,103055,117105,117108],{},[33,117106,117107],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[854,117110,117111,117112,117114,117115,117118],{},"在 ",[33,117113,116977],{}," 里加入 ",[33,117116,117117],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[21,117120,103097],{"id":103096},[868,117122,117124],{"id":117123},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,117126,117127,117128,117130],{},"Gymnasium 的 ",[33,117129,107778],{}," 返回 5 个值:",[26,117132,117134],{"className":28,"code":117133,"language":30,"meta":31,"style":31},"obs, reward, terminated, truncated, info\n",[33,117135,117136],{"__ignoreMap":31},[36,117137,117138],{"class":38,"line":39},[36,117139,117133],{"class":49},[14,117141,117142],{},"不是旧 Gym 的 4 个值。",[868,117144,117146,117149],{"id":117145},"datactrl-action-维度错误",[33,117147,117148],{},"data.ctrl[:] = action"," 维度错误",[14,117151,103167],{},[26,117153,117155],{"className":28,"code":117154,"language":30,"meta":31,"style":31},"print(self.model.nu)\nprint(action.shape)\n",[33,117156,117157,117168],{"__ignoreMap":31},[36,117158,117159,117161,117163,117165],{"class":38,"line":39},[36,117160,199],{"class":60},[36,117162,901],{"class":49},[36,117164,31565],{"class":60},[36,117166,117167],{"class":49},".model.nu)\n",[36,117169,117170,117172],{"class":38,"line":46},[36,117171,199],{"class":60},[36,117173,117174],{"class":49},"(action.shape)\n",[14,117176,117177],{},"两者必须匹配。",[868,117179,117181],{"id":117180},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,117183,103106],{},[26,117185,117187],{"className":28,"code":117186,"language":30,"meta":31,"style":31},"mujoco.mj_forward(self.model, self.data)\n",[33,117188,117189],{"__ignoreMap":31},[36,117190,117191,117194,117196,117198,117200],{"class":38,"line":39},[36,117192,117193],{"class":49},"mujoco.mj_forward(",[36,117195,31565],{"class":60},[36,117197,115225],{"class":49},[36,117199,31565],{"class":60},[36,117201,115230],{"class":49},[868,117203,117205,117207],{"id":117204},"observation_space-维度和-obs-不一致",[33,117206,114244],{}," 维度和 obs 不一致",[14,117209,103219],{},[26,117211,117213],{"className":28,"code":117212,"language":30,"meta":31,"style":31},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[33,117214,117215,117225,117232],{"__ignoreMap":31},[36,117216,117217,117219,117221,117223],{"class":38,"line":39},[36,117218,111498],{"class":49},[36,117220,54],{"class":53},[36,117222,39615],{"class":60},[36,117224,115441],{"class":49},[36,117226,117227,117229],{"class":38,"line":46},[36,117228,199],{"class":60},[36,117230,117231],{"class":49},"(obs.shape)\n",[36,117233,117234,117236,117238,117240],{"class":38,"line":78},[36,117235,199],{"class":60},[36,117237,901],{"class":49},[36,117239,31565],{"class":60},[36,117241,117242],{"class":49},".observation_space.shape)\n",[14,117244,117245],{},"两者必须一致。本章观测是：",[26,117247,117250],{"className":117248,"code":117249,"language":5935,"meta":31},[5933],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[33,117251,117249],{"__ignoreMap":31},[868,117253,117255],{"id":117254},"action-超过范围","action 超过范围",[14,117257,117258],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[26,117260,117261],{"className":28,"code":116760,"language":30,"meta":31,"style":31},[33,117262,117263],{"__ignoreMap":31},[36,117264,117265,117267,117269,117271,117273,117275,117277],{"class":38,"line":39},[36,117266,108086],{"class":49},[36,117268,54],{"class":53},[36,117270,108091],{"class":49},[36,117272,31565],{"class":60},[36,117274,115362],{"class":49},[36,117276,31565],{"class":60},[36,117278,115367],{"class":49},[14,117280,117281,117282,29130],{},"这能避免无效动作直接写入 ",[33,117283,101720],{},[868,117285,117287],{"id":117286},"忘记返回-info","忘记返回 info",[14,117289,117127,117290,101662,117292,117294],{},[33,117291,70798],{},[33,117293,107778],{}," 都会返回 info：",[26,117296,117297],{"className":28,"code":114037,"language":30,"meta":31,"style":31},[33,117298,117299,117307],{"__ignoreMap":31},[36,117300,117301,117303,117305],{"class":38,"line":39},[36,117302,114044],{"class":49},[36,117304,54],{"class":53},[36,117306,114049],{"class":49},[36,117308,117309,117311,117313],{"class":38,"line":46},[36,117310,114054],{"class":49},[36,117312,54],{"class":53},[36,117314,114059],{"class":49},[14,117316,117317,117318,29130],{},"即使暂时没有额外信息，也返回 ",[33,117319,33201],{},[21,117321,117323],{"id":117322},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,117325,117326],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[851,117328,117329,117332,117335,117338,117341,117344],{},[854,117330,117331],{},"更稳定的 reward。",[854,117333,117334],{},"合理的 episode 长度。",[854,117336,117337],{},"可重复的随机目标采样。",[854,117339,117340],{},"render 接口。",[854,117342,117343],{},"环境注册代码。",[854,117345,117346],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,117348,117349],{},"如果只是自己写训练循环，最小形式是：",[26,117351,117353],{"className":28,"code":117352,"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,117354,117355,117363,117379,117383,117399,117408,117417,117427],{"__ignoreMap":31},[36,117356,117357,117359,117361],{"class":38,"line":39},[36,117358,116988],{"class":49},[36,117360,54],{"class":53},[36,117362,115586],{"class":49},[36,117364,117365,117367,117369,117371,117373,117375,117377],{"class":38,"line":46},[36,117366,114044],{"class":49},[36,117368,54],{"class":53},[36,117370,115596],{"class":49},[36,117372,115210],{"class":416},[36,117374,54],{"class":53},[36,117376,643],{"class":60},[36,117378,75],{"class":49},[36,117380,117381],{"class":38,"line":78},[36,117382,194],{"emptyLinePlaceholder":193},[36,117384,117385,117387,117389,117391,117393,117395,117397],{"class":38,"line":125},[36,117386,3774],{"class":53},[36,117388,102145],{"class":49},[36,117390,26788],{"class":53},[36,117392,33185],{"class":60},[36,117394,901],{"class":49},[36,117396,7157],{"class":60},[36,117398,31528],{"class":49},[36,117400,117401,117404,117406],{"class":38,"line":131},[36,117402,117403],{"class":49},"    action ",[36,117405,54],{"class":53},[36,117407,115665],{"class":49},[36,117409,117410,117413,117415],{"class":38,"line":396},[36,117411,117412],{"class":49},"    obs, reward, terminated, truncated, info ",[36,117414,54],{"class":53},[36,117416,114059],{"class":49},[36,117418,117419,117421,117423,117425],{"class":38,"line":407},[36,117420,3850],{"class":53},[36,117422,115731],{"class":49},[36,117424,115734],{"class":53},[36,117426,115737],{"class":49},[36,117428,117429,117432,117434],{"class":38,"line":2061},[36,117430,117431],{"class":49},"        obs, info ",[36,117433,54],{"class":53},[36,117435,114049],{"class":49},[21,117437,117439],{"id":117438},"_9本章小结","9.本章小结",[14,117441,117442],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[26,117444,117447],{"className":117445,"code":117446,"language":5935,"meta":31},[5933],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[33,117448,117446],{"__ignoreMap":31},[14,117450,117451],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[807,117453,117454],{},"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":46,"depth":46,"links":117456},[117457,117458,117459,117466,117470,117471,117472,117482,117483],{"id":101290,"depth":46,"text":101291},{"id":101413,"depth":46,"text":101414},{"id":101688,"depth":46,"text":101689,"children":117460},[117461,117463,117465],{"id":114268,"depth":78,"text":117462},"terminated 和 truncated 的区别",{"id":114371,"depth":78,"text":117464},"observation_space 和 action_space",{"id":114498,"depth":78,"text":114499},{"id":101896,"depth":46,"text":101897,"children":117467},[117468,117469],{"id":102216,"depth":78,"text":102216},{"id":102352,"depth":78,"text":102352},{"id":102959,"depth":46,"text":102960},{"id":102991,"depth":46,"text":102992},{"id":103096,"depth":46,"text":103097,"children":117473},[117474,117475,117477,117478,117480,117481],{"id":117123,"depth":78,"text":117124},{"id":117145,"depth":78,"text":117476},"data.ctrl[:] = action 维度错误",{"id":117180,"depth":78,"text":117181},{"id":117204,"depth":78,"text":117479},"observation_space 维度和 obs 不一致",{"id":117254,"depth":78,"text":117255},{"id":117286,"depth":78,"text":117287},{"id":117322,"depth":46,"text":117323},{"id":117438,"depth":46,"text":117439},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114021,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117490,"title":117491,"body":117492,"description":117915,"extension":824,"meta":117916,"navigation":193,"path":117917,"seo":117918,"stem":117919,"__hash__":117920},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117493,"toc":117905},[117494,117498,117501,117504,117524,117530,117536,117546,117549,117552,117572,117575,117579,117582,117588,117591,117605,117608,117611,117685,117688,117694,117697,117720,117723,117773,117776,117782,117785,117788,117791,117810,117813,117819,117822,117825,117828,117848,117851,117854,117857,117902],[10,117495,117497],{"id":117496},"mujoco-学习","MuJoCo 学习",[14,117499,117500],{},"初版",[14,117502,117503],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[851,117505,117506,117509,117512,117521],{},[854,117507,117508],{},"MuJoCo 模型文件在描述什么。",[854,117510,117511],{},"Python 代码怎样读取和推进仿真。",[854,117513,117514,1104,117516,1104,117518,117520],{},[33,117515,104674],{},[33,117517,105004],{},[33,117519,105007],{}," 这些数组为什么重要。",[854,117522,117523],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,117525,117526,117527,117529],{},"默认环境为 Fedora 44、Python >= 3.10、",[33,117528,101671],{}," 官方 Python bindings。",[14,117531,117532,117533,117535],{},"注意：本文禁止使用 ",[33,117534,101656],{},"。所有示例均使用：",[26,117537,117538],{"className":28,"code":102222,"language":30,"meta":31,"style":31},[33,117539,117540],{"__ignoreMap":31},[36,117541,117542,117544],{"class":38,"line":39},[36,117543,31135],{"class":53},[36,117545,101945],{"class":49},[21,117547,117548],{"id":117548},"适合谁阅读",[14,117550,117551],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[851,117553,117554,117557,117560,117563],{},[854,117555,117556],{},"没学过 MuJoCo，只会一点 Python。",[854,117558,117559],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[854,117561,117562],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[854,117564,117565,117566,117568,117569,117571],{},"以前接触过 ",[33,117567,101656],{},"，现在想迁移到官方 ",[33,117570,101665],{}," Python bindings。",[14,117573,117574],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[21,117576,117578],{"id":117577},"mujoco-到底是什么","MuJoCo 到底是什么",[14,117580,117581],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[26,117583,117586],{"className":117584,"code":117585,"language":5935,"meta":31},[5933],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[33,117587,117585],{"__ignoreMap":31},[14,117589,117590],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[851,117592,117593,117596,117599,117602],{},[854,117594,117595],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[854,117597,117598],{},"快速测试控制算法，不必一开始就上真实机器人。",[854,117600,117601],{},"生成强化学习环境。",[854,117603,117604],{},"采集状态、动作、图像、奖励等训练数据。",[21,117606,117607],{"id":117607},"学习前的心智模型",[14,117609,117610],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[1031,117612,117613,117625],{},[1034,117614,117615],{},[1037,117616,117617,117620,117623],{},[1040,117618,117619],{"align":24480},"部分",[1040,117621,117622],{"align":24480},"负责什么",[1040,117624,21931],{"align":24480},[1078,117626,117627,117638,117650,117662,117674],{},[1037,117628,117629,117632,117635],{},[1083,117630,117631],{"align":24480},"MJCF XML",[1083,117633,117634],{"align":24480},"定义世界和机器人结构",[1083,117636,117637],{"align":24480},"地面、盒子、关节、电机、摄像头",[1037,117639,117640,117644,117647],{},[1083,117641,117642],{"align":24480},[33,117643,101353],{},[1083,117645,117646],{"align":24480},"编译后的静态模型",[1083,117648,117649],{"align":24480},"有几个关节、有几个电机、时间步长是多少",[1037,117651,117652,117656,117659],{},[1083,117653,117654],{"align":24480},[33,117655,101363],{},[1083,117657,117658],{"align":24480},"运行中的动态状态",[1083,117660,117661],{"align":24480},"当前时间、位置、速度、电机输入",[1037,117663,117664,117668,117671],{},[1083,117665,117666],{"align":24480},[33,117667,101859],{},[1083,117669,117670],{"align":24480},"推进一步物理仿真",[1083,117672,117673],{"align":24480},"根据重力、力、碰撞更新状态",[1037,117675,117676,117679,117682],{},[1083,117677,117678],{"align":24480},"Viewer \u002F Renderer",[1083,117680,117681],{"align":24480},"把仿真显示出来",[1083,117683,117684],{"align":24480},"打开窗口或保存图片",[14,117686,117687],{},"一句话总结：",[26,117689,117692],{"className":117690,"code":117691,"language":5935,"meta":31},[5933],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[33,117693,117691],{"__ignoreMap":31},[14,117695,117696],{},"参考来源：",[1886,117698,117699,117706,117713],{},[854,117700,117701,117702],{},"MuJoCo Python 官方文档：",[50,117703,117704],{"href":117704,"rel":117705},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24609],[854,117707,117708,117709],{},"MuJoCo XML Reference：",[50,117710,117711],{"href":117711,"rel":117712},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24609],[854,117714,117715,117716],{},"MuJoCo Overview：",[50,117717,117718],{"href":117718,"rel":117719},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24609],[21,117721,117722],{"id":117722},"章节目录",[851,117724,117725,117731,117737,117743,117749,117755,117761,117767],{},[854,117726,117727],{},[50,117728,117730],{"href":117729},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[854,117732,117733],{},[50,117734,117736],{"href":117735},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[854,117738,117739],{},[50,117740,117742],{"href":117741},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[854,117744,117745],{},[50,117746,117748],{"href":117747},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[854,117750,117751],{},[50,117752,117754],{"href":117753},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[854,117756,117757],{},[50,117758,117760],{"href":117759},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[854,117762,117763],{},[50,117764,117766],{"href":117765},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[854,117768,117769],{},[50,117770,117772],{"href":117771},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[21,117774,117775],{"id":117775},"推荐学习路线",[26,117777,117780],{"className":117778,"code":117779,"language":5935,"meta":31},[5933],"环境安装\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,117781,117779],{"__ignoreMap":31},[14,117783,117784],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[21,117786,117787],{"id":117787},"建议的目录结构",[14,117789,117790],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[26,117792,117794],{"className":24566,"code":117793,"language":24568,"meta":31,"style":31},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[33,117795,117796,117804],{"__ignoreMap":31},[36,117797,117798,117800,117802],{"class":38,"line":39},[36,117799,101910],{"class":2713},[36,117801,29961],{"class":60},[36,117803,101915],{"class":998},[36,117805,117806,117808],{"class":38,"line":46},[36,117807,101920],{"class":60},[36,117809,101915],{"class":998},[14,117811,117812],{},"每一章的代码都单独保存：",[26,117814,117817],{"className":117815,"code":117816,"language":5935,"meta":31},[5933],"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,117818,117816],{"__ignoreMap":31},[14,117820,117821],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[21,117823,117824],{"id":117824},"学习方法",[14,117826,117827],{},"每章建议按这个顺序操作：",[851,117829,117830,117833,117836,117839,117842,117845],{},[854,117831,117832],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[854,117834,117835],{},"复制最小可运行代码，保存成指定文件。",[854,117837,117838],{},"运行代码，确认没有报错。",[854,117840,117841],{},"对照“运行结果说明”理解输出。",[854,117843,117844],{},"做“验证步骤”，主动改一两个参数。",[854,117846,117847],{},"遇到报错先看“常见错误与解决方案”。",[14,117849,117850],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[21,117852,117853],{"id":117853},"全局排错顺序",[14,117855,117856],{},"遇到问题时，按下面顺序查：",[851,117858,117859,117865,117871,117876,117879,117882,117889,117899],{},[854,117860,117861,117862],{},"Python 环境是否激活：",[33,117863,117864],{},"which python",[854,117866,117867,117868],{},"MuJoCo 是否能导入：",[33,117869,117870],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[854,117872,117873,117874],{},"是否误装了 ",[33,117875,101656],{},[854,117877,117878],{},"XML 标签是否闭合、属性是否拼写正确",[854,117880,117881],{},"actuator 引用的 joint 名字是否存在",[854,117883,117884,117886,117887],{},[33,117885,101720],{}," 的长度是否等于 ",[33,117888,102802],{},[854,117890,106229,117891,83281,117893,117895,117896],{},[33,117892,104674],{},[33,117894,105004],{}," 后是否调用了 ",[33,117897,117898],{},"mujoco.mj_forward",[854,117900,117901],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[807,117903,117904],{},"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":46,"depth":46,"links":117906},[117907,117908,117909,117910,117911,117912,117913,117914],{"id":117548,"depth":46,"text":117548},{"id":117577,"depth":46,"text":117578},{"id":117607,"depth":46,"text":117607},{"id":117722,"depth":46,"text":117722},{"id":117775,"depth":46,"text":117775},{"id":117787,"depth":46,"text":117787},{"id":117824,"depth":46,"text":117824},{"id":117853,"depth":46,"text":117853},"仿真搭建。",{"category":24122},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117491,"description":117915},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117922,"title":117923,"body":117924,"description":823,"extension":824,"meta":118379,"navigation":193,"path":118380,"seo":118381,"stem":118382,"__hash__":118383},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117925,"toc":118377},[117926,117929,117932,117938,118374],[10,117927,117923],{"id":117928},"_1-最常用的基本操作更新",[14,117930,117931],{},"装linux系统教程：",[14,117933,117934],{},[50,117935,117936],{"href":117936,"rel":117937},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24609],[26,117939,117943],{"className":117940,"code":117941,"language":117942,"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,117944,117945,117950,117955,117964,117969,117978,117983,118003,118008,118019,118024,118033,118038,118066,118071,118090,118095,118114,118118,118123,118139,118143,118148,118178,118182,118187,118203,118207,118212,118227,118231,118236,118252,118256,118261,118273,118285,118289,118294,118311,118315,118320,118338,118342,118347,118356,118360,118365],{"__ignoreMap":31},[36,117946,117947],{"class":38,"line":39},[36,117948,117949],{"class":42},"#更新相关的知识\n",[36,117951,117952],{"class":38,"line":46},[36,117953,117954],{"class":42},"# 更新软件包列表（从服务器获取最新软件信息）\n",[36,117956,117957,117959,117962],{"class":38,"line":78},[36,117958,25321],{"class":2713},[36,117960,117961],{"class":998}," apt",[36,117963,26987],{"class":998},[36,117965,117966],{"class":38,"line":125},[36,117967,117968],{"class":42},"# 升级所有可更新的软件包（不删除旧包）\n",[36,117970,117971,117973,117975],{"class":38,"line":131},[36,117972,25321],{"class":2713},[36,117974,117961],{"class":998},[36,117976,117977],{"class":998}," upgrade\n",[36,117979,117980],{"class":38,"line":396},[36,117981,117982],{"class":42},"#更新和升级软件包\n",[36,117984,117985,117987,117989,117992,117994,117996,117998,118001],{"class":38,"line":407},[36,117986,25321],{"class":2713},[36,117988,117961],{"class":998},[36,117990,117991],{"class":998}," update",[36,117993,26935],{"class":49},[36,117995,25321],{"class":2713},[36,117997,117961],{"class":998},[36,117999,118000],{"class":998}," upgrade",[36,118002,101625],{"class":60},[36,118004,118005],{"class":38,"line":2061},[36,118006,118007],{"class":42},"#列出可更新的软件包及版本信息\n",[36,118009,118010,118013,118016],{"class":38,"line":2067},[36,118011,118012],{"class":2713},"apt",[36,118014,118015],{"class":998}," list",[36,118017,118018],{"class":60}," --upgradable\n",[36,118020,118021],{"class":38,"line":2079},[36,118022,118023],{"class":42},"#彻底升级（处理依赖关系，可能删除旧包）\n",[36,118025,118026,118028,118030],{"class":38,"line":2362},[36,118027,25321],{"class":2713},[36,118029,117961],{"class":998},[36,118031,118032],{"class":998}," full-upgrade\n",[36,118034,118035],{"class":38,"line":2367},[36,118036,118037],{"class":42},"#设置指定版本\n",[36,118039,118040,118042,118044,118046,118048,118051,118053,118055,118057,118059,118062,118064],{"class":38,"line":2373},[36,118041,25321],{"class":2713},[36,118043,117961],{"class":998},[36,118045,24578],{"class":998},[36,118047,29647],{"class":53},[36,118049,118050],{"class":998},"package_nam",[36,118052,969],{"class":49},[36,118054,1839],{"class":53},[36,118056,54],{"class":998},[36,118058,1789],{"class":53},[36,118060,118061],{"class":998},"version_numbe",[36,118063,1552],{"class":49},[36,118065,52049],{"class":53},[36,118067,118068],{"class":38,"line":2378},[36,118069,118070],{"class":42},"#只安装软件包不升级\n",[36,118072,118073,118075,118077,118079,118081,118083,118085,118087],{"class":38,"line":2392},[36,118074,25321],{"class":2713},[36,118076,117961],{"class":998},[36,118078,24578],{"class":998},[36,118080,29647],{"class":53},[36,118082,118050],{"class":998},[36,118084,969],{"class":49},[36,118086,1839],{"class":53},[36,118088,118089],{"class":60}," --no-upgrade\n",[36,118091,118092],{"class":38,"line":2397},[36,118093,118094],{"class":42},"#只升级，不存在就不安装\n",[36,118096,118097,118099,118101,118103,118105,118107,118109,118111],{"class":38,"line":2403},[36,118098,25321],{"class":2713},[36,118100,117961],{"class":998},[36,118102,24578],{"class":998},[36,118104,29647],{"class":53},[36,118106,118050],{"class":998},[36,118108,969],{"class":49},[36,118110,1839],{"class":53},[36,118112,118113],{"class":60}," --only-upgrade\n",[36,118115,118116],{"class":38,"line":2424},[36,118117,194],{"emptyLinePlaceholder":193},[36,118119,118120],{"class":38,"line":2429},[36,118121,118122],{"class":42},"#安装指定的软件命令\n",[36,118124,118125,118127,118129,118131,118133,118135,118137],{"class":38,"line":2443},[36,118126,25321],{"class":2713},[36,118128,117961],{"class":998},[36,118130,24578],{"class":998},[36,118132,29647],{"class":53},[36,118134,118050],{"class":998},[36,118136,969],{"class":49},[36,118138,52049],{"class":53},[36,118140,118141],{"class":38,"line":2448},[36,118142,194],{"emptyLinePlaceholder":193},[36,118144,118145],{"class":38,"line":2477},[36,118146,118147],{"class":42},"#安装多个软件包\n",[36,118149,118150,118152,118154,118156,118158,118161,118164,118166,118168,118171,118173,118175],{"class":38,"line":2482},[36,118151,25321],{"class":2713},[36,118153,117961],{"class":998},[36,118155,24578],{"class":998},[36,118157,29647],{"class":53},[36,118159,118160],{"class":998},"package_",[36,118162,118163],{"class":53},"1>",[36,118165,29647],{"class":53},[36,118167,118160],{"class":998},[36,118169,118170],{"class":53},"2>",[36,118172,29647],{"class":53},[36,118174,118160],{"class":998},[36,118176,118177],{"class":53},"3>\n",[36,118179,118180],{"class":38,"line":2499},[36,118181,194],{"emptyLinePlaceholder":193},[36,118183,118184],{"class":38,"line":2504},[36,118185,118186],{"class":42},"#更新指定的软件命令\n",[36,118188,118189,118191,118193,118195,118197,118199,118201],{"class":38,"line":2509},[36,118190,25321],{"class":2713},[36,118192,117961],{"class":998},[36,118194,117991],{"class":998},[36,118196,29647],{"class":53},[36,118198,118050],{"class":998},[36,118200,969],{"class":49},[36,118202,52049],{"class":53},[36,118204,118205],{"class":38,"line":2514},[36,118206,194],{"emptyLinePlaceholder":193},[36,118208,118209],{"class":38,"line":2528},[36,118210,118211],{"class":42},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[36,118213,118214,118216,118219,118221,118223,118225],{"class":38,"line":2533},[36,118215,118012],{"class":2713},[36,118217,118218],{"class":998}," show",[36,118220,29647],{"class":53},[36,118222,118050],{"class":998},[36,118224,969],{"class":49},[36,118226,52049],{"class":53},[36,118228,118229],{"class":38,"line":3326},[36,118230,194],{"emptyLinePlaceholder":193},[36,118232,118233],{"class":38,"line":3340},[36,118234,118235],{"class":42},"#删除软件包命令\n",[36,118237,118238,118240,118242,118244,118246,118248,118250],{"class":38,"line":3348},[36,118239,25321],{"class":2713},[36,118241,117961],{"class":998},[36,118243,26824],{"class":998},[36,118245,29647],{"class":53},[36,118247,118050],{"class":998},[36,118249,969],{"class":49},[36,118251,52049],{"class":53},[36,118253,118254],{"class":38,"line":3353},[36,118255,194],{"emptyLinePlaceholder":193},[36,118257,118258],{"class":38,"line":3359},[36,118259,118260],{"class":42},"# 清理旧版本和缓存（释放磁盘空间）\n",[36,118262,118263,118265,118267,118270],{"class":38,"line":3365},[36,118264,25321],{"class":2713},[36,118266,117961],{"class":998},[36,118268,118269],{"class":998}," autoremove",[36,118271,118272],{"class":42},"  # 删除不再需要的依赖和库文件\n",[36,118274,118275,118277,118279,118282],{"class":38,"line":3370},[36,118276,25321],{"class":2713},[36,118278,117961],{"class":998},[36,118280,118281],{"class":998}," clean",[36,118283,118284],{"class":42},"       # 清理下载的缓存包\n",[36,118286,118287],{"class":38,"line":8695},[36,118288,194],{"emptyLinePlaceholder":193},[36,118290,118291],{"class":38,"line":8719},[36,118292,118293],{"class":42},"#移除软件包及配置文件\n",[36,118295,118296,118298,118300,118303,118305,118307,118309],{"class":38,"line":8724},[36,118297,25321],{"class":2713},[36,118299,117961],{"class":998},[36,118301,118302],{"class":998}," purge",[36,118304,29647],{"class":53},[36,118306,118050],{"class":998},[36,118308,969],{"class":49},[36,118310,52049],{"class":53},[36,118312,118313],{"class":38,"line":8730},[36,118314,194],{"emptyLinePlaceholder":193},[36,118316,118317],{"class":38,"line":8757},[36,118318,118319],{"class":42},"#查找软件包命令\n",[36,118321,118322,118324,118326,118329,118331,118334,118336],{"class":38,"line":8762},[36,118323,25321],{"class":2713},[36,118325,117961],{"class":998},[36,118327,118328],{"class":998}," search",[36,118330,29647],{"class":53},[36,118332,118333],{"class":998},"keywor",[36,118335,1201],{"class":49},[36,118337,52049],{"class":53},[36,118339,118340],{"class":38,"line":8768},[36,118341,194],{"emptyLinePlaceholder":193},[36,118343,118344],{"class":38,"line":8780},[36,118345,118346],{"class":42},"#列出所有已安装的包\n",[36,118348,118349,118351,118353],{"class":38,"line":8792},[36,118350,118012],{"class":2713},[36,118352,118015],{"class":998},[36,118354,118355],{"class":60}," --installed\n",[36,118357,118358],{"class":38,"line":8804},[36,118359,194],{"emptyLinePlaceholder":193},[36,118361,118362],{"class":38,"line":10463},[36,118363,118364],{"class":42},"#列出所有已安装的包的版本信息\n",[36,118366,118367,118369,118371],{"class":38,"line":10488},[36,118368,118012],{"class":2713},[36,118370,118015],{"class":998},[36,118372,118373],{"class":60}," --all-versions\n",[807,118375,118376],{},"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":46,"depth":46,"links":118378},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117923,"description":823},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118385,"title":118386,"body":118387,"description":823,"extension":824,"meta":119128,"navigation":193,"path":119129,"seo":119130,"stem":119131,"__hash__":119132},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118388,"toc":119115},[118389,118392,118396,118399,118405,118409,118413,118419,118424,118429,118434,118439,118444,118447,118450,118453,118456,118460,118463,118468,118471,118476,118479,118484,118491,118494,118497,118500,118503,118506,118517,118521,118525,118530,118535,118539,118544,118548,118553,118557,118561,118566,118569,118614,118619,118623,118627,118632,118638,118643,118653,118658,118668,118673,118678,118705,118709,118712,118717,118720,118745,118749,118754,118757,118762,118767,118787,118792,118795,118810,118814,118867,118870,118875,118879,118882,118897,118900,118903,118908,118912,118916,118919,118923,118927,118930,118935,118940,118944,118951,118959,118962,118969,118974,118979,118982,118987,118994,118999,119006,119010,119012,119017,119021,119024,119027,119032,119035,119040,119043,119048,119053,119058,119062,119067,119071,119112],[10,118390,118386],{"id":118391},"_2-linux装机教程",[21,118393,118395],{"id":118394},"_21-实体机","2.1 实体机",[14,118397,118398],{},"使用清华源：（Ubuntu24.04）",[14,118400,118401],{},[50,118402,118403],{"href":118403,"rel":118404},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24609],[21,118406,118408],{"id":118407},"_22-普通虚拟机","2.2 普通虚拟机",[868,118410,118412],{"id":118411},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,118414,118415],{},[50,118416,118417],{"href":118417,"rel":118418},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24609],[14,118420,118421],{},[2212,118422],{"alt":31,"src":118423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,118425,118426],{},[2212,118427],{"alt":31,"src":118428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,118430,118431],{},[2212,118432],{"alt":31,"src":118433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,118435,118436],{},[2212,118437],{"alt":31,"src":118438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,118440,118441],{},[2212,118442],{"alt":31,"src":118443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,118445,118446],{},"内存4G（4096MB）；",[14,118448,118449],{},"CPU给4个核；",[14,118451,118452],{},"硬盘动态分配60G；",[14,118454,118455],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[868,118457,118459],{"id":118458},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,118461,118462],{},"按照1.1的步骤下载Ubuntu",[14,118464,118465],{},[2212,118466],{"alt":31,"src":118467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,118469,118470],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,118472,118473],{},[2212,118474],{"alt":31,"src":118475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,118477,118478],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,118480,118481],{},[2212,118482],{"alt":31,"src":118483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,118485,118486,118487,118490],{},"选择“正常安装”(找不到都用Alt+F7)， ",[1043,118488,118489],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,118492,118493],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,118495,118496],{},"将改动写入磁盘吗 继续",[14,118498,118499],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,118501,118502],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,118504,118505],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,118507,118508,118509,118512,118513,118516],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[1043,118510,118511],{},"除了"," 选不发送系统信息与不升级之外， ",[1043,118514,118515],{},"其它"," 都跳过或前进）",[868,118518,118520],{"id":118519},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22742,118522,118524],{"id":118523},"_2231-全屏","2.2.3.1 全屏",[14,118526,118527],{},[2212,118528],{"alt":31,"src":118529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,118531,118532],{},[2212,118533],{"alt":31,"src":118534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22742,118536,118538],{"id":118537},"_2232-文件交换","2.2.3.2 文件交换",[14,118540,118541],{},[2212,118542],{"alt":31,"src":118543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22742,118545,118547],{"id":118546},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,118549,118550],{},[2212,118551],{"alt":31,"src":118552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[21,118554,118556],{"id":118555},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[868,118558,118560],{"id":118559},"_231-简介与优缺点","2.3.1 简介与优缺点",[851,118562,118563],{},[854,118564,118565],{},"什么情况下推荐？",[14,118567,118568],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[851,118570,118571],{"start":46},[854,118572,118573,118574],{},"优缺点：",[851,118575,118576,118606],{},[854,118577,118578,118579],{},"优点：",[851,118580,118581,118584,118591,118594,118597,118600,118603],{},[854,118582,118583],{},"WSL2是最好的Linux发行版;(bushi)",[854,118585,118586,118587,118590],{},"性能损耗极低。且比在Windows上跑深度性能 ",[1043,118588,118589],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[854,118592,118593],{},"非常方便调用USB设备，可以USB直通;",[854,118595,118596],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[854,118598,118599],{},"非常方便Win与WSL2互相传文件等协同操作;",[854,118601,118602],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[854,118604,118605],{},"非常方便使用Windows的VScode远程开发;",[854,118607,118608,118609],{},"缺点：",[851,118610,118611],{},[854,118612,118613],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,118615,118616],{},[2212,118617],{"alt":31,"src":118618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[868,118620,118622],{"id":118621},"_232-安装教程","2.3.2 安装教程",[22742,118624,118626],{"id":118625},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[851,118628,118629],{},[854,118630,118631],{},"方法一(图形界面)",[14,118633,118634,118635,25363],{},"用Win+R输入",[33,118636,118637],{},"appwiz.cpl",[14,118639,118640],{},[2212,118641],{"alt":31,"src":118642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,118644,118645,118646,118649,118650,27218],{},"点击OK进入 ",[1043,118647,118648],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[1043,118651,118652],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,118654,118655],{},[2212,118656],{"alt":31,"src":118657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,118659,118660,118661,101662,118664,118667],{},"选择 ",[1043,118662,118663],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[1043,118665,118666],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118669,118670],{},[2212,118671],{"alt":31,"src":118672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[851,118674,118675],{"start":46},[854,118676,118677],{},"方法二(命令行)",[26,118679,118683],{"className":118680,"code":118681,"language":118682,"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,118684,118685,118690,118695,118700],{"__ignoreMap":31},[36,118686,118687],{"class":38,"line":39},[36,118688,118689],{},"# 开启 Linux 子系统\n",[36,118691,118692],{"class":38,"line":46},[36,118693,118694],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[36,118696,118697],{"class":38,"line":78},[36,118698,118699],{},"# 开启虚拟机平台\n",[36,118701,118702],{"class":38,"line":125},[36,118703,118704],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22742,118706,118708],{"id":118707},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118710,118711],{},"用管理员权限打开powershell",[14,118713,118714],{},[2212,118715],{"alt":31,"src":118716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118718,118719],{},"升级WSL并设置默认版本为WSL2",[26,118721,118723],{"className":118680,"code":118722,"language":118682,"meta":31,"style":31},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[33,118724,118725,118730,118735,118740],{"__ignoreMap":31},[36,118726,118727],{"class":38,"line":39},[36,118728,118729],{},"# 更新 wsl\n",[36,118731,118732],{"class":38,"line":46},[36,118733,118734],{},"wsl --update\n",[36,118736,118737],{"class":38,"line":78},[36,118738,118739],{},"# 将 wsl 版本设置为 wsl2\n",[36,118741,118742],{"class":38,"line":125},[36,118743,118744],{},"wsl --set-default-version 2\n",[22742,118746,118748],{"id":118747},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[851,118750,118751],{},[854,118752,118753],{},"方式一(商店下载)",[14,118755,118756],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118758,118759],{},[2212,118760],{"alt":31,"src":118761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[851,118763,118764],{"start":46},[854,118765,118766],{},"方式二(命令行安装)",[26,118768,118770],{"className":118680,"code":118769,"language":118682,"meta":31,"style":31},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[33,118771,118772,118777,118782],{"__ignoreMap":31},[36,118773,118774],{"class":38,"line":39},[36,118775,118776],{},"# 列出可安装的 Linux 版本\n",[36,118778,118779],{"class":38,"line":46},[36,118780,118781],{},"#（需要科学手段）\n",[36,118783,118784],{"class":38,"line":78},[36,118785,118786],{},"wsl --list --online\n",[14,118788,118789],{},[2212,118790],{"alt":31,"src":118791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118793,118794],{},"选择对应发行版并安装",[26,118796,118798],{"className":118680,"code":118797,"language":118682,"meta":31,"style":31},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[33,118799,118800,118805],{"__ignoreMap":31},[36,118801,118802],{"class":38,"line":39},[36,118803,118804],{},"# Ubuntu安装完毕后需要重启系统\n",[36,118806,118807],{"class":38,"line":46},[36,118808,118809],{},"wsl --install -d Ubuntu-24.04\n",[22742,118811,118813],{"id":118812},"_2324-查看系统状态","2.3.2.4 查看系统状态",[26,118815,118817],{"className":118680,"code":118816,"language":118682,"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,118818,118819,118824,118829,118834,118839,118843,118847,118852,118857,118862],{"__ignoreMap":31},[36,118820,118821],{"class":38,"line":39},[36,118822,118823],{},"# 查看 wsl\n",[36,118825,118826],{"class":38,"line":46},[36,118827,118828],{},"wsl -l\n",[36,118830,118831],{"class":38,"line":78},[36,118832,118833],{},"# 查看 wsl 运行版本或模式\n",[36,118835,118836],{"class":38,"line":125},[36,118837,118838],{},"wsl -l -v\n",[36,118840,118841],{"class":38,"line":131},[36,118842,194],{"emptyLinePlaceholder":193},[36,118844,118845],{"class":38,"line":396},[36,118846,194],{"emptyLinePlaceholder":193},[36,118848,118849],{"class":38,"line":407},[36,118850,118851],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[36,118853,118854],{"class":38,"line":2061},[36,118855,118856],{},"wsl --set-version \u003Cdistro> 2\n",[36,118858,118859],{"class":38,"line":2067},[36,118860,118861],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[36,118863,118864],{"class":38,"line":2079},[36,118865,118866],{},"wsl --unregister \u003Cdistro>\n",[14,118868,118869],{},"输出Version为2即正常",[14,118871,118872],{},[2212,118873],{"alt":31,"src":118874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22742,118876,118878],{"id":118877},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118880,118881],{},"直接在Powershell里输入wsl命令进入子系统",[26,118883,118885],{"className":118680,"code":118884,"language":118682,"meta":31,"style":31},"# 进入子系统\nwsl\n",[33,118886,118887,118892],{"__ignoreMap":31},[36,118888,118889],{"class":38,"line":39},[36,118890,118891],{},"# 进入子系统\n",[36,118893,118894],{"class":38,"line":46},[36,118895,118896],{},"wsl\n",[14,118898,118899],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118901,118902],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118904,118905],{},[2212,118906],{"alt":31,"src":118907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[868,118909,118911],{"id":118910},"_233-配置各种环境","2.3.3 配置各种环境",[22742,118913,118915],{"id":118914},"_2331-换源","2.3.3.1 换源",[14,118917,118918],{},"(同实体机LINUX，往下找教程)",[22742,118920,118922],{"id":118921},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23654,118924,118926],{"id":118925},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118928,118929],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118931,118932],{},[2212,118933],{"alt":31,"src":118934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,118936,118937],{},[2212,118938],{"alt":31,"src":118939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23654,118941,118943],{"id":118942},"_23322-cuda","2.3.3.2.2 CUDA",[14,118945,118946,118947],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[50,118948,118949],{"href":118949,"rel":118950},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24609],[14,118952,118953,118956],{},[2212,118954],{"alt":31,"src":118955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[2212,118957],{"alt":31,"src":118958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118960,118961],{},"在下方的网站，选择合适的版本。",[14,118963,118964,118965],{},"WSL2 专属 CUDA 指南：",[50,118966,118967],{"href":118967,"rel":118968},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24609],[14,118970,118971],{},[1043,118972,118973],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118975,118976],{},[2212,118977],{"alt":31,"src":118978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118980,118981],{},"挨行敲一遍",[14,118983,118984],{},[2212,118985],{"alt":31,"src":118986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118988,118989,118990,118993],{},"敲完后，输入",[33,118991,118992],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118995,118996],{},[2212,118997],{"alt":31,"src":118998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,119000,119001,119002,119005],{},"（请详看下方教程的",[1043,119003,119004],{},"安装CUDA的配置环境来看","如何配置环境）",[23654,119007,119009],{"id":119008},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,119011,118918],{},[14,119013,119014],{},[2212,119015],{"alt":31,"src":119016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22742,119018,119020],{"id":119019},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,119022,119023],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,119025,119026],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,119028,119029],{},[2212,119030],{"alt":31,"src":119031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,119033,119034],{},"连接WSL2",[14,119036,119037],{},[2212,119038],{"alt":31,"src":119039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,119041,119042],{},"远程开发成功。",[14,119044,119045],{},[2212,119046],{"alt":31,"src":119047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,119049,119050],{},[2212,119051],{"alt":31,"src":119052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,119054,119055],{},[2212,119056],{"alt":31,"src":119057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22742,119059,119061],{"id":119060},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,119063,119064],{},[2212,119065],{"alt":31,"src":119066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22742,119068,119070],{"id":119069},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[26,119072,119074],{"className":117940,"code":119073,"language":117942,"meta":31,"style":31},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[33,119075,119076,119084,119092,119103,119107],{"__ignoreMap":31},[36,119077,119078,119080,119082],{"class":38,"line":39},[36,119079,25321],{"class":2713},[36,119081,117961],{"class":998},[36,119083,26987],{"class":998},[36,119085,119086,119088,119090],{"class":38,"line":46},[36,119087,25321],{"class":2713},[36,119089,117961],{"class":998},[36,119091,117977],{"class":998},[36,119093,119094,119096,119098,119100],{"class":38,"line":78},[36,119095,25321],{"class":2713},[36,119097,117961],{"class":998},[36,119099,24578],{"class":998},[36,119101,119102],{"class":998}," mesa-utils\n",[36,119104,119105],{"class":38,"line":125},[36,119106,194],{"emptyLinePlaceholder":193},[36,119108,119109],{"class":38,"line":131},[36,119110,119111],{"class":42},"#然后重启wsl2即可\n",[807,119113,119114],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":46,"depth":46,"links":119116},[119117,119118,119123],{"id":118394,"depth":46,"text":118395},{"id":118407,"depth":46,"text":118408,"children":119119},[119120,119121,119122],{"id":118411,"depth":78,"text":118412},{"id":118458,"depth":78,"text":118459},{"id":118519,"depth":78,"text":118520},{"id":118555,"depth":46,"text":118556,"children":119124},[119125,119126,119127],{"id":118559,"depth":78,"text":118560},{"id":118621,"depth":78,"text":118622},{"id":118910,"depth":78,"text":118911},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118386,"description":823},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119134,"title":119135,"body":119136,"description":823,"extension":824,"meta":122072,"navigation":193,"path":122073,"seo":122074,"stem":122075,"__hash__":122076},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119137,"toc":122044},[119138,119141,119145,119151,119155,119161,119165,119353,119356,119361,119365,119369,119372,119375,119381,119386,119389,119392,119397,119430,119435,119439,119516,119519,119524,119528,119531,119570,119573,119582,119600,119605,119612,119729,119734,119737,119764,119769,119773,119782,119832,119839,119843,119846,119860,119867,119901,119906,119910,119933,119936,119941,119945,119948,119951,119954,119996,120000,120003,120006,120047,120051,120055,120058,120063,120068,120071,120094,120097,120105,120110,120113,120118,120123,120126,120131,120135,120140,120163,120168,120230,120238,120243,120248,120251,120256,120259,120264,120269,120287,120292,120298,120303,120317,120321,120324,120327,120330,120373,120376,120381,120482,120485,120490,120494,120498,120535,120539,120543,120547,120593,120597,120642,120646,120653,120661,120716,120719,120796,120799,120822,120826,120829,120834,120839,120847,120850,120855,120860,120865,120868,120873,120882,120885,120890,120893,120964,120969,120972,120977,120980,120985,120988,120993,120996,121001,121006,121009,121084,121087,121100,121105,121108,121122,121125,121154,121159,121188,121191,121196,121200,121205,121214,121217,121222,121225,121230,121233,121236,121241,121244,121249,121254,121257,121262,121265,121390,121395,121425,121428,121433,121438,121455,121458,121501,121504,121531,121536,121549,121692,121696,121701,121715,121718,121769,121772,121802,121805,121821,121826,121840,121843,121910,121915,121924,121929,121932,121944,121949,121956,121980,121983,121988,121991,122010,122015,122022,122034,122041],[10,119139,119135],{"id":119140},"_3-安装必备配置",[21,119142,119144],{"id":119143},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[26,119146,119149],{"className":119147,"code":119148,"language":5935},[5933],"  打开下方网站（注意，该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,119150,119148],{"__ignoreMap":31},[868,119152,119154],{"id":119153},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[26,119156,119159],{"className":119157,"code":119158,"language":5935},[5933],"  输入以下命令\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,119160,119158],{"__ignoreMap":31},[868,119162,119164],{"id":119163},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[26,119166,119170],{"className":119167,"code":119168,"language":119169,"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,119171,119172,119180,119191,119203,119217,119221,119231,119236,119240,119244,119249,119253,119265,119269,119274,119278,119289,119293,119309,119313,119324,119328,119333,119337,119345],{"__ignoreMap":31},[36,119173,119174,119176,119178],{"class":38,"line":39},[36,119175,25321],{"class":2713},[36,119177,117961],{"class":998},[36,119179,26987],{"class":998},[36,119181,119182,119184,119186,119188],{"class":38,"line":46},[36,119183,25321],{"class":2713},[36,119185,117961],{"class":998},[36,119187,24578],{"class":998},[36,119189,119190],{"class":998}," vim\n",[36,119192,119193,119195,119198,119200],{"class":38,"line":78},[36,119194,25321],{"class":2713},[36,119196,119197],{"class":998}," rm",[36,119199,26070],{"class":60},[36,119201,119202],{"class":998}," \u002Fetc\u002Fapt\u002Fsources.list\n",[36,119204,119205,119207,119209,119211,119214],{"class":38,"line":125},[36,119206,25321],{"class":2713},[36,119208,119197],{"class":998},[36,119210,26070],{"class":60},[36,119212,119213],{"class":998}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[36,119215,119216],{"class":60},"**\n",[36,119218,119219],{"class":38,"line":131},[36,119220,194],{"emptyLinePlaceholder":193},[36,119222,119223,119225,119228],{"class":38,"line":396},[36,119224,25321],{"class":2713},[36,119226,119227],{"class":998}," vim",[36,119229,119230],{"class":998}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[36,119232,119233],{"class":38,"line":407},[36,119234,119235],{"class":998},"```\n",[36,119237,119238],{"class":38,"line":2061},[36,119239,194],{"emptyLinePlaceholder":193},[36,119241,119242],{"class":38,"line":2067},[36,119243,194],{"emptyLinePlaceholder":193},[36,119245,119246],{"class":38,"line":2079},[36,119247,119248],{"class":2713},"选择好Ubuntu版本后，复制下方的内容。\n",[36,119250,119251],{"class":38,"line":2362},[36,119252,194],{"emptyLinePlaceholder":193},[36,119254,119255,119257,119260,119263],{"class":38,"line":2367},[36,119256,1117],{"class":53},[36,119258,119259],{"class":998},"[](",[36,119261,119262],{"class":2713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[36,119264,75],{"class":998},[36,119266,119267],{"class":38,"line":2373},[36,119268,194],{"emptyLinePlaceholder":193},[36,119270,119271],{"class":38,"line":2378},[36,119272,119273],{"class":2713},"粘贴进去\n",[36,119275,119276],{"class":38,"line":2392},[36,119277,194],{"emptyLinePlaceholder":193},[36,119279,119280,119282,119284,119287],{"class":38,"line":2397},[36,119281,1117],{"class":53},[36,119283,119259],{"class":998},[36,119285,119286],{"class":2713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[36,119288,75],{"class":998},[36,119290,119291],{"class":38,"line":2403},[36,119292,194],{"emptyLinePlaceholder":193},[36,119294,119295,119298,119301,119304,119306],{"class":38,"line":2424},[36,119296,119297],{"class":2713},"按一下ESC，然后英文冒号，输入",[36,119299,119300],{"class":998}," `",[36,119302,119303],{"class":2713},":wq!",[36,119305,1851],{"class":998},[36,119307,119308],{"class":2713},"然后回车\n",[36,119310,119311],{"class":38,"line":2429},[36,119312,194],{"emptyLinePlaceholder":193},[36,119314,119315,119317,119319,119322],{"class":38,"line":2443},[36,119316,1117],{"class":53},[36,119318,119259],{"class":998},[36,119320,119321],{"class":2713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[36,119323,75],{"class":998},[36,119325,119326],{"class":38,"line":2448},[36,119327,194],{"emptyLinePlaceholder":193},[36,119329,119330],{"class":38,"line":2477},[36,119331,119332],{"class":2713},"输入以下命令\n",[36,119334,119335],{"class":38,"line":2482},[36,119336,194],{"emptyLinePlaceholder":193},[36,119338,119339,119342],{"class":38,"line":2499},[36,119340,119341],{"class":998},"```",[36,119343,119344],{"class":2713},"Bash\n",[36,119346,119347,119349,119351],{"class":38,"line":2504},[36,119348,25321],{"class":2713},[36,119350,117961],{"class":998},[36,119352,26987],{"class":998},[14,119354,119355],{},"这里被替换成对应学校则成功",[14,119357,119358],{},[2212,119359],{"alt":31,"src":119360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[21,119362,119364],{"id":119363},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[868,119366,119368],{"id":119367},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,119370,119371],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,119373,119374],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,119376,119377],{},[50,119378,119379],{"href":119379,"rel":119380},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24609],[14,119382,119383],{},[2212,119384],{"alt":31,"src":119385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,119387,119388],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,119390,119391],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,119393,119394],{},[2212,119395],{"alt":31,"src":119396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[26,119398,119400],{"className":117940,"code":119399,"language":117942,"meta":31,"style":31},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[33,119401,119402,119407,119414,119419],{"__ignoreMap":31},[36,119403,119404],{"class":38,"line":39},[36,119405,119406],{"class":42},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[36,119408,119409,119411],{"class":38,"line":46},[36,119410,101920],{"class":60},[36,119412,119413],{"class":998}," ~\u002FDownloads\n",[36,119415,119416],{"class":38,"line":78},[36,119417,119418],{"class":42},"#下方chrome安装包名不一定是这个，根据名字来看\n",[36,119420,119421,119423,119425,119427],{"class":38,"line":125},[36,119422,25321],{"class":2713},[36,119424,117961],{"class":998},[36,119426,24578],{"class":998},[36,119428,119429],{"class":998}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,119431,119432],{},[2212,119433],{"alt":31,"src":119434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[868,119436,119438],{"id":119437},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[26,119440,119442],{"className":117940,"code":119441,"language":117942,"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,119443,119444,119449,119457,119468,119473,119477,119482,119492,119500,119511],{"__ignoreMap":31},[36,119445,119446],{"class":38,"line":39},[36,119447,119448],{"class":42},"# 老版\n",[36,119450,119451,119453,119455],{"class":38,"line":46},[36,119452,25321],{"class":2713},[36,119454,117961],{"class":998},[36,119456,26987],{"class":998},[36,119458,119459,119461,119463,119465],{"class":38,"line":78},[36,119460,25321],{"class":2713},[36,119462,117961],{"class":998},[36,119464,24578],{"class":998},[36,119466,119467],{"class":998}," neofetch\n",[36,119469,119470],{"class":38,"line":125},[36,119471,119472],{"class":2713},"neofetch\n",[36,119474,119475],{"class":38,"line":131},[36,119476,194],{"emptyLinePlaceholder":193},[36,119478,119479],{"class":38,"line":396},[36,119480,119481],{"class":42},"# 新版\n",[36,119483,119484,119486,119489],{"class":38,"line":407},[36,119485,25321],{"class":2713},[36,119487,119488],{"class":998}," add-apt-repository",[36,119490,119491],{"class":998}," ppa:zhangsongcui3371\u002Ffastfetch\n",[36,119493,119494,119496,119498],{"class":38,"line":2061},[36,119495,25321],{"class":2713},[36,119497,117961],{"class":998},[36,119499,26987],{"class":998},[36,119501,119502,119504,119506,119508],{"class":38,"line":2067},[36,119503,25321],{"class":2713},[36,119505,117961],{"class":998},[36,119507,24578],{"class":998},[36,119509,119510],{"class":998}," fastfetch\n",[36,119512,119513],{"class":38,"line":2079},[36,119514,119515],{"class":2713},"fastfetch\n",[14,119517,119518],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,119520,119521],{},[2212,119522],{"alt":31,"src":119523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[868,119525,119527],{"id":119526},"_323-移除snap应用","3.2.3 移除snap应用",[14,119529,119530],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[26,119532,119534],{"className":117940,"code":119533,"language":117942,"meta":31,"style":31},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[33,119535,119536,119548,119559],{"__ignoreMap":31},[36,119537,119538,119540,119542,119545],{"class":38,"line":39},[36,119539,25321],{"class":2713},[36,119541,27258],{"class":998},[36,119543,119544],{"class":998}," disable",[36,119546,119547],{"class":998}," snapd.service\n",[36,119549,119550,119552,119554,119556],{"class":38,"line":46},[36,119551,25321],{"class":2713},[36,119553,27258],{"class":998},[36,119555,119544],{"class":998},[36,119557,119558],{"class":998}," snapd.socket\n",[36,119560,119561,119563,119565,119567],{"class":38,"line":78},[36,119562,25321],{"class":2713},[36,119564,27258],{"class":998},[36,119566,119544],{"class":998},[36,119568,119569],{"class":998}," snapd.seeded.service\n",[14,119571,119572],{},"然后查看snap应用列表",[14,119574,119575,119576,119581],{},"根据你安装的选择不同（最小安装或普通安装），有",[50,119577,119580],{"href":119578,"rel":119579},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24609],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[26,119583,119585],{"className":117940,"code":119584,"language":117942,"meta":31,"style":31},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[33,119586,119587,119592],{"__ignoreMap":31},[36,119588,119589],{"class":38,"line":39},[36,119590,119591],{"class":42},"# 查询当前系统上snap安装了哪些app\n",[36,119593,119594,119597],{"class":38,"line":46},[36,119595,119596],{"class":2713},"snap",[36,119598,119599],{"class":998}," list\n",[14,119601,119602],{},[2212,119603],{"alt":31,"src":119604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,119606,119607,119608,119611],{},"卸载掉图中所有应用，按照 ",[1043,119609,119610],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[26,119613,119615],{"className":117940,"code":119614,"language":117942,"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,119616,119617,119622,119634,119639,119650,119655,119666,119671,119682,119687,119691,119696,119707,119718],{"__ignoreMap":31},[36,119618,119619],{"class":38,"line":39},[36,119620,119621],{"class":42},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[36,119623,119624,119626,119629,119631],{"class":38,"line":46},[36,119625,25321],{"class":2713},[36,119627,119628],{"class":998}," snap",[36,119630,26824],{"class":998},[36,119632,119633],{"class":998}," snap-store\n",[36,119635,119636],{"class":38,"line":78},[36,119637,119638],{"class":42},"#移除firefox浏览器\n",[36,119640,119641,119643,119645,119647],{"class":38,"line":125},[36,119642,25321],{"class":2713},[36,119644,119628],{"class":998},[36,119646,26824],{"class":998},[36,119648,119649],{"class":998}," firefox\n",[36,119651,119652],{"class":38,"line":131},[36,119653,119654],{"class":42},"#移除gnome-42-2204\n",[36,119656,119657,119659,119661,119663],{"class":38,"line":396},[36,119658,25321],{"class":2713},[36,119660,119628],{"class":998},[36,119662,26824],{"class":998},[36,119664,119665],{"class":998}," gnome-42-2204\n",[36,119667,119668],{"class":38,"line":407},[36,119669,119670],{"class":42},"#移除gtk-common-themes\n",[36,119672,119673,119675,119677,119679],{"class":38,"line":2061},[36,119674,25321],{"class":2713},[36,119676,119628],{"class":998},[36,119678,26824],{"class":998},[36,119680,119681],{"class":998}," gtk-common-themes\n",[36,119683,119684],{"class":38,"line":2067},[36,119685,119686],{"class":42},"#移除其它...\n",[36,119688,119689],{"class":38,"line":2079},[36,119690,3423],{"class":49},[36,119692,119693],{"class":38,"line":2362},[36,119694,119695],{"class":42},"#移除core22,bare以及snapd\n",[36,119697,119698,119700,119702,119704],{"class":38,"line":2367},[36,119699,25321],{"class":2713},[36,119701,119628],{"class":998},[36,119703,26824],{"class":998},[36,119705,119706],{"class":998}," core22\n",[36,119708,119709,119711,119713,119715],{"class":38,"line":2373},[36,119710,25321],{"class":2713},[36,119712,119628],{"class":998},[36,119714,26824],{"class":998},[36,119716,119717],{"class":998}," bare\n",[36,119719,119720,119722,119724,119726],{"class":38,"line":2378},[36,119721,25321],{"class":2713},[36,119723,119628],{"class":998},[36,119725,26824],{"class":998},[36,119727,119728],{"class":998}," snapd\n",[14,119730,119731],{},[2212,119732],{"alt":31,"src":119733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119735,119736],{},"输入以下命令查看是否还有snap包",[26,119738,119740],{"className":117940,"code":119739,"language":117942,"meta":31,"style":31},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[33,119741,119742,119748,119752,119756,119760],{"__ignoreMap":31},[36,119743,119744,119746],{"class":38,"line":39},[36,119745,119596],{"class":2713},[36,119747,119599],{"class":998},[36,119749,119750],{"class":38,"line":46},[36,119751,119448],{"class":42},[36,119753,119754],{"class":38,"line":78},[36,119755,119472],{"class":2713},[36,119757,119758],{"class":38,"line":125},[36,119759,119481],{"class":42},[36,119761,119762],{"class":38,"line":131},[36,119763,119515],{"class":2713},[14,119765,119766],{},[2212,119767],{"alt":31,"src":119768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[868,119770,119772],{"id":119771},"_324-移除snap","3.2.4 移除snap",[14,119774,119775,119776,119781],{},"在删除掉",[50,119777,119780],{"href":119778,"rel":119779},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24609],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[26,119783,119785],{"className":117940,"code":119784,"language":117942,"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,119786,119787,119792,119805,119810,119821],{"__ignoreMap":31},[36,119788,119789],{"class":38,"line":39},[36,119790,119791],{"class":42}," #使用apt移除掉snap\n",[36,119793,119794,119796,119798,119800,119803],{"class":38,"line":46},[36,119795,25321],{"class":2713},[36,119797,117961],{"class":998},[36,119799,118269],{"class":998},[36,119801,119802],{"class":60}," --purge",[36,119804,119728],{"class":998},[36,119806,119807],{"class":38,"line":78},[36,119808,119809],{"class":42},"#移除snapd的一些目录\n",[36,119811,119812,119814,119816,119818],{"class":38,"line":125},[36,119813,25321],{"class":2713},[36,119815,119197],{"class":998},[36,119817,26070],{"class":60},[36,119819,119820],{"class":998}," \u002Fvar\u002Fcache\u002Fsnapd\n",[36,119822,119823,119825,119827,119829],{"class":38,"line":131},[36,119824,25321],{"class":2713},[36,119826,119197],{"class":998},[36,119828,26070],{"class":60},[36,119830,119831],{"class":998}," ~\u002Fsnap\n",[14,119833,119834,119835,119838],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[33,119836,119837],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[868,119840,119842],{"id":119841},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119844,119845],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[26,119847,119849],{"className":117940,"code":119848,"language":117942,"meta":31,"style":31},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[33,119850,119851],{"__ignoreMap":31},[36,119852,119853,119855,119857],{"class":38,"line":39},[36,119854,25321],{"class":2713},[36,119856,119227],{"class":998},[36,119858,119859],{"class":998}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119861,119862,119863,119866],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[33,119864,119865],{},":wq"," 回车",[26,119868,119870],{"className":117940,"code":119869,"language":117942,"meta":31,"style":31},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[33,119871,119872,119879,119893],{"__ignoreMap":31},[36,119873,119874,119877],{"class":38,"line":39},[36,119875,119876],{"class":2713},"Package:",[36,119878,119728],{"class":998},[36,119880,119881,119884,119887,119890],{"class":38,"line":46},[36,119882,119883],{"class":2713},"Pin:",[36,119885,119886],{"class":998}," release",[36,119888,119889],{"class":998}," a=",[36,119891,119892],{"class":60},"*\n",[36,119894,119895,119898],{"class":38,"line":78},[36,119896,119897],{"class":2713},"Pin-Priority:",[36,119899,119900],{"class":60}," -10\n",[14,119902,119903],{},[2212,119904],{"alt":31,"src":119905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[868,119907,119909],{"id":119908},"_326-测试是否成功","3.2.6 测试是否成功",[26,119911,119913],{"className":117940,"code":119912,"language":117942,"meta":31,"style":31},"sudo apt update\nsudo apt install firefox\n",[33,119914,119915,119923],{"__ignoreMap":31},[36,119916,119917,119919,119921],{"class":38,"line":39},[36,119918,25321],{"class":2713},[36,119920,117961],{"class":998},[36,119922,26987],{"class":998},[36,119924,119925,119927,119929,119931],{"class":38,"line":46},[36,119926,25321],{"class":2713},[36,119928,117961],{"class":998},[36,119930,24578],{"class":998},[36,119932,119649],{"class":998},[14,119934,119935],{},"这里提示snapd无法被安装，就证明成功了",[14,119937,119938],{},[2212,119939],{"alt":31,"src":119940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[868,119942,119944],{"id":119943},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119946,119947],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119949,119950],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119952,119953],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[26,119955,119957],{"className":117940,"code":119956,"language":117942,"meta":31,"style":31},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[33,119958,119959,119964,119973,119978,119986],{"__ignoreMap":31},[36,119960,119961],{"class":38,"line":39},[36,119962,119963],{"class":42},"# 添加Mozilla提供的源\n",[36,119965,119966,119968,119970],{"class":38,"line":46},[36,119967,25321],{"class":2713},[36,119969,119488],{"class":998},[36,119971,119972],{"class":998}," ppa:mozillateam\u002Fppa\n",[36,119974,119975],{"class":38,"line":78},[36,119976,119977],{"class":42},"# 安装Firefox\n",[36,119979,119980,119982,119984],{"class":38,"line":125},[36,119981,25321],{"class":2713},[36,119983,117961],{"class":998},[36,119985,26987],{"class":998},[36,119987,119988,119990,119992,119994],{"class":38,"line":131},[36,119989,25321],{"class":2713},[36,119991,117961],{"class":998},[36,119993,24578],{"class":998},[36,119995,119649],{"class":998},[868,119997,119999],{"id":119998},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,120001,120002],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,120004,120005],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[26,120007,120009],{"className":117940,"code":120008,"language":117942,"meta":31,"style":31},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[33,120010,120011,120016,120026,120034,120038],{"__ignoreMap":31},[36,120012,120013],{"class":38,"line":39},[36,120014,120015],{"class":42},"#删掉禁止安装snap的配置文件\n",[36,120017,120018,120020,120022,120024],{"class":38,"line":46},[36,120019,25321],{"class":2713},[36,120021,119197],{"class":998},[36,120023,26070],{"class":60},[36,120025,119859],{"class":998},[36,120027,120028,120030,120032],{"class":38,"line":78},[36,120029,25321],{"class":2713},[36,120031,117961],{"class":998},[36,120033,26987],{"class":998},[36,120035,120036],{"class":38,"line":125},[36,120037,194],{"emptyLinePlaceholder":193},[36,120039,120040,120042,120044],{"class":38,"line":131},[36,120041,25321],{"class":2713},[36,120043,117961],{"class":998},[36,120045,120046],{"class":998}," dist-update\n",[21,120048,120050],{"id":120049},"_33-中文输入法","3.3 中文输入法",[868,120052,120054],{"id":120053},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,120056,120057],{},"官网下载搜狗输入法",[14,120059,120060],{},[2212,120061],{"alt":31,"src":120062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,120064,120065],{},[2212,120066],{"alt":31,"src":120067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,120069,120070],{},"打开终端输入如下",[26,120072,120074],{"className":117940,"code":120073,"language":117942,"meta":31,"style":31},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[33,120075,120076,120083],{"__ignoreMap":31},[36,120077,120078,120080],{"class":38,"line":39},[36,120079,101920],{"class":60},[36,120081,120082],{"class":998}," ~\u002FDownloads\u002F\n",[36,120084,120085,120087,120089,120091],{"class":38,"line":46},[36,120086,25321],{"class":2713},[36,120088,117961],{"class":998},[36,120090,24578],{"class":998},[36,120092,120093],{"class":998}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,120095,120096],{},"打开Fcitx",[14,120098,120099,120102],{},[2212,120100],{"alt":31,"src":120101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[2212,120103],{"alt":31,"src":120104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,120106,120107],{},[2212,120108],{"alt":31,"src":120109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,120111,120112],{},"添加搜狗输入法",[14,120114,120115],{},[2212,120116],{"alt":31,"src":120117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,120119,120120],{},[2212,120121],{"alt":31,"src":120122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,120124,120125],{},"将搜狗输入法设置为唯一输入法",[14,120127,120128],{},[2212,120129],{"alt":31,"src":120130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[868,120132,120134],{"id":120133},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[851,120136,120137],{},[854,120138,120139],{},"卸载旧输入法",[26,120141,120143],{"className":119167,"code":120142,"language":119169,"meta":31,"style":31},"sudo apt purge fcitx* ibus*\n",[33,120144,120145],{"__ignoreMap":31},[36,120146,120147,120149,120151,120153,120156,120158,120161],{"class":38,"line":39},[36,120148,25321],{"class":2713},[36,120150,117961],{"class":998},[36,120152,118302],{"class":998},[36,120154,120155],{"class":998}," fcitx",[36,120157,1339],{"class":60},[36,120159,120160],{"class":998}," ibus",[36,120162,119892],{"class":60},[851,120164,120165],{"start":46},[854,120166,120167],{},"安装Fcitx5",[26,120169,120171],{"className":117940,"code":120170,"language":117942,"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,120172,120173,120178,120192,120196,120201,120210,120218],{"__ignoreMap":31},[36,120174,120175],{"class":38,"line":39},[36,120176,120177],{"class":42},"# Ubuntu22.04及以上、Debian12及以上\n",[36,120179,120180,120182,120184,120186,120189],{"class":38,"line":46},[36,120181,25321],{"class":2713},[36,120183,117961],{"class":998},[36,120185,24578],{"class":998},[36,120187,120188],{"class":998}," fcitx5",[36,120190,120191],{"class":998}," fcitx5-chinese-addons\n",[36,120193,120194],{"class":38,"line":78},[36,120195,194],{"emptyLinePlaceholder":193},[36,120197,120198],{"class":38,"line":125},[36,120199,120200],{"class":42},"# Ubuntu20.04\n",[36,120202,120203,120205,120207],{"class":38,"line":131},[36,120204,25321],{"class":2713},[36,120206,119488],{"class":998},[36,120208,120209],{"class":998}," ppa:zhsj\u002Ffcitx5\n",[36,120211,120212,120214,120216],{"class":38,"line":396},[36,120213,25321],{"class":2713},[36,120215,117961],{"class":998},[36,120217,26987],{"class":998},[36,120219,120220,120222,120224,120226,120228],{"class":38,"line":407},[36,120221,25321],{"class":2713},[36,120223,117961],{"class":998},[36,120225,24578],{"class":998},[36,120227,120188],{"class":998},[36,120229,120191],{"class":998},[851,120231,120232,120235],{"start":78},[854,120233,120234],{},"Reboot System",[854,120236,120237],{},"启动Fcitx5",[14,120239,120240],{},[2212,120241],{"alt":31,"src":120242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[851,120244,120245],{"start":131},[854,120246,120247],{},"修改一些设置",[14,120249,120250],{},"将Pinyin和Keyboard - English US加入到左边。",[14,120252,120253],{},[2212,120254],{"alt":31,"src":120255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,120257,120258],{},"添加快捷键以便于更好切换中英文",[14,120260,120261],{},[2212,120262],{"alt":31,"src":120263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[851,120265,120266],{"start":396},[854,120267,120268],{},"重启",[26,120270,120272],{"className":119167,"code":120271,"language":119169,"meta":31,"style":31},"sudo shutdown -r now\n",[33,120273,120274],{"__ignoreMap":31},[36,120275,120276,120278,120281,120284],{"class":38,"line":39},[36,120277,25321],{"class":2713},[36,120279,120280],{"class":998}," shutdown",[36,120282,120283],{"class":60}," -r",[36,120285,120286],{"class":998}," now\n",[851,120288,120289],{"start":407},[854,120290,120291],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,120293,120294],{},[50,120295,120296],{"href":120296,"rel":120297},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24609],[851,120299,120300],{"start":2061},[854,120301,120302],{},"再重启",[26,120304,120305],{"className":119167,"code":120271,"language":119169,"meta":31,"style":31},[33,120306,120307],{"__ignoreMap":31},[36,120308,120309,120311,120313,120315],{"class":38,"line":39},[36,120310,25321],{"class":2713},[36,120312,120280],{"class":998},[36,120314,120283],{"class":60},[36,120316,120286],{"class":998},[21,120318,120320],{"id":120319},"_34-pip3源替换","3.4 pip3源替换",[14,120322,120323],{},"非Debian系发行版需要做。",[14,120325,120326],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,120328,120329],{},"使用dnf的系统也可能不用做。",[26,120331,120333],{"className":117940,"code":120332,"language":117942,"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,120334,120335,120340,120347,120352,120357],{"__ignoreMap":31},[36,120336,120337],{"class":38,"line":39},[36,120338,120339],{"class":42},"# 检查是否已安装 pip\n",[36,120341,120342,120345],{"class":38,"line":46},[36,120343,120344],{"class":2713},"pip3",[36,120346,27038],{"class":60},[36,120348,120349],{"class":38,"line":78},[36,120350,120351],{"class":42},"# 如果未安装，先安装 pip3（见下方）\n",[36,120353,120354],{"class":38,"line":125},[36,120355,120356],{"class":42},"# 配置 pip 使用清华源\n",[36,120358,120359,120361,120364,120367,120370],{"class":38,"line":131},[36,120360,120344],{"class":2713},[36,120362,120363],{"class":998}," config",[36,120365,120366],{"class":998}," set",[36,120368,120369],{"class":998}," global.index-url",[36,120371,120372],{"class":998}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,120374,120375],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,120377,120378],{},[2212,120379],{"alt":31,"src":120380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[26,120382,120384],{"className":117940,"code":120383,"language":117942,"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,120385,120386,120391,120399,120410,120414,120419,120438,120442,120447,120459,120463,120468],{"__ignoreMap":31},[36,120387,120388],{"class":38,"line":39},[36,120389,120390],{"class":42},"#安装pip3\n",[36,120392,120393,120395,120397],{"class":38,"line":46},[36,120394,25321],{"class":2713},[36,120396,117961],{"class":998},[36,120398,26987],{"class":998},[36,120400,120401,120403,120405,120407],{"class":38,"line":78},[36,120402,25321],{"class":2713},[36,120404,26821],{"class":998},[36,120406,24578],{"class":998},[36,120408,120409],{"class":998}," python3-pip\n",[36,120411,120412],{"class":38,"line":125},[36,120413,194],{"emptyLinePlaceholder":193},[36,120415,120416],{"class":38,"line":131},[36,120417,120418],{"class":42},"#更新pip3\n",[36,120420,120421,120423,120425,120427,120429,120431,120434,120436],{"class":38,"line":396},[36,120422,101523],{"class":2713},[36,120424,101526],{"class":60},[36,120426,101549],{"class":998},[36,120428,24578],{"class":998},[36,120430,27175],{"class":60},[36,120432,120433],{"class":998}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[36,120435,101554],{"class":60},[36,120437,101557],{"class":998},[36,120439,120440],{"class":38,"line":407},[36,120441,194],{"emptyLinePlaceholder":193},[36,120443,120444],{"class":38,"line":2061},[36,120445,120446],{"class":42},"#设置pip源为清华源\n",[36,120448,120449,120451,120453,120455,120457],{"class":38,"line":2067},[36,120450,120344],{"class":2713},[36,120452,120363],{"class":998},[36,120454,120366],{"class":998},[36,120456,120369],{"class":998},[36,120458,120372],{"class":998},[36,120460,120461],{"class":38,"line":2079},[36,120462,194],{"emptyLinePlaceholder":193},[36,120464,120465],{"class":38,"line":2362},[36,120466,120467],{"class":42},"#测试\n",[36,120469,120470,120472,120474,120476,120478,120480],{"class":38,"line":2367},[36,120471,101523],{"class":2713},[36,120473,101526],{"class":60},[36,120475,101549],{"class":998},[36,120477,24578],{"class":998},[36,120479,101554],{"class":60},[36,120481,101557],{"class":998},[14,120483,120484],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,120486,120487],{},[2212,120488],{"alt":31,"src":120489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[21,120491,120493],{"id":120492},"_35-显卡驱动安装","3.5 显卡驱动安装",[868,120495,120497],{"id":120496},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[26,120499,120501],{"className":119167,"code":120500,"language":119169,"meta":31,"style":31},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[33,120502,120503,120508,120523,120528],{"__ignoreMap":31},[36,120504,120505],{"class":38,"line":39},[36,120506,120507],{"class":42},"# 如果是使用apt安装的驱动\n",[36,120509,120510,120512,120514,120516,120518,120521],{"class":38,"line":46},[36,120511,25321],{"class":2713},[36,120513,26821],{"class":998},[36,120515,26824],{"class":998},[36,120517,119802],{"class":60},[36,120519,120520],{"class":998}," nvidia",[36,120522,119892],{"class":60},[36,120524,120525],{"class":38,"line":78},[36,120526,120527],{"class":42},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[36,120529,120530,120532],{"class":38,"line":125},[36,120531,25321],{"class":2713},[36,120533,120534],{"class":998}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[868,120536,120538],{"id":120537},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22742,120540,120542],{"id":120541},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23654,120544,120546],{"id":120545},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[26,120548,120550],{"className":119167,"code":120549,"language":119169,"meta":31,"style":31},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[33,120551,120552,120557,120568,120573,120583,120588],{"__ignoreMap":31},[36,120553,120554],{"class":38,"line":39},[36,120555,120556],{"class":42},"# 安装英伟达驱动\n",[36,120558,120559,120561,120563,120565],{"class":38,"line":46},[36,120560,25321],{"class":2713},[36,120562,117961],{"class":998},[36,120564,24578],{"class":998},[36,120566,120567],{"class":998}," nvidia-driver-版本号\n",[36,120569,120570],{"class":38,"line":78},[36,120571,120572],{"class":42},"# 重启 \n",[36,120574,120575,120577,120579,120581],{"class":38,"line":125},[36,120576,25321],{"class":2713},[36,120578,120280],{"class":998},[36,120580,120283],{"class":60},[36,120582,120286],{"class":998},[36,120584,120585],{"class":38,"line":131},[36,120586,120587],{"class":42},"# 检查驱动是否安装成功\n",[36,120589,120590],{"class":38,"line":396},[36,120591,120592],{"class":2713},"nvidia-smi\n",[23654,120594,120596],{"id":120595},"_35212-debian","3.5.2.1.2 Debian",[26,120598,120600],{"className":119167,"code":120599,"language":119169,"meta":31,"style":31},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[33,120601,120602,120606,120620,120624,120634,120638],{"__ignoreMap":31},[36,120603,120604],{"class":38,"line":39},[36,120605,120556],{"class":42},[36,120607,120608,120610,120612,120614,120617],{"class":38,"line":46},[36,120609,25321],{"class":2713},[36,120611,117961],{"class":998},[36,120613,24578],{"class":998},[36,120615,120616],{"class":998}," nvidia-driver",[36,120618,120619],{"class":998}," nvidia-settings\n",[36,120621,120622],{"class":38,"line":78},[36,120623,120572],{"class":42},[36,120625,120626,120628,120630,120632],{"class":38,"line":125},[36,120627,25321],{"class":2713},[36,120629,120280],{"class":998},[36,120631,120283],{"class":60},[36,120633,120286],{"class":998},[36,120635,120636],{"class":38,"line":131},[36,120637,120587],{"class":42},[36,120639,120640],{"class":38,"line":396},[36,120641,120592],{"class":2713},[22742,120643,120645],{"id":120644},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,120647,120648,120649,120652],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[1043,120650,120651],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,120654,120655,120656],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[24297,120657,120658],{},[1043,120659,120660],{},"（也可以不禁用桌面环境，直接进行下一步。）",[26,120662,120664],{"className":119167,"code":120663,"language":119169,"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,120665,120666,120671,120681,120686,120699,120704],{"__ignoreMap":31},[36,120667,120668],{"class":38,"line":39},[36,120669,120670],{"class":42},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[36,120672,120673,120675,120678],{"class":38,"line":46},[36,120674,25321],{"class":2713},[36,120676,120677],{"class":998}," telinit",[36,120679,120680],{"class":60}," 3\n",[36,120682,120683],{"class":38,"line":78},[36,120684,120685],{"class":42},"# ubuntu 使用下方命令\n",[36,120687,120688,120690,120693,120696],{"class":38,"line":125},[36,120689,25321],{"class":2713},[36,120691,120692],{"class":998}," service",[36,120694,120695],{"class":998}," lightdm",[36,120697,120698],{"class":998}," stop\n",[36,120700,120701],{"class":38,"line":131},[36,120702,120703],{"class":42},"# Fedora 使用下方命令\n",[36,120705,120706,120708,120710,120713],{"class":38,"line":396},[36,120707,25321],{"class":2713},[36,120709,27258],{"class":998},[36,120711,120712],{"class":998}," isolate",[36,120714,120715],{"class":998}," multi-user.target\n",[14,120717,120718],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[26,120720,120722],{"className":119167,"code":120721,"language":119169,"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,120723,120724,120729,120740,120745,120752,120757,120769,120774,120781,120786],{"__ignoreMap":31},[36,120725,120726],{"class":38,"line":39},[36,120727,120728],{"class":42},"# 编译环境+准备工作\n",[36,120730,120731,120733,120735,120737],{"class":38,"line":46},[36,120732,25321],{"class":2713},[36,120734,117961],{"class":998},[36,120736,24578],{"class":998},[36,120738,120739],{"class":998}," build-essential\n",[36,120741,120742],{"class":38,"line":78},[36,120743,120744],{"class":42},"# 进入到.run目录中\n",[36,120746,120747,120749],{"class":38,"line":125},[36,120748,101920],{"class":60},[36,120750,120751],{"class":998}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[36,120753,120754],{"class":38,"line":131},[36,120755,120756],{"class":42},"# 给驱动文件增加可执行权限：\n",[36,120758,120759,120761,120763,120766],{"class":38,"line":396},[36,120760,25321],{"class":2713},[36,120762,25324],{"class":998},[36,120764,120765],{"class":998}," a+x",[36,120767,120768],{"class":998}," NVIDIA-Linux-x86_64-550.107.02.run\n",[36,120770,120771],{"class":38,"line":407},[36,120772,120773],{"class":42},"# 然后执行安装：\n",[36,120775,120776,120778],{"class":38,"line":2061},[36,120777,25321],{"class":2713},[36,120779,120780],{"class":998}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[36,120782,120783],{"class":38,"line":2067},[36,120784,120785],{"class":42},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[36,120787,120788,120790,120793],{"class":38,"line":2079},[36,120789,25321],{"class":2713},[36,120791,120792],{"class":998}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[36,120794,120795],{"class":60},"  --no-opengl-files\n",[14,120797,120798],{},"安装完毕重启即可",[26,120800,120802],{"className":119167,"code":120801,"language":119169,"meta":31,"style":31},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[33,120803,120804,120808,120814,120818],{"__ignoreMap":31},[36,120805,120806],{"class":38,"line":39},[36,120807,120572],{"class":42},[36,120809,120810,120812],{"class":38,"line":46},[36,120811,25321],{"class":2713},[36,120813,27392],{"class":998},[36,120815,120816],{"class":38,"line":78},[36,120817,120587],{"class":42},[36,120819,120820],{"class":38,"line":125},[36,120821,120592],{"class":2713},[868,120823,120825],{"id":120824},"_353-安装cuda","3.5.3 安装CUDA",[14,120827,120828],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120830,120831],{},[2212,120832],{"alt":31,"src":120833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[851,120835,120836],{},[854,120837,120838],{},"先查看显卡驱动所支持的最高CUDA版本",[26,120840,120841],{"className":119167,"code":120592,"language":119169,"meta":31,"style":31},[33,120842,120843],{"__ignoreMap":31},[36,120844,120845],{"class":38,"line":39},[36,120846,120592],{"class":2713},[14,120848,120849],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120851,120852],{},[2212,120853],{"alt":31,"src":120854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[851,120856,120857],{"start":46},[854,120858,120859],{},"下载CUDA并安装CUDA",[14,120861,118946,120862],{},[50,120863,118949],{"href":118949,"rel":120864},[24609],[14,120866,120867],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120869,120870],{},[2212,120871],{"alt":31,"src":120872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120874,120875,120876,120881],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[50,120877,120880],{"href":120878,"rel":120879},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24609],"Vinci机器人队单片机教程","）",[14,120883,120884],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120886,120887],{},[2212,120888],{"alt":31,"src":120889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120891,120892],{},"将最下方框框里的命令敲入终端",[26,120894,120896],{"className":119167,"code":120895,"language":119169,"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,120897,120898,120903,120912,120917,120924,120929,120937,120942,120953,120958],{"__ignoreMap":31},[36,120899,120900],{"class":38,"line":39},[36,120901,120902],{"class":42},"# 在当前文件夹下创建一个ttt的子文件夹\n",[36,120904,120905,120907,120909],{"class":38,"line":46},[36,120906,101910],{"class":2713},[36,120908,29961],{"class":60},[36,120910,120911],{"class":998}," .\u002Fttt\n",[36,120913,120914],{"class":38,"line":78},[36,120915,120916],{"class":42},"# 进入ttt文件夹\n",[36,120918,120919,120921],{"class":38,"line":125},[36,120920,101920],{"class":60},[36,120922,120923],{"class":998}," ttt\n",[36,120925,120926],{"class":38,"line":131},[36,120927,120928],{"class":42},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[36,120930,120931,120934],{"class":38,"line":396},[36,120932,120933],{"class":2713},"wget",[36,120935,120936],{"class":998}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[36,120938,120939],{"class":38,"line":407},[36,120940,120941],{"class":42},"# 给予权限\n",[36,120943,120944,120946,120948,120950],{"class":38,"line":2061},[36,120945,25321],{"class":2713},[36,120947,25324],{"class":998},[36,120949,120765],{"class":998},[36,120951,120952],{"class":998}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[36,120954,120955],{"class":38,"line":2067},[36,120956,120957],{"class":42},"# 运行脚本\n",[36,120959,120960,120962],{"class":38,"line":2079},[36,120961,25321],{"class":2713},[36,120963,120952],{"class":998},[14,120965,120966],{},[2212,120967],{"alt":31,"src":120968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120970,120971],{},"正在安装中：",[14,120973,120974],{},[2212,120975],{"alt":31,"src":120976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120978,120979],{},"输入accept接受即可",[14,120981,120982],{},[2212,120983],{"alt":31,"src":120984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120986,120987],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120989,120990],{},[2212,120991],{"alt":31,"src":120992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120994,120995],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120997,120998],{},[2212,120999],{"alt":31,"src":121000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[851,121002,121003],{"start":78},[854,121004,121005],{},"配置环境",[14,121007,121008],{},"根据上方确认一下路径，比如我上面红色框起来的为",[26,121010,121012],{"className":119167,"code":121011,"language":119169,"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,121013,121014,121030,121045],{"__ignoreMap":31},[36,121015,121016,121019,121022,121025,121028],{"class":38,"line":39},[36,121017,121018],{"class":2713},"Please",[36,121020,121021],{"class":998}," make",[36,121023,121024],{"class":998}," sure",[36,121026,121027],{"class":998}," that",[36,121029,3423],{"class":49},[36,121031,121032,121034,121037,121040,121043],{"class":38,"line":46},[36,121033,53013],{"class":2713},[36,121035,121036],{"class":998},"   PATH",[36,121038,121039],{"class":998}," includes",[36,121041,121042],{"class":998}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[36,121044,3423],{"class":49},[36,121046,121047,121049,121052,121054,121057,121060,121062,121065,121068,121071,121074,121076,121079,121081],{"class":38,"line":78},[36,121048,53013],{"class":2713},[36,121050,121051],{"class":998},"   LD_LIBRARY_PATH",[36,121053,121039],{"class":998},[36,121055,121056],{"class":998}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[36,121058,121059],{"class":998}," or,",[36,121061,5957],{"class":998},[36,121063,121064],{"class":998}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[36,121066,121067],{"class":998}," to",[36,121069,121070],{"class":998}," \u002Fetc\u002Fld.so.conf",[36,121072,121073],{"class":998}," and",[36,121075,27975],{"class":998},[36,121077,121078],{"class":998}," ldconfig",[36,121080,65346],{"class":998},[36,121082,121083],{"class":998}," root\n",[14,121085,121086],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[26,121088,121090],{"className":119167,"code":121089,"language":119169,"meta":31,"style":31},"which nvcc\n",[33,121091,121092],{"__ignoreMap":31},[36,121093,121094,121097],{"class":38,"line":39},[36,121095,121096],{"class":60},"which",[36,121098,121099],{"class":998}," nvcc\n",[14,121101,121102],{},[2212,121103],{"alt":31,"src":121104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,121106,121107],{},"所以我进行以下操作：",[26,121109,121111],{"className":119167,"code":121110,"language":119169,"meta":31,"style":31},"sudo vim ~\u002F.bashrc\n",[33,121112,121113],{"__ignoreMap":31},[36,121114,121115,121117,121119],{"class":38,"line":39},[36,121116,25321],{"class":2713},[36,121118,119227],{"class":998},[36,121120,121121],{"class":998}," ~\u002F.bashrc\n",[14,121123,121124],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[26,121126,121128],{"className":119167,"code":121127,"language":119169,"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,121129,121130,121142],{"__ignoreMap":31},[36,121131,121132,121134,121137,121139],{"class":38,"line":39},[36,121133,25787],{"class":53},[36,121135,121136],{"class":49}," PATH",[36,121138,54],{"class":53},[36,121140,121141],{"class":49},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[36,121143,121144,121146,121149,121151],{"class":38,"line":46},[36,121145,25787],{"class":53},[36,121147,121148],{"class":49}," LD_LIBRARY_PATH",[36,121150,54],{"class":53},[36,121152,121153],{"class":49},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,121155,121156],{},[2212,121157],{"alt":31,"src":121158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[26,121160,121162],{"className":119167,"code":121161,"language":119169,"meta":31,"style":31},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[33,121163,121164,121169,121175,121180],{"__ignoreMap":31},[36,121165,121166],{"class":38,"line":39},[36,121167,121168],{"class":42},"# 刷新当前终端的环境变量\n",[36,121170,121171,121173],{"class":38,"line":46},[36,121172,101537],{"class":60},[36,121174,121121],{"class":998},[36,121176,121177],{"class":38,"line":78},[36,121178,121179],{"class":42},"# 验证CUDA是否安装成功\n",[36,121181,121182,121185],{"class":38,"line":125},[36,121183,121184],{"class":2713},"nvcc",[36,121186,121187],{"class":60}," -V\n",[14,121189,121190],{},"出现下图这种则安装成功。",[14,121192,121193],{},[2212,121194],{"alt":31,"src":121195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[868,121197,121199],{"id":121198},"_354-安装cudnn","3.5.4 安装cuDNN",[851,121201,121202],{},[854,121203,121204],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,121206,121207,121208,121213],{},"前往 NVIDIA cuDNN 下载页面：",[50,121209,121212],{"href":121210,"rel":121211},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24609],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,121215,121216],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,121218,121219],{},[2212,121220],{"alt":31,"src":121221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,121223,121224],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,121226,121227],{},[2212,121228],{"alt":31,"src":121229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,121231,121232],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,121234,121235],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,121237,121238],{},[1043,121239,121240],{},"我这里选择所有Linux X86_64最通用的办法：",[14,121242,121243],{},"下载好的：",[14,121245,121246],{},[2212,121247],{"alt":31,"src":121248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[851,121250,121251],{"start":46},[854,121252,121253],{},"安装cuDNN",[14,121255,121256],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,121258,121259],{},[2212,121260],{"alt":31,"src":121261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,121263,121264],{},"解压文件，并复制到对应位置完成安装",[26,121266,121268],{"className":119167,"code":121267,"language":119169,"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,121269,121270,121275,121286,121291,121298,121303,121319,121333,121338,121349,121358,121362,121378],{"__ignoreMap":31},[36,121271,121272],{"class":38,"line":39},[36,121273,121274],{"class":42},"# 解压cuDNN文件\n",[36,121276,121277,121280,121283],{"class":38,"line":46},[36,121278,121279],{"class":2713},"tar",[36,121281,121282],{"class":60}," -xvf",[36,121284,121285],{"class":998}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[36,121287,121288],{"class":38,"line":78},[36,121289,121290],{"class":42},"# cd进文件夹\n",[36,121292,121293,121295],{"class":38,"line":125},[36,121294,101920],{"class":60},[36,121296,121297],{"class":998}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[36,121299,121300],{"class":38,"line":131},[36,121301,121302],{"class":42},"# 复制cuDNN文件到CUDA目录\n",[36,121304,121305,121307,121309,121312,121314,121317],{"class":38,"line":396},[36,121306,25321],{"class":2713},[36,121308,28606],{"class":998},[36,121310,121311],{"class":998}," include\u002Fcudnn",[36,121313,1339],{"class":60},[36,121315,121316],{"class":998},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[36,121318,3423],{"class":49},[36,121320,121321,121323,121325,121328,121330],{"class":38,"line":407},[36,121322,25321],{"class":2713},[36,121324,28606],{"class":998},[36,121326,121327],{"class":998}," lib\u002Flibcudnn",[36,121329,1339],{"class":60},[36,121331,121332],{"class":998},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[36,121334,121335],{"class":38,"line":2061},[36,121336,121337],{"class":42},"# 对比一下有没有缺文件\n",[36,121339,121340,121342,121345,121347],{"class":38,"line":2067},[36,121341,27506],{"class":2713},[36,121343,121344],{"class":998}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[36,121346,1339],{"class":60},[36,121348,3423],{"class":49},[36,121350,121351,121353,121356],{"class":38,"line":2079},[36,121352,27506],{"class":2713},[36,121354,121355],{"class":998}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[36,121357,119892],{"class":60},[36,121359,121360],{"class":38,"line":2362},[36,121361,120941],{"class":42},[36,121363,121364,121366,121368,121371,121373,121375],{"class":38,"line":2367},[36,121365,25321],{"class":2713},[36,121367,25324],{"class":998},[36,121369,121370],{"class":998}," a+r",[36,121372,121344],{"class":998},[36,121374,1339],{"class":60},[36,121376,121377],{"class":49},"   \n",[36,121379,121380,121382,121384,121386,121388],{"class":38,"line":2373},[36,121381,25321],{"class":2713},[36,121383,25324],{"class":998},[36,121385,121370],{"class":998},[36,121387,121355],{"class":998},[36,121389,119892],{"class":60},[851,121391,121392],{"start":78},[854,121393,121394],{},"检查是否安装成功",[26,121396,121398],{"className":119167,"code":121397,"language":119169,"meta":31,"style":31},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[33,121399,121400,121405],{"__ignoreMap":31},[36,121401,121402],{"class":38,"line":39},[36,121403,121404],{"class":42},"# 检查cuDNN版本命令\n",[36,121406,121407,121410,121413,121415,121417,121420,121423],{"class":38,"line":46},[36,121408,121409],{"class":2713},"cat",[36,121411,121412],{"class":998}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[36,121414,25854],{"class":53},[36,121416,30981],{"class":2713},[36,121418,121419],{"class":998}," CUDNN_MAJOR",[36,121421,121422],{"class":60}," -A",[36,121424,48465],{"class":60},[14,121426,121427],{},"出现下图这样的就是安装成功了",[14,121429,121430],{},[2212,121431],{"alt":31,"src":121432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[851,121434,121435],{"start":125},[854,121436,121437],{},"软链接(一般不需要)",[26,121439,121441],{"className":119167,"code":121440,"language":119169,"meta":31,"style":31},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[33,121442,121443,121448],{"__ignoreMap":31},[36,121444,121445],{"class":38,"line":39},[36,121446,121447],{"class":42},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[36,121449,121450,121452],{"class":38,"line":46},[36,121451,25321],{"class":2713},[36,121453,121454],{"class":998}," ldconfig\n",[14,121456,121457],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[26,121459,121464],{"className":121460,"code":121461,"language":121462,"meta":121463,"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,121465,121466,121471,121476,121481,121486,121491,121496],{"__ignoreMap":31},[36,121467,121468],{"class":38,"line":39},[36,121469,121470],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[36,121472,121473],{"class":38,"line":46},[36,121474,121475],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[36,121477,121478],{"class":38,"line":78},[36,121479,121480],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[36,121482,121483],{"class":38,"line":125},[36,121484,121485],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[36,121487,121488],{"class":38,"line":131},[36,121489,121490],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[36,121492,121493],{"class":38,"line":396},[36,121494,121495],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[36,121497,121498],{"class":38,"line":407},[36,121499,121500],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,121502,121503],{},"运行下方的命令",[26,121505,121507],{"className":119167,"code":121506,"language":119169,"meta":31,"style":31},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[33,121508,121509,121514,121521,121526],{"__ignoreMap":31},[36,121510,121511],{"class":38,"line":39},[36,121512,121513],{"class":42},"# cd进入CUDA路径\n",[36,121515,121516,121518],{"class":38,"line":46},[36,121517,101920],{"class":60},[36,121519,121520],{"class":998}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[36,121522,121523],{"class":38,"line":78},[36,121524,121525],{"class":42}," # 查看本路径下的需要软链接的文件名\n",[36,121527,121528],{"class":38,"line":125},[36,121529,121530],{"class":2713}," ls\n",[14,121532,121533],{},[2212,121534],{"alt":31,"src":121535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,121537,121538,121539,19154,121542,19154,121545,121548],{},"如上图，我需要将",[33,121540,121541],{},"libcudnn_xxx_xxxxx.so.8.9.7",[33,121543,121544],{},"libcudnn_xxx_xxxxx.so.8",[33,121546,121547],{},"libcudnn_xxx_xxxxx.so","软链接",[26,121550,121552],{"className":119167,"code":121551,"language":119169,"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,121553,121554,121559,121575,121589,121603,121617,121631,121645,121659,121664,121670,121675],{"__ignoreMap":31},[36,121555,121556],{"class":38,"line":39},[36,121557,121558],{"class":42},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[36,121560,121561,121563,121566,121569,121572],{"class":38,"line":46},[36,121562,25321],{"class":2713},[36,121564,121565],{"class":998}," ln",[36,121567,121568],{"class":60}," -sf",[36,121570,121571],{"class":998}," libcudnn_cnn_train.so.8.9.7",[36,121573,121574],{"class":998}," libcudnn_cnn_train.so.8\n",[36,121576,121577,121579,121581,121583,121586],{"class":38,"line":78},[36,121578,25321],{"class":2713},[36,121580,121565],{"class":998},[36,121582,121568],{"class":60},[36,121584,121585],{"class":998}," libcudnn_adv_infer.so.8.9.7",[36,121587,121588],{"class":998}," libcudnn_adv_infer.so.8\n",[36,121590,121591,121593,121595,121597,121600],{"class":38,"line":125},[36,121592,25321],{"class":2713},[36,121594,121565],{"class":998},[36,121596,121568],{"class":60},[36,121598,121599],{"class":998}," libcudnn_adv_train.so.8.9.7",[36,121601,121602],{"class":998}," libcudnn_adv_train.so.8\n",[36,121604,121605,121607,121609,121611,121614],{"class":38,"line":131},[36,121606,25321],{"class":2713},[36,121608,121565],{"class":998},[36,121610,121568],{"class":60},[36,121612,121613],{"class":998}," libcudnn_cnn_infer.so.8.9.7",[36,121615,121616],{"class":998}," libcudnn_cnn_infer.so.8\n",[36,121618,121619,121621,121623,121625,121628],{"class":38,"line":396},[36,121620,25321],{"class":2713},[36,121622,121565],{"class":998},[36,121624,121568],{"class":60},[36,121626,121627],{"class":998}," libcudnn.so.8.9.7",[36,121629,121630],{"class":998}," libcudnn.so.8\n",[36,121632,121633,121635,121637,121639,121642],{"class":38,"line":407},[36,121634,25321],{"class":2713},[36,121636,121565],{"class":998},[36,121638,121568],{"class":60},[36,121640,121641],{"class":998}," libcudnn_ops_infer.so.8.9.7",[36,121643,121644],{"class":998}," libcudnn_ops_infer.so.8\n",[36,121646,121647,121649,121651,121653,121656],{"class":38,"line":2061},[36,121648,25321],{"class":2713},[36,121650,121565],{"class":998},[36,121652,121568],{"class":60},[36,121654,121655],{"class":998}," libcudnn_ops_train.so.8.9.7",[36,121657,121658],{"class":998}," libcudnn_ops_train.so.8\n",[36,121660,121661],{"class":38,"line":2067},[36,121662,121663],{"class":42},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[36,121665,121666,121668],{"class":38,"line":2079},[36,121667,25321],{"class":2713},[36,121669,121454],{"class":998},[36,121671,121672],{"class":38,"line":2362},[36,121673,121674],{"class":42},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[36,121676,121677,121679,121682,121685,121687,121690],{"class":38,"line":2367},[36,121678,27506],{"class":2713},[36,121680,121681],{"class":60}," -l",[36,121683,121684],{"class":998}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[36,121686,1339],{"class":60},[36,121688,121689],{"class":998},".so",[36,121691,119892],{"class":60},[868,121693,121695],{"id":121694},"_355-常见问题","3.5.5 常见问题",[851,121697,121698],{},[854,121699,121700],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[26,121702,121704],{"className":119167,"code":121703,"language":119169,"meta":31,"style":31},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[33,121705,121706],{"__ignoreMap":31},[36,121707,121708,121710,121712],{"class":38,"line":39},[36,121709,25321],{"class":2713},[36,121711,119227],{"class":998},[36,121713,121714],{"class":998}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121716,121717],{},"blacklist-nouveau.conf文件内容如下：",[26,121719,121721],{"className":119167,"code":121720,"language":119169,"meta":31,"style":31},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[33,121722,121723,121731,121738,121750,121760],{"__ignoreMap":31},[36,121724,121725,121728],{"class":38,"line":39},[36,121726,121727],{"class":2713},"blacklist",[36,121729,121730],{"class":998}," nouveau\n",[36,121732,121733,121735],{"class":38,"line":46},[36,121734,121727],{"class":2713},[36,121736,121737],{"class":998}," lbm-nouveau\n",[36,121739,121740,121742,121745,121748],{"class":38,"line":78},[36,121741,116574],{"class":2713},[36,121743,121744],{"class":998}," nouveau",[36,121746,121747],{"class":998}," modeset=",[36,121749,3834],{"class":60},[36,121751,121752,121755,121757],{"class":38,"line":125},[36,121753,121754],{"class":60},"alias",[36,121756,121744],{"class":998},[36,121758,121759],{"class":998}," off\n",[36,121761,121762,121764,121767],{"class":38,"line":131},[36,121763,121754],{"class":60},[36,121765,121766],{"class":998}," lbm-nouveau",[36,121768,121759],{"class":998},[14,121770,121771],{},"接着运行下方命令",[26,121773,121775],{"className":119167,"code":121774,"language":119169,"meta":31,"style":31},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[33,121776,121777,121787,121792],{"__ignoreMap":31},[36,121778,121779,121781,121784],{"class":38,"line":39},[36,121780,25321],{"class":2713},[36,121782,121783],{"class":998}," update-initramfs",[36,121785,121786],{"class":60}," -u\n",[36,121788,121789],{"class":38,"line":46},[36,121790,121791],{"class":2713},"或者\n",[36,121793,121794,121796,121799],{"class":38,"line":78},[36,121795,25321],{"class":2713},[36,121797,121798],{"class":998}," dracut",[36,121800,121801],{"class":60}," --force\n",[14,121803,121804],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[26,121806,121808],{"className":119167,"code":121807,"language":119169,"meta":31,"style":31},"lsmod | grep nouveau\n",[33,121809,121810],{"__ignoreMap":31},[36,121811,121812,121815,121817,121819],{"class":38,"line":39},[36,121813,121814],{"class":2713},"lsmod",[36,121816,25854],{"class":53},[36,121818,30981],{"class":2713},[36,121820,121730],{"class":998},[851,121822,121823],{"start":46},[854,121824,121825],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[26,121827,121829],{"className":119167,"code":121828,"language":119169,"meta":31,"style":31},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[33,121830,121831],{"__ignoreMap":31},[36,121832,121833,121835,121837],{"class":38,"line":39},[36,121834,25321],{"class":2713},[36,121836,119227],{"class":998},[36,121838,121839],{"class":998}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121841,121842],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[26,121844,121846],{"className":119167,"code":121845,"language":119169,"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,121847,121848,121856,121864,121872,121879,121887,121897,121905],{"__ignoreMap":31},[36,121849,121850,121853],{"class":38,"line":39},[36,121851,121852],{"class":2713},"Section",[36,121854,121855],{"class":998}," \"OutputClass\"\n",[36,121857,121858,121861],{"class":38,"line":46},[36,121859,121860],{"class":2713},"   Identifier",[36,121862,121863],{"class":998}," \"nvidia\"\n",[36,121865,121866,121869],{"class":38,"line":78},[36,121867,121868],{"class":2713},"   MatchDriver",[36,121870,121871],{"class":998}," \"nvidia-drm\"\n",[36,121873,121874,121877],{"class":38,"line":125},[36,121875,121876],{"class":2713},"   Driver",[36,121878,121863],{"class":998},[36,121880,121881,121884],{"class":38,"line":131},[36,121882,121883],{"class":2713},"   Option",[36,121885,121886],{"class":998}," \"AllowEmptyInitialConfiguration\"\n",[36,121888,121889,121891,121894],{"class":38,"line":396},[36,121890,121883],{"class":2713},[36,121892,121893],{"class":998}," \"PrimaryGPU\"",[36,121895,121896],{"class":998}," \"yes\"\n",[36,121898,121899,121902],{"class":38,"line":407},[36,121900,121901],{"class":2713},"   ModulePath",[36,121903,121904],{"class":998}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[36,121906,121907],{"class":38,"line":2061},[36,121908,121909],{"class":2713},"EndSection\n",[851,121911,121912],{"start":78},[854,121913,121914],{},"安装N卡驱动提示错误",[26,121916,121918],{"className":121460,"code":121917,"language":121462,"meta":121463,"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,121919,121920],{"__ignoreMap":31},[36,121921,121922],{"class":38,"line":39},[36,121923,121917],{},[851,121925,121926],{},[854,121927,121928],{},"检查当前运行的内核版本：",[14,121930,121931],{},"运行以下命令以查看你当前正在使用的内核版本：",[26,121933,121935],{"className":117940,"code":121934,"language":117942,"meta":31,"style":31},"uname -r\n",[33,121936,121937],{"__ignoreMap":31},[36,121938,121939,121941],{"class":38,"line":39},[36,121940,70946],{"class":2713},[36,121942,121943],{"class":60}," -r\n",[851,121945,121946],{"start":46},[854,121947,121948],{},"安装内核开发文件：",[14,121950,121951,121952,121955],{},"确保你已经安装了与当前内核版本相匹配的 ",[33,121953,121954],{},"kernel-devel"," 包。运行以下命令来安装：",[26,121957,121959],{"className":117940,"code":121958,"language":117942,"meta":31,"style":31},"sudo dnf install kernel-devel-$(uname -r)\n",[33,121960,121961],{"__ignoreMap":31},[36,121962,121963,121965,121967,121969,121972,121974,121976,121978],{"class":38,"line":39},[36,121964,25321],{"class":2713},[36,121966,27060],{"class":998},[36,121968,24578],{"class":998},[36,121970,121971],{"class":998}," kernel-devel-",[36,121973,25844],{"class":49},[36,121975,70946],{"class":2713},[36,121977,120283],{"class":60},[36,121979,75],{"class":49},[14,121981,121982],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[851,121984,121985],{"start":78},[854,121986,121987],{},"安装内核源代码（如果需要）：",[14,121989,121990],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[26,121992,121994],{"className":117940,"code":121993,"language":117942,"meta":31,"style":31},"sudo dnf install kernel-headers kernel-source\n",[33,121995,121996],{"__ignoreMap":31},[36,121997,121998,122000,122002,122004,122007],{"class":38,"line":39},[36,121999,25321],{"class":2713},[36,122001,27060],{"class":998},[36,122003,24578],{"class":998},[36,122005,122006],{"class":998}," kernel-headers",[36,122008,122009],{"class":998}," kernel-source\n",[851,122011,122012],{"start":125},[854,122013,122014],{},"检查安装：",[14,122016,122017,122018,122021],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[33,122019,122020],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[26,122023,122025],{"className":117940,"code":122024,"language":117942,"meta":31,"style":31},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[33,122026,122027],{"__ignoreMap":31},[36,122028,122029,122031],{"class":38,"line":39},[36,122030,27506],{"class":2713},[36,122032,122033],{"class":998}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,122035,122036,122037,122040],{},"如果仍然遇到问题，可以通过 ",[33,122038,122039],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[807,122042,122043],{},"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":46,"depth":46,"links":122045},[122046,122050,122060,122064,122065],{"id":119143,"depth":46,"text":119144,"children":122047},[122048,122049],{"id":119153,"depth":78,"text":119154},{"id":119163,"depth":78,"text":119164},{"id":119363,"depth":46,"text":119364,"children":122051},[122052,122053,122054,122055,122056,122057,122058,122059],{"id":119367,"depth":78,"text":119368},{"id":119437,"depth":78,"text":119438},{"id":119526,"depth":78,"text":119527},{"id":119771,"depth":78,"text":119772},{"id":119841,"depth":78,"text":119842},{"id":119908,"depth":78,"text":119909},{"id":119943,"depth":78,"text":119944},{"id":119998,"depth":78,"text":119999},{"id":120049,"depth":46,"text":120050,"children":122061},[122062,122063],{"id":120053,"depth":78,"text":120054},{"id":120133,"depth":78,"text":120134},{"id":120319,"depth":46,"text":120320},{"id":120492,"depth":46,"text":120493,"children":122066},[122067,122068,122069,122070,122071],{"id":120496,"depth":78,"text":120497},{"id":120537,"depth":78,"text":120538},{"id":120824,"depth":78,"text":120825},{"id":121198,"depth":78,"text":121199},{"id":121694,"depth":78,"text":121695},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119135,"description":823},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":122078,"title":122079,"body":122080,"description":823,"extension":824,"meta":122420,"navigation":193,"path":122421,"seo":122422,"stem":122423,"__hash__":122424},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":122081,"toc":122418},[122082,122085,122090,122093,122339,122344,122347,122383,122386,122415],[10,122083,122079],{"id":122084},"_4-命令教程长期积累",[851,122086,122087],{},[854,122088,122089],{},"大多数命令",[14,122091,122092],{},"常用 Linux 命令速查：",[26,122094,122096],{"className":117940,"code":122095,"language":117942,"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,122097,122098,122103,122110,122117,122125,122132,122139,122147,122155,122162,122169,122177,122181,122186,122193,122201,122208,122212,122217,122224,122232,122240,122248,122256,122260,122265,122273,122280,122287,122295,122303,122307,122312,122321,122330],{"__ignoreMap":31},[36,122099,122100],{"class":38,"line":39},[36,122101,122102],{"class":42},"# 文件与目录\n",[36,122104,122105,122107],{"class":38,"line":46},[36,122106,27506],{"class":2713},[36,122108,122109],{"class":42},"        # 列出目录内容\n",[36,122111,122112,122114],{"class":38,"line":78},[36,122113,101920],{"class":60},[36,122115,122116],{"class":42},"        # 切换目录\n",[36,122118,122119,122122],{"class":38,"line":125},[36,122120,122121],{"class":60},"pwd",[36,122123,122124],{"class":42},"       # 显示当前路径\n",[36,122126,122127,122129],{"class":38,"line":131},[36,122128,101910],{"class":2713},[36,122130,122131],{"class":42},"     # 创建目录\n",[36,122133,122134,122136],{"class":38,"line":396},[36,122135,26067],{"class":2713},[36,122137,122138],{"class":42},"        # 删除文件或目录\n",[36,122140,122141,122144],{"class":38,"line":407},[36,122142,122143],{"class":2713},"cp",[36,122145,122146],{"class":42},"        # 复制文件或目录\n",[36,122148,122149,122152],{"class":38,"line":2061},[36,122150,122151],{"class":2713},"mv",[36,122153,122154],{"class":42},"        # 移动\u002F重命名文件或目录\n",[36,122156,122157,122159],{"class":38,"line":2067},[36,122158,101927],{"class":2713},[36,122160,122161],{"class":42},"     # 创建空文件\n",[36,122163,122164,122166],{"class":38,"line":2079},[36,122165,121409],{"class":2713},[36,122167,122168],{"class":42},"       # 查看文件内容\n",[36,122170,122171,122174],{"class":38,"line":2362},[36,122172,122173],{"class":2713},"head\u002Ftail",[36,122175,122176],{"class":42}," # 查看文件头部\u002F尾部\n",[36,122178,122179],{"class":38,"line":2367},[36,122180,194],{"emptyLinePlaceholder":193},[36,122182,122183],{"class":38,"line":2373},[36,122184,122185],{"class":42},"# 权限管理\n",[36,122187,122188,122190],{"class":38,"line":2378},[36,122189,25356],{"class":2713},[36,122191,122192],{"class":42},"     # 修改文件权限\n",[36,122194,122195,122198],{"class":38,"line":2392},[36,122196,122197],{"class":2713},"chown",[36,122199,122200],{"class":42},"     # 修改文件所有者\n",[36,122202,122203,122205],{"class":38,"line":2397},[36,122204,25321],{"class":2713},[36,122206,122207],{"class":42},"      # 以管理员身份执行\n",[36,122209,122210],{"class":38,"line":2403},[36,122211,194],{"emptyLinePlaceholder":193},[36,122213,122214],{"class":38,"line":2424},[36,122215,122216],{"class":42},"# 系统信息\n",[36,122218,122219,122221],{"class":38,"line":2429},[36,122220,70946],{"class":2713},[36,122222,122223],{"class":42},"     # 系统信息\n",[36,122225,122226,122229],{"class":38,"line":2443},[36,122227,122228],{"class":2713},"df",[36,122230,122231],{"class":42},"        # 磁盘使用情况\n",[36,122233,122234,122237],{"class":38,"line":2448},[36,122235,122236],{"class":2713},"free",[36,122238,122239],{"class":42},"      # 内存使用情况\n",[36,122241,122242,122245],{"class":38,"line":2477},[36,122243,122244],{"class":2713},"top\u002Fhtop",[36,122246,122247],{"class":42},"  # 进程监控\n",[36,122249,122250,122253],{"class":38,"line":2482},[36,122251,122252],{"class":2713},"ps",[36,122254,122255],{"class":42},"        # 查看进程\n",[36,122257,122258],{"class":38,"line":2499},[36,122259,194],{"emptyLinePlaceholder":193},[36,122261,122262],{"class":38,"line":2504},[36,122263,122264],{"class":42},"# 网络\n",[36,122266,122267,122270],{"class":38,"line":2509},[36,122268,122269],{"class":2713},"ping",[36,122271,122272],{"class":42},"      # 测试网络连通性\n",[36,122274,122275,122277],{"class":38,"line":2514},[36,122276,27594],{"class":2713},[36,122278,122279],{"class":42},"      # 发送 HTTP 请求\n",[36,122281,122282,122284],{"class":38,"line":2528},[36,122283,120933],{"class":2713},[36,122285,122286],{"class":42},"      # 下载文件\n",[36,122288,122289,122292],{"class":38,"line":2533},[36,122290,122291],{"class":2713},"ssh",[36,122293,122294],{"class":42},"       # 远程登录\n",[36,122296,122297,122300],{"class":38,"line":3326},[36,122298,122299],{"class":2713},"scp",[36,122301,122302],{"class":42},"       # 远程文件传输\n",[36,122304,122305],{"class":38,"line":3340},[36,122306,194],{"emptyLinePlaceholder":193},[36,122308,122309],{"class":38,"line":3348},[36,122310,122311],{"class":42},"# 包管理（Debian\u002FUbuntu）\n",[36,122313,122314,122316,122318],{"class":38,"line":3353},[36,122315,118012],{"class":2713},[36,122317,117991],{"class":998},[36,122319,122320],{"class":42},"   # 更新软件源\n",[36,122322,122323,122325,122327],{"class":38,"line":3359},[36,122324,118012],{"class":2713},[36,122326,24578],{"class":998},[36,122328,122329],{"class":42},"  # 安装软件包\n",[36,122331,122332,122334,122336],{"class":38,"line":3365},[36,122333,118012],{"class":2713},[36,122335,26824],{"class":998},[36,122337,122338],{"class":42},"   # 卸载软件包\n",[851,122340,122341],{"start":46},[854,122342,122343],{},"KDE Dolphin 以root打开",[14,122345,122346],{},"kde5",[26,122348,122350],{"className":117940,"code":122349,"language":117942,"meta":31,"style":31},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[33,122351,122352],{"__ignoreMap":31},[36,122353,122354,122357,122360,122363,122365,122367,122370,122373,122375,122378,122380],{"class":38,"line":39},[36,122355,122356],{"class":2713},"pkexec",[36,122358,122359],{"class":998}," env",[36,122361,122362],{"class":998}," DISPLAY=",[36,122364,28888],{"class":49},[36,122366,28946],{"class":998},[36,122368,122369],{"class":49},"$XAUTHORITY ",[36,122371,122372],{"class":998},"KDE_SESSION_VERSION=",[36,122374,157],{"class":60},[36,122376,122377],{"class":998}," KDE_FULL_SESSION=",[36,122379,2112],{"class":60},[36,122381,122382],{"class":998}," dolphin\n",[14,122384,122385],{},"kde6",[26,122387,122389],{"className":117940,"code":122388,"language":117942,"meta":31,"style":31},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[33,122390,122391],{"__ignoreMap":31},[36,122392,122393,122395,122397,122399,122401,122403,122405,122407,122409,122411,122413],{"class":38,"line":39},[36,122394,122356],{"class":2713},[36,122396,122359],{"class":998},[36,122398,122362],{"class":998},[36,122400,28888],{"class":49},[36,122402,28946],{"class":998},[36,122404,122369],{"class":49},[36,122406,122372],{"class":998},[36,122408,1230],{"class":60},[36,122410,122377],{"class":998},[36,122412,2112],{"class":60},[36,122414,122382],{"class":998},[807,122416,122417],{},"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":46,"depth":46,"links":122419},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":122079,"description":823},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122426,"title":122427,"body":122428,"description":823,"extension":824,"meta":122442,"navigation":193,"path":122443,"seo":122444,"stem":122445,"__hash__":122446},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122429,"toc":122440},[122430,122433],[10,122431,122427],{"id":122432},"_5-各种环境配置",[14,122434,122435],{},[50,122436,122439],{"href":122437,"rel":122438},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24609],"电控组环境搭建大全",{"title":31,"searchDepth":46,"depth":46,"links":122441},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122427,"description":823},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122448,"title":122449,"body":122450,"description":823,"extension":824,"meta":122798,"navigation":193,"path":122799,"seo":122800,"stem":122801,"__hash__":122802},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122451,"toc":122790},[122452,122455,122459,122463,122467,122472,122479,122483,122776,122780,122787],[10,122453,122449],{"id":122454},"_6-拓展功能",[21,122456,122458],{"id":122457},"_61-wine","6.1 Wine",[21,122460,122462],{"id":122461},"_62-android","6.2 Android",[868,122464,122466],{"id":122465},"_621-i卡a卡","6.2.1 I卡、A卡",[851,122468,122469],{},[854,122470,122471],{},"Wayland-Waydroid(体验超级好)",[14,122473,122474,122475],{},"Waydroid 官网与安装指南：",[50,122476,122477],{"href":122477,"rel":122478},"https:\u002F\u002Fwaydro.id\u002F",[24609],[868,122480,122482],{"id":122481},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[851,122484,122485],{},[854,122486,122487,122488,122490,122491,122495,122497,122500,122505,122702],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54458,122489],{},"BlissOS 官网下载：",[50,122492,122493],{"href":122493,"rel":122494},"https:\u002F\u002Fblissos.org\u002F",[24609],[54458,122496],{},[2212,122498],{"alt":31,"src":122499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[851,122501,122502],{"start":78},[854,122503,122504],{},"比较推荐的配置",[26,122506,122508],{"className":117940,"code":122507,"language":117942,"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,122509,122510,122517,122527,122537,122547,122559,122569,122576,122586,122595,122604,122614,122624,122633,122643,122653,122665,122675,122684,122694],{"__ignoreMap":31},[36,122511,122512,122515],{"class":38,"line":39},[36,122513,122514],{"class":2713},"qemu-system-x86_64",[36,122516,25423],{"class":60},[36,122518,122519,122522,122525],{"class":38,"line":46},[36,122520,122521],{"class":60},"        -M",[36,122523,122524],{"class":998}," q35,vmport=off",[36,122526,25423],{"class":60},[36,122528,122529,122532,122535],{"class":38,"line":78},[36,122530,122531],{"class":60},"        -accel",[36,122533,122534],{"class":998}," kvm",[36,122536,25423],{"class":60},[36,122538,122539,122542,122545],{"class":38,"line":125},[36,122540,122541],{"class":60},"        -cpu",[36,122543,122544],{"class":998}," qemu64,+sse3,+sse4.2",[36,122546,25423],{"class":60},[36,122548,122549,122552,122555,122557],{"class":38,"line":131},[36,122550,122551],{"class":60},"        -smp",[36,122553,122554],{"class":998}," 8,cores=",[36,122556,186],{"class":60},[36,122558,25423],{"class":60},[36,122560,122561,122564,122567],{"class":38,"line":396},[36,122562,122563],{"class":60},"        -m",[36,122565,122566],{"class":998}," 6G",[36,122568,25423],{"class":60},[36,122570,122571,122574],{"class":38,"line":407},[36,122572,122573],{"class":60},"        -usb",[36,122575,25423],{"class":60},[36,122577,122578,122581,122584],{"class":38,"line":2061},[36,122579,122580],{"class":60},"        -device",[36,122582,122583],{"class":998}," virtio-tablet",[36,122585,25423],{"class":60},[36,122587,122588,122590,122593],{"class":38,"line":2067},[36,122589,122580],{"class":60},[36,122591,122592],{"class":998}," virtio-keyboard",[36,122594,25423],{"class":60},[36,122596,122597,122599,122602],{"class":38,"line":2079},[36,122598,122580],{"class":60},[36,122600,122601],{"class":998}," usb-tablet",[36,122603,25423],{"class":60},[36,122605,122606,122609,122612],{"class":38,"line":2362},[36,122607,122608],{"class":60},"        -bios",[36,122610,122611],{"class":998}," OVMF-pure-efi64.fd",[36,122613,25423],{"class":60},[36,122615,122616,122619,122622],{"class":38,"line":2367},[36,122617,122618],{"class":60},"        -net",[36,122620,122621],{"class":998}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[36,122623,25423],{"class":60},[36,122625,122626,122628,122631],{"class":38,"line":2373},[36,122627,122618],{"class":60},[36,122629,122630],{"class":998}," nic,model=virtio",[36,122632,25423],{"class":60},[36,122634,122635,122638,122641],{"class":38,"line":2378},[36,122636,122637],{"class":60},"        -audio",[36,122639,122640],{"class":998}," sdl,model=hda",[36,122642,25423],{"class":60},[36,122644,122645,122648,122651],{"class":38,"line":2392},[36,122646,122647],{"class":60},"        -display",[36,122649,122650],{"class":998}," sdl,gl=on,show-cursor=on",[36,122652,25423],{"class":60},[36,122654,122655,122657,122660,122663],{"class":38,"line":2397},[36,122656,122580],{"class":60},[36,122658,122659],{"class":998}," virtio-vga-gl,xres=1920,yres=",[36,122661,122662],{"class":60},"1080",[36,122664,25423],{"class":60},[36,122666,122667,122670,122673],{"class":38,"line":2403},[36,122668,122669],{"class":60},"        -drive",[36,122671,122672],{"class":998}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[36,122674,25423],{"class":60},[36,122676,122677,122679,122682],{"class":38,"line":2424},[36,122678,122669],{"class":60},[36,122680,122681],{"class":998}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[36,122683,25423],{"class":60},[36,122685,122686,122689,122692],{"class":38,"line":2429},[36,122687,122688],{"class":60},"        -monitor",[36,122690,122691],{"class":998}," stdio",[36,122693,25423],{"class":60},[36,122695,122696,122699],{"class":38,"line":2443},[36,122697,122698],{"class":60},"        -serial",[36,122700,122701],{"class":998}," none\n",[851,122703,122704],{"start":131},[854,122705,122706,122707],{},"常用操作：",[851,122708,122709,122712,122768],{},[854,122710,122711],{},"全屏：Ctrl+Alt+F",[854,122713,122714,122715,122720],{},"adb调试",[851,122716,122717],{},[854,122718,122719],{},"使Linux与Android用ADB连接。",[26,122721,122723],{"className":117940,"code":122722,"language":117942,"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,122724,122725,122730,122741,122746,122758,122763],{"__ignoreMap":31},[36,122726,122727],{"class":38,"line":39},[36,122728,122729],{"class":42},"# 连接安卓\n",[36,122731,122732,122735,122738],{"class":38,"line":46},[36,122733,122734],{"class":2713},"adb",[36,122736,122737],{"class":998}," connect",[36,122739,122740],{"class":60}," 127.0.0.1\n",[36,122742,122743],{"class":38,"line":78},[36,122744,122745],{"class":42},"# 打开shell\n",[36,122747,122748,122750,122752,122755],{"class":38,"line":125},[36,122749,122734],{"class":2713},[36,122751,27628],{"class":60},[36,122753,122754],{"class":998}," 127.0.0.1:5555",[36,122756,122757],{"class":998}," shell\n",[36,122759,122760],{"class":38,"line":131},[36,122761,122762],{"class":42},"# 使用root权限\n",[36,122764,122765],{"class":38,"line":396},[36,122766,122767],{"class":2713},"su\n",[854,122769,122770,122771],{},"中文输入法",[851,122772,122773],{},[854,122774,122775],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[21,122777,122779],{"id":122778},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122781,122782,122783],{},"rEFInd 官网与文档：",[50,122784,122785],{"href":122785,"rel":122786},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24609],[807,122788,122789],{},"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":46,"depth":46,"links":122791},[122792,122793,122797],{"id":122457,"depth":46,"text":122458},{"id":122461,"depth":46,"text":122462,"children":122794},[122795,122796],{"id":122465,"depth":78,"text":122466},{"id":122481,"depth":78,"text":122482},{"id":122778,"depth":46,"text":122779},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122449,"description":823},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122804,"title":122805,"body":122806,"description":823,"extension":824,"meta":126105,"navigation":193,"path":126106,"seo":126107,"stem":126108,"__hash__":126109},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122807,"toc":126079},[122808,122811,122815,122818,122825,123075,123078,123150,123153,123157,123161,123166,123169,123172,123175,123180,123183,123186,123189,123194,123197,123202,123205,123208,123213,123216,123221,123224,123228,123232,123235,123240,123243,123257,123260,123263,123272,123275,123284,123287,123290,123299,123302,123311,123314,123317,123326,123329,123332,123347,123350,123353,123362,123367,123370,123373,123382,123385,123394,123397,123406,123409,123418,123423,123426,123434,123439,123442,123451,123454,123462,123467,123470,123479,123482,123485,123489,123492,123497,123500,123505,123519,123524,123529,123540,123545,123551,123556,123571,123576,123579,123584,123589,123594,123602,123607,123614,123619,123630,123635,123638,123642,123645,123648,123653,123656,123675,123680,123683,123692,123697,123700,123722,123725,123755,123758,123763,123766,123780,123785,123804,123807,123810,123815,123827,123832,123837,123840,123845,123848,123863,123866,123871,123876,123880,123885,123925,123928,123932,123938,123944,123949,123952,123959,123964,123971,123974,123977,123984,123998,124001,124061,124064,124078,124090,124093,124096,124099,124163,124166,124169,124172,124192,124195,124200,124207,124211,124214,124218,124223,124228,124232,124235,124238,124280,124285,124288,124310,124325,124327,124332,124344,124404,124406,124408,124462,124464,124466,124472,124477,124480,124485,124489,124492,124554,124559,124562,124564,124568,124580,124662,124664,124666,124720,124726,124728,124732,124737,124739,124744,124748,124768,124803,124807,124810,124813,124816,124823,124826,124838,124841,124856,124859,124878,124926,124929,124946,124949,124963,124968,124971,124980,124995,125007,125045,125050,125059,125064,125069,125095,125104,125108,125112,125117,125120,125124,125128,125133,125136,125141,125144,125149,125152,125157,125160,125164,125169,125172,125177,125180,125184,125189,125192,125197,125200,125205,125208,125212,125217,125220,125225,125228,125233,125236,125240,125245,125248,125253,125256,125261,125264,125269,125272,125277,125280,125285,125288,125292,125297,125300,125305,125312,125316,125321,125324,125329,125332,125336,125341,125344,125347,125350,125353,125356,125360,125363,125373,125378,125383,125405,125410,125415,125422,125426,125431,125434,125437,125442,125445,125448,125451,125454,125457,125460,125463,125466,125469,125472,125475,125478,125483,125488,125493,125498,125503,125508,125513,125516,125520,125523,125527,125532,125537,125542,125547,125551,125557,125565,125570,125573,125578,125593,125596,125601,125635,125650,125653,125708,125734,125746,125749,125758,125761,125776,125781,125784,125790,125795,125798,125803,125806,125811,125816,125823,125826,125841,125844,125879,125884,125892,125930,125933,125936,125941,125944,125949,125960,125994,125999,126002,126011,126016,126022,126025,126030,126039,126044,126047,126050,126055,126063,126066,126071,126076],[10,122809,122805],{"id":122810},"_7-其他操作",[21,122812,122814],{"id":122813},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122816,122817],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122819,122820,122821,122824],{},"进入工控机的硬盘目录，进入",[33,122822,122823],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[26,122826,122830],{"className":122827,"code":122828,"language":122829,"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,122831,122832,122840,122851,122858,122865,122877,122884,122896,122907,122918,122925,122932,122939,122951,122963,122970,122982,122994,123001,123013,123025,123037,123048,123055,123066],{"__ignoreMap":31},[36,122833,122834,122837],{"class":38,"line":39},[36,122835,122836],{"class":52042},"network",[36,122838,122839],{"class":49},": \n",[36,122841,122842,122845,122847,122849],{"class":38,"line":46},[36,122843,122844],{"class":52042},"  version",[36,122846,52179],{"class":49},[36,122848,181],{"class":60},[36,122850,3423],{"class":49},[36,122852,122853,122856],{"class":38,"line":78},[36,122854,122855],{"class":52042},"  wifis",[36,122857,122839],{"class":49},[36,122859,122860,122863],{"class":38,"line":125},[36,122861,122862],{"class":52042},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[36,122864,122839],{"class":49},[36,122866,122867,122870,122872,122875],{"class":38,"line":131},[36,122868,122869],{"class":52042},"      renderer",[36,122871,52179],{"class":49},[36,122873,122874],{"class":998},"NetworkManager",[36,122876,3423],{"class":49},[36,122878,122879,122882],{"class":38,"line":396},[36,122880,122881],{"class":52042},"      match",[36,122883,122839],{"class":49},[36,122885,122886,122889,122891,122894],{"class":38,"line":407},[36,122887,122888],{"class":52042},"        name",[36,122890,52179],{"class":49},[36,122892,122893],{"class":998},"\"wlan0\"",[36,122895,3423],{"class":49},[36,122897,122898,122901,122903,122905],{"class":38,"line":2061},[36,122899,122900],{"class":52042},"      dhcp4",[36,122902,52179],{"class":49},[36,122904,2112],{"class":60},[36,122906,3423],{"class":49},[36,122908,122909,122912,122914,122916],{"class":38,"line":2067},[36,122910,122911],{"class":52042},"      dhcp6",[36,122913,52179],{"class":49},[36,122915,2112],{"class":60},[36,122917,3423],{"class":49},[36,122919,122920,122923],{"class":38,"line":2079},[36,122921,122922],{"class":52042},"      access-points",[36,122924,122839],{"class":49},[36,122926,122927,122930],{"class":38,"line":2362},[36,122928,122929],{"class":998},"        \"EMIS_Vinci_Robocon_5G\"",[36,122931,122839],{"class":49},[36,122933,122934,122937],{"class":38,"line":2367},[36,122935,122936],{"class":52042},"          auth",[36,122938,122839],{"class":49},[36,122940,122941,122944,122946,122949],{"class":38,"line":2373},[36,122942,122943],{"class":52042},"            key-management",[36,122945,52179],{"class":49},[36,122947,122948],{"class":998},"\"psk\"",[36,122950,3423],{"class":49},[36,122952,122953,122956,122958,122961],{"class":38,"line":2378},[36,122954,122955],{"class":52042},"            password",[36,122957,52179],{"class":49},[36,122959,122960],{"class":998},"\"vinci666\"",[36,122962,3423],{"class":49},[36,122964,122965,122968],{"class":38,"line":2392},[36,122966,122967],{"class":52042},"          networkmanager",[36,122969,122839],{"class":49},[36,122971,122972,122975,122977,122980],{"class":38,"line":2397},[36,122973,122974],{"class":52042},"            uuid",[36,122976,52179],{"class":49},[36,122978,122979],{"class":998},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[36,122981,3423],{"class":49},[36,122983,122984,122987,122989,122992],{"class":38,"line":2403},[36,122985,122986],{"class":52042},"            name",[36,122988,52179],{"class":49},[36,122990,122991],{"class":998},"\"EMIS_Vinci_Robocon_5G\"",[36,122993,3423],{"class":49},[36,122995,122996,122999],{"class":38,"line":2424},[36,122997,122998],{"class":52042},"            passthrough",[36,123000,122839],{"class":49},[36,123002,123003,123006,123008,123011],{"class":38,"line":2429},[36,123004,123005],{"class":52042},"              wifi-security.auth-alg",[36,123007,52179],{"class":49},[36,123009,123010],{"class":998},"\"open\"",[36,123012,3423],{"class":49},[36,123014,123015,123018,123020,123023],{"class":38,"line":2443},[36,123016,123017],{"class":52042},"              ipv6.addr-gen-mode",[36,123019,52179],{"class":49},[36,123021,123022],{"class":998},"\"default\"",[36,123024,3423],{"class":49},[36,123026,123027,123030,123032,123035],{"class":38,"line":2448},[36,123028,123029],{"class":52042},"              ipv6.ip6-privacy",[36,123031,52179],{"class":49},[36,123033,123034],{"class":998},"\"-1\"",[36,123036,3423],{"class":49},[36,123038,123039,123042,123044,123046],{"class":38,"line":2477},[36,123040,123041],{"class":52042},"              proxy._",[36,123043,52179],{"class":49},[36,123045,8399],{"class":998},[36,123047,3423],{"class":49},[36,123049,123050,123053],{"class":38,"line":2482},[36,123051,123052],{"class":52042},"      networkmanager",[36,123054,122839],{"class":49},[36,123056,123057,123060,123062,123064],{"class":38,"line":2499},[36,123058,123059],{"class":52042},"        uuid",[36,123061,52179],{"class":49},[36,123063,122979],{"class":998},[36,123065,3423],{"class":49},[36,123067,123068,123070,123072],{"class":38,"line":2504},[36,123069,122888],{"class":52042},[36,123071,52179],{"class":49},[36,123073,123074],{"class":998},"\"EMIS_Vinci_Robocon_5G\"\n",[14,123076,123077],{},"将其改为新wifi的名和密码：",[26,123079,123081],{"className":122827,"code":123080,"language":122829,"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,123082,123083,123089,123098,123104,123111,123120,123128,123134,123140],{"__ignoreMap":31},[36,123084,123085,123087],{"class":38,"line":39},[36,123086,122836],{"class":52042},[36,123088,4488],{"class":49},[36,123090,123091,123093,123095],{"class":38,"line":46},[36,123092,122844],{"class":52042},[36,123094,52179],{"class":49},[36,123096,123097],{"class":60},"2\n",[36,123099,123100,123102],{"class":38,"line":78},[36,123101,122855],{"class":52042},[36,123103,4488],{"class":49},[36,123105,123106,123109],{"class":38,"line":125},[36,123107,123108],{"class":52042},"    wlan0",[36,123110,4488],{"class":49},[36,123112,123113,123115,123117],{"class":38,"line":131},[36,123114,122900],{"class":52042},[36,123116,52179],{"class":49},[36,123118,123119],{"class":60},"true\n",[36,123121,123122,123124,123126],{"class":38,"line":396},[36,123123,122911],{"class":52042},[36,123125,52179],{"class":49},[36,123127,123119],{"class":60},[36,123129,123130,123132],{"class":38,"line":407},[36,123131,122922],{"class":52042},[36,123133,4488],{"class":49},[36,123135,123136,123138],{"class":38,"line":2061},[36,123137,122929],{"class":998},[36,123139,4488],{"class":49},[36,123141,123142,123145,123147],{"class":38,"line":2067},[36,123143,123144],{"class":52042},"          password",[36,123146,52179],{"class":49},[36,123148,123149],{"class":998},"\"vinci666\"\n",[14,123151,123152],{},"工控机开机即可连上网。",[21,123154,123156],{"id":123155},"_72-ssh远程开发","7.2 SSH远程开发",[868,123158,123160],{"id":123159},"_721-环境准备","7.2.1 环境准备",[14,123162,123163],{},[1043,123164,123165],{},"1.硬件准备",[14,123167,123168],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,123170,123171],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,123173,123174],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,123176,123177],{},[1043,123178,123179],{},"2.设置固定IP",[14,123181,123182],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,123184,123185],{},"1.进入设置界面",[14,123187,123188],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,123190,123191],{},[2212,123192],{"alt":31,"src":123193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,123195,123196],{},"2.配置所连接的网络",[14,123198,123199],{},[2212,123200],{"alt":31,"src":123201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,123203,123204],{},"3.设置固定IP",[14,123206,123207],{},"查看当前IP地址。",[14,123209,123210],{},[2212,123211],{"alt":31,"src":123212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,123214,123215],{},"设置固定IP。",[14,123217,123218],{},[2212,123219],{"alt":31,"src":123220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,123222,123223],{},"至此，IP配置完毕。",[868,123225,123227],{"id":123226},"_722-环境搭建","7.2.2 环境搭建",[14,123229,123230],{},[1043,123231,26498],{},[14,123233,123234],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,123236,123237],{},[1043,123238,123239],{},"实现",[14,123241,123242],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[851,123244,123245,123248,123251,123254],{},[854,123246,123247],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[854,123249,123250],{},"远程主机启动SSH服务；",[854,123252,123253],{},"本地主机登陆远程主机；",[854,123255,123256],{},"实现数据传输。",[14,123258,123259],{},"1.安装SSH客户端与服务端",[14,123261,123262],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[26,123264,123266],{"className":121460,"code":123265,"language":121462,"meta":121463,"style":31}," sudo apt install openssh-server\n",[33,123267,123268],{"__ignoreMap":31},[36,123269,123270],{"class":38,"line":39},[36,123271,123265],{},[14,123273,123274],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[26,123276,123278],{"className":121460,"code":123277,"language":121462,"meta":121463,"style":31},"sudo apt install openssh-client\n",[33,123279,123280],{"__ignoreMap":31},[36,123281,123282],{"class":38,"line":39},[36,123283,123277],{},[14,123285,123286],{},"2.远程主机启动SSH服务",[14,123288,123289],{},"远程主机启动 ssh 服务命令如下：",[26,123291,123293],{"className":121460,"code":123292,"language":121462,"meta":121463,"style":31},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[33,123294,123295],{"__ignoreMap":31},[36,123296,123297],{"class":38,"line":39},[36,123298,123292],{},[14,123300,123301],{},"启动后可使用如下命令查看服务是否正常运行：",[26,123303,123305],{"className":121460,"code":123304,"language":121462,"meta":121463,"style":31},"ps -e | grep ssh\n",[33,123306,123307],{"__ignoreMap":31},[36,123308,123309],{"class":38,"line":39},[36,123310,123304],{},[14,123312,123313],{},"如果启动成功，会包含 sshd 程序。",[14,123315,123316],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[26,123318,123320],{"className":121460,"code":123319,"language":121462,"meta":121463,"style":31},"sudo systemctl enable ssh\n",[33,123321,123322],{"__ignoreMap":31},[36,123323,123324],{"class":38,"line":39},[36,123325,123319],{},[14,123327,123328],{},"3.本地远程登录",[14,123330,123331],{},"登录远程主机可以调用如下命令:",[26,123333,123335],{"className":117940,"code":123334,"language":117942,"meta":31,"style":31},"ssh -X 用户名@ip地址\n",[33,123336,123337],{"__ignoreMap":31},[36,123338,123339,123341,123344],{"class":38,"line":39},[36,123340,122291],{"class":2713},[36,123342,123343],{"class":60}," -X",[36,123345,123346],{"class":998}," 用户名@ip地址\n",[14,123348,123349],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,123351,123352],{},"如果退出，可以调用exit命令：",[26,123354,123356],{"className":121460,"code":123355,"language":121462,"meta":121463,"style":31},"exit\n",[33,123357,123358],{"__ignoreMap":31},[36,123359,123360],{"class":38,"line":39},[36,123361,123355],{},[14,123363,123364],{},[1043,123365,123366],{},"4.实现数据传输",[14,123368,123369],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,123371,123372],{},"上传文件指令格式如下：",[26,123374,123376],{"className":121460,"code":123375,"language":121462,"meta":121463,"style":31},"scp 本地文件路径 账号@ip:路径\n",[33,123377,123378],{"__ignoreMap":31},[36,123379,123380],{"class":38,"line":39},[36,123381,123375],{},[14,123383,123384],{},"上传文件夹指令格式如下：",[26,123386,123388],{"className":121460,"code":123387,"language":121462,"meta":121463,"style":31},"scp -r 本地文件夹路径 账号@ip:路径\n",[33,123389,123390],{"__ignoreMap":31},[36,123391,123392],{"class":38,"line":39},[36,123393,123387],{},[14,123395,123396],{},"下载文件指令格式如下：",[26,123398,123400],{"className":121460,"code":123399,"language":121462,"meta":121463,"style":31},"scp 账号@ip:路径 本地文件夹路径\n",[33,123401,123402],{"__ignoreMap":31},[36,123403,123404],{"class":38,"line":39},[36,123405,123399],{},[14,123407,123408],{},"下载文件夹指令格式如下：",[26,123410,123412],{"className":121460,"code":123411,"language":121462,"meta":121463,"style":31},"scp -r 账号@ip:路径 本地文件夹路径\n",[33,123413,123414],{"__ignoreMap":31},[36,123415,123416],{"class":38,"line":39},[36,123417,123411],{},[14,123419,123420],{},[1043,123421,123422],{},"优化",[14,123424,123425],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[851,123427,123428,123431],{},[854,123429,123430],{},"本地生成密钥对；",[854,123432,123433],{},"将公钥上传至远程主机。",[14,123435,123436],{},[1043,123437,123438],{},"1.生成密钥对",[14,123440,123441],{},"本地客户端生成公私钥：（一路回车默认即可）",[26,123443,123445],{"className":121460,"code":123444,"language":121462,"meta":121463,"style":31},"ssh-keygen\n",[33,123446,123447],{"__ignoreMap":31},[36,123448,123449],{"class":38,"line":39},[36,123450,123444],{},[14,123452,123453],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[851,123455,123456,123459],{},[854,123457,123458],{},"id_rsa （私钥）；",[854,123460,123461],{},"id_rsa.pub (公钥)。",[14,123463,123464],{},[1043,123465,123466],{},"2.公钥上传",[14,123468,123469],{},"上传指令如下：",[26,123471,123473],{"className":121460,"code":123472,"language":121462,"meta":121463,"style":31},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[33,123474,123475],{"__ignoreMap":31},[36,123476,123477],{"class":38,"line":39},[36,123478,123472],{},[14,123480,123481],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,123483,123484],{},"以后再远程登录就无需录入密码了。",[868,123486,123488],{"id":123487},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,123490,123491],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,123493,123494],{},[1043,123495,123496],{},"1.准备工作",[14,123498,123499],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,123501,123502],{},[1043,123503,123504],{},"2.为VScode安装远程开发插件",[14,123506,123507,123508,123511,123512,123515,123516,29130],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[33,123509,123510],{},"扩展：商店","的搜索栏输入",[33,123513,123514],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[33,123517,123518],{},"安装",[14,123520,123521],{},[2212,123522],{"alt":31,"src":123523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,123525,123526],{},[1043,123527,123528],{},"3.配置远程连接",[14,123530,123531,123532,123535,123536,123539],{},"步骤1：使用快捷键",[33,123533,123534],{},"ctrl + shift + p","打开命令输入窗口，并输入",[33,123537,123538],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,123541,123542],{},[2212,123543],{"alt":31,"src":123544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,123546,123547,123548,29130],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[33,123549,123550],{},"Add New SSH Host",[14,123552,123553],{},[2212,123554],{"alt":31,"src":123555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,123557,123558,123559,123562,123563,123566,123567,123570],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[33,123560,123561],{},"ssh +X ubuntu@192.168.43.164","，其中，",[33,123564,123565],{},"ubuntu","需要替换为你的登录用户名，",[33,123568,123569],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,123572,123573],{},[2212,123574],{"alt":31,"src":123575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,123577,123578],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,123580,123581],{},[2212,123582],{"alt":31,"src":123583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,123585,123586],{},[2212,123587],{"alt":31,"src":123588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,123590,123591],{},[1043,123592,123593],{},"4.使用",[14,123595,123596,123597,123535,123599,123601],{},"步骤1：继续使用快捷键",[33,123598,123534],{},[33,123600,123538],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,123603,123604],{},[2212,123605],{"alt":31,"src":123606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,123608,123609,123610,123613],{},"或者，也可以点击侧边栏的",[33,123611,123612],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,123615,123616],{},[2212,123617],{"alt":31,"src":123618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,123620,123621,123622,123625,123626,123629],{},"步骤2：选择菜单栏的",[33,123623,123624],{},"文件","下的",[33,123627,123628],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,123631,123632],{},[2212,123633],{"alt":31,"src":123634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,123636,123637],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[21,123639,123641],{"id":123640},"_73-远程桌面","7.3 远程桌面",[14,123643,123644],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,123646,123647],{},"我们选择使用VNC来看。",[851,123649,123650],{},[854,123651,123652],{},"安装VNC服务器：",[14,123654,123655],{},"这里以TigerVNC为例进行安装：",[26,123657,123659],{"className":117940,"code":123658,"language":117942,"meta":31,"style":31},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[33,123660,123661],{"__ignoreMap":31},[36,123662,123663,123665,123667,123669,123672],{"class":38,"line":39},[36,123664,25321],{"class":2713},[36,123666,117961],{"class":998},[36,123668,24578],{"class":998},[36,123670,123671],{"class":998}," tigervnc-standalone-server",[36,123673,123674],{"class":998}," tigervnc-common\n",[851,123676,123677],{"start":46},[854,123678,123679],{},"设置VNC密码：",[14,123681,123682],{},"为VNC用户设置密码，运行以下命令：",[26,123684,123686],{"className":117940,"code":123685,"language":117942,"meta":31,"style":31},"vncpasswd\n",[33,123687,123688],{"__ignoreMap":31},[36,123689,123690],{"class":38,"line":39},[36,123691,123685],{"class":2713},[851,123693,123694],{"start":78},[854,123695,123696],{},"配置VNC启动脚本:",[14,123698,123699],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[26,123701,123703],{"className":117940,"code":123702,"language":117942,"meta":31,"style":31},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[33,123704,123705,123714],{"__ignoreMap":31},[36,123706,123707,123709,123711],{"class":38,"line":39},[36,123708,101910],{"class":2713},[36,123710,29961],{"class":60},[36,123712,123713],{"class":998}," ~\u002F.vnc\n",[36,123715,123716,123719],{"class":38,"line":46},[36,123717,123718],{"class":2713},"nano",[36,123720,123721],{"class":998}," ~\u002F.vnc\u002Fxstartup\n",[14,123723,123724],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[26,123726,123728],{"className":117940,"code":123727,"language":117942,"meta":31,"style":31},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[33,123729,123730,123735,123743,123750],{"__ignoreMap":31},[36,123731,123732],{"class":38,"line":39},[36,123733,123734],{"class":42},"#!\u002Fbin\u002Fsh\n",[36,123736,123737,123740],{"class":38,"line":46},[36,123738,123739],{"class":60},"unset",[36,123741,123742],{"class":998}," SESSION_MANAGER\n",[36,123744,123745,123747],{"class":38,"line":78},[36,123746,123739],{"class":60},[36,123748,123749],{"class":998}," DBUS_SESSION_BUS_ADDRESS\n",[36,123751,123752],{"class":38,"line":125},[36,123753,123754],{"class":2713},"gnome-session\n",[14,123756,123757],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[851,123759,123760],{"start":125},[854,123761,123762],{},"给予执行权限：",[14,123764,123765],{},"为xstartup文件设置执行权限：",[26,123767,123769],{"className":117940,"code":123768,"language":117942,"meta":31,"style":31},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[33,123770,123771],{"__ignoreMap":31},[36,123772,123773,123775,123778],{"class":38,"line":39},[36,123774,25356],{"class":2713},[36,123776,123777],{"class":998}," +x",[36,123779,123721],{"class":998},[851,123781,123782],{"start":131},[854,123783,123784],{},"启动VNC服务器：",[26,123786,123788],{"className":117940,"code":123787,"language":117942,"meta":31,"style":31},"vncserver -geometry 1920x1080 -localhost=0\n",[33,123789,123790],{"__ignoreMap":31},[36,123791,123792,123795,123798,123801],{"class":38,"line":39},[36,123793,123794],{"class":2713},"vncserver",[36,123796,123797],{"class":60}," -geometry",[36,123799,123800],{"class":998}," 1920x1080",[36,123802,123803],{"class":60}," -localhost=0\n",[14,123805,123806],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123808,123809],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[851,123811,123812],{"start":396},[854,123813,123814],{},"查看已开启的VNC服务器：",[26,123816,123818],{"className":117940,"code":123817,"language":117942,"meta":31,"style":31},"vncserver -list\n",[33,123819,123820],{"__ignoreMap":31},[36,123821,123822,123824],{"class":38,"line":39},[36,123823,123794],{"class":2713},[36,123825,123826],{"class":60}," -list\n",[14,123828,123829],{},[2212,123830],{"alt":31,"src":123831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[851,123833,123834],{"start":407},[854,123835,123836],{},"连接到VNC服务器：",[14,123838,123839],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[851,123841,123842],{"start":2061},[854,123843,123844],{},"停止VNC服务器：",[14,123846,123847],{},"如果需要停止VNC服务器，可以使用以下命令：",[26,123849,123851],{"className":117940,"code":123850,"language":117942,"meta":31,"style":31},"vncserver -kill :1\n",[33,123852,123853],{"__ignoreMap":31},[36,123854,123855,123857,123860],{"class":38,"line":39},[36,123856,123794],{"class":2713},[36,123858,123859],{"class":60}," -kill",[36,123861,123862],{"class":998}," :1\n",[14,123864,123865],{},"将:1替换为你实际使用的显示编号。",[14,123867,123868],{},[2212,123869],{"alt":31,"src":123870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,123872,123873],{},[2212,123874],{"alt":31,"src":123875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[21,123877,123879],{"id":123878},"_74-usb端口设置","7.4 USB端口设置",[14,123881,123882],{},[1043,123883,123884],{},"首先先配置好权限",[26,123886,123888],{"className":117940,"code":123887,"language":117942,"meta":31,"style":31},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[33,123889,123890,123895,123908,123915,123920],{"__ignoreMap":31},[36,123891,123892],{"class":38,"line":39},[36,123893,123894],{"class":42},"# 将用户权限提高\n",[36,123896,123897,123899,123901,123903,123906],{"class":38,"line":46},[36,123898,25321],{"class":2713},[36,123900,27319],{"class":998},[36,123902,27322],{"class":60},[36,123904,123905],{"class":998}," dialout",[36,123907,27327],{"class":49},[36,123909,123910,123912],{"class":38,"line":78},[36,123911,27346],{"class":2713},[36,123913,123914],{"class":998}," dialout\n",[36,123916,123917],{"class":38,"line":125},[36,123918,123919],{"class":42},"# 查看下面命令是否输出dialout（若输出才正常）\n",[36,123921,123922],{"class":38,"line":131},[36,123923,123924],{"class":2713},"groups\n",[14,123926,123927],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[868,123929,123931],{"id":123930},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123933,123934,123937],{},[1043,123935,123936],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123939,123940,123943],{},[1043,123941,123942],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123945,123946],{},[1043,123947,123948],{},"流程如下：",[14,123950,123951],{},"（1）.查找设备idVendor和idProduct",[14,123953,123954,123955,123958],{},"接入两个USB设备，在终端调用指令",[33,123956,123957],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123960,123961],{},[2212,123962],{"alt":31,"src":123963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123965,123966,123967,123970],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[33,123968,123969],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123972,123973],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123975,123976],{},"（2）.编写映射规则",[14,123978,123979,123980,123983],{},"在",[33,123981,123982],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[26,123985,123987],{"className":117940,"code":123986,"language":117942,"meta":31,"style":31},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[33,123988,123989],{"__ignoreMap":31},[36,123990,123991,123993,123995],{"class":38,"line":39},[36,123992,25321],{"class":2713},[36,123994,119227],{"class":998},[36,123996,123997],{"class":998}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123999,124000],{},"输入如下内容：",[26,124002,124004],{"className":117940,"code":124003,"language":117942,"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,124005,124006,124036],{"__ignoreMap":31},[36,124007,124008,124011,124013,124016,124019,124022,124025,124027,124030,124033],{"class":38,"line":39},[36,124009,124010],{"class":49},"KERNEL",[36,124012,54],{"class":53},[36,124014,124015],{"class":998},"=\"ttyUSB*\",",[36,124017,124018],{"class":2713}," ATTRS",[36,124020,124021],{"class":998},"{idVendor}==",[36,124023,124024],{"class":2713},"\"10c4\"",[36,124026,64],{"class":2713},[36,124028,124029],{"class":998}," ATTRS{idProduct}==\"ea60\",",[36,124031,124032],{"class":998}," MODE:=\"0777\",",[36,124034,124035],{"class":998}," SYMLINK+=\"mylidar\"\n",[36,124037,124038,124040,124042,124044,124046,124048,124051,124053,124056,124058],{"class":38,"line":46},[36,124039,124010],{"class":49},[36,124041,54],{"class":53},[36,124043,124015],{"class":998},[36,124045,124018],{"class":2713},[36,124047,124021],{"class":998},[36,124049,124050],{"class":2713},"\"1a86\"",[36,124052,64],{"class":2713},[36,124054,124055],{"class":998}," ATTRS{idProduct}==\"7523\",",[36,124057,124032],{"class":998},[36,124059,124060],{"class":998}," SYMLINK+=\"mycar\"\n",[14,124062,124063],{},"代码解释：",[1886,124065,124066,124069,124072,124075],{},[854,124067,124068],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[854,124070,124071],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[854,124073,124074],{},"SYMLINK是符号连接，即绑定的别名；",[854,124076,124077],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,124079,124080,124081,124084,124087],{},"***小提示：***",[24297,124082,124083],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[33,124085,124086],{},"\u002Fetc\u002Fudev\u002Frule.d",[24297,124088,124089],{},"目录即可。",[14,124091,124092],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,124094,124095],{},"（3）.使规则生效",[14,124097,124098],{},"在终端下输入如下指令：",[26,124100,124102],{"className":117940,"code":124101,"language":117942,"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,124103,124104,124109,124121,124132,124136,124141,124154],{"__ignoreMap":31},[36,124105,124106],{"class":38,"line":39},[36,124107,124108],{"class":42},"# Ubuntu用下方命令\n",[36,124110,124111,124113,124115,124118],{"class":38,"line":46},[36,124112,25321],{"class":2713},[36,124114,120692],{"class":998},[36,124116,124117],{"class":998}," udev",[36,124119,124120],{"class":998}," reload\n",[36,124122,124123,124125,124127,124129],{"class":38,"line":78},[36,124124,25321],{"class":2713},[36,124126,120692],{"class":998},[36,124128,124117],{"class":998},[36,124130,124131],{"class":998}," restart\n",[36,124133,124134],{"class":38,"line":125},[36,124135,194],{"emptyLinePlaceholder":193},[36,124137,124138],{"class":38,"line":131},[36,124139,124140],{"class":42},"#Fedora用下方命令\n",[36,124142,124143,124145,124148,124151],{"class":38,"line":396},[36,124144,25321],{"class":2713},[36,124146,124147],{"class":998}," udevadm",[36,124149,124150],{"class":998}," control",[36,124152,124153],{"class":60}," --reload\n",[36,124155,124156,124158,124160],{"class":38,"line":407},[36,124157,25321],{"class":2713},[36,124159,124147],{"class":998},[36,124161,124162],{"class":998}," trigger\n",[14,124164,124165],{},"再重新插拔设备即可。",[14,124167,124168],{},"（4）.测试",[14,124170,124171],{},"终端下输入如下指令",[26,124173,124175],{"className":117940,"code":124174,"language":117942,"meta":31,"style":31},"ll \u002Fdev | grep ttyUSB\n",[33,124176,124177],{"__ignoreMap":31},[36,124178,124179,124182,124185,124187,124189],{"class":38,"line":39},[36,124180,124181],{"class":2713},"ll",[36,124183,124184],{"class":998}," \u002Fdev",[36,124186,25854],{"class":53},[36,124188,30981],{"class":2713},[36,124190,124191],{"class":998}," ttyUSB\n",[14,124193,124194],{},"运行结果如下：",[14,124196,124197],{},[2212,124198],{"alt":31,"src":124199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,124201,124202,124203,124206],{},"也可以多次插拔USB设备，会发现设备端口",[33,124204,124205],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,124208,124209],{},[1043,124210,118608],{},[14,124212,124213],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[868,124215,124217],{"id":124216},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,124219,124220,124222],{},[1043,124221,123936],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,124224,124225,124227],{},[1043,124226,123942],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,124229,124230],{},[1043,124231,123948],{},[14,124233,124234],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,124236,124237],{},"调用如下指令查看第一台雷达的USB信息：",[26,124239,124241],{"className":117940,"code":124240,"language":117942,"meta":31,"style":31},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[33,124242,124243,124263],{"__ignoreMap":31},[36,124244,124245,124248,124250,124253,124256,124258,124260],{"class":38,"line":39},[36,124246,124247],{"class":2713},"udevadm",[36,124249,70563],{"class":998},[36,124251,124252],{"class":60}," --attribute-walk",[36,124254,124255],{"class":60}," --name=\u002Fdev\u002FttyUSB0",[36,124257,25854],{"class":53},[36,124259,30981],{"class":2713},[36,124261,124262],{"class":998}," KERNELS\n",[36,124264,124265,124267,124269,124271,124274,124276,124278],{"class":38,"line":46},[36,124266,124247],{"class":2713},[36,124268,70563],{"class":998},[36,124270,124252],{"class":60},[36,124272,124273],{"class":60}," --name=\u002Fdev\u002FttyACM0",[36,124275,25854],{"class":53},[36,124277,30981],{"class":2713},[36,124279,124262],{"class":998},[14,124281,124282],{},[2212,124283],{"alt":31,"src":124284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,124286,124287],{},"调用如下指令查看第二台雷达的USB信息：",[26,124289,124291],{"className":117940,"code":124290,"language":117942,"meta":31,"style":31},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[33,124292,124293],{"__ignoreMap":31},[36,124294,124295,124297,124299,124301,124304,124306,124308],{"class":38,"line":39},[36,124296,124247],{"class":2713},[36,124298,70563],{"class":998},[36,124300,124252],{"class":60},[36,124302,124303],{"class":60}," --name=\u002Fdev\u002FttyUSB1",[36,124305,25854],{"class":53},[36,124307,30981],{"class":2713},[36,124309,124262],{"class":998},[14,124311,124312,124313,124316,124317,124320,124321,124324],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[33,124314,124315],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[33,124318,124319],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[1043,124322,124323],{},"唯一性标识","”。",[14,124326,123976],{},[14,124328,123979,124329,124331],{},[33,124330,123982],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[26,124333,124334],{"className":117940,"code":123986,"language":117942,"meta":31,"style":31},[33,124335,124336],{"__ignoreMap":31},[36,124337,124338,124340,124342],{"class":38,"line":39},[36,124339,25321],{"class":2713},[36,124341,119227],{"class":998},[36,124343,123997],{"class":998},[26,124345,124347],{"className":117940,"code":124346,"language":117942,"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,124348,124349,124378],{"__ignoreMap":31},[36,124350,124351,124353,124355,124357,124360,124362,124365,124368,124370,124373,124375],{"class":38,"line":39},[36,124352,124010],{"class":49},[36,124354,54],{"class":53},[36,124356,124015],{"class":998},[36,124358,124359],{"class":49}," KERNELS",[36,124361,54],{"class":53},[36,124363,124364],{"class":998},"=\"1-1.3:1.0\",",[36,124366,124367],{"class":2713}," MODE:",[36,124369,54],{"class":998},[36,124371,124372],{"class":2713},"\"0777\"",[36,124374,64],{"class":2713},[36,124376,124377],{"class":998}," SYMLINK+=\"rplidar_front\"\n",[36,124379,124380,124382,124384,124386,124388,124390,124393,124395,124397,124399,124401],{"class":38,"line":46},[36,124381,124010],{"class":49},[36,124383,54],{"class":53},[36,124385,124015],{"class":998},[36,124387,124359],{"class":49},[36,124389,54],{"class":53},[36,124391,124392],{"class":998},"=\"1-1.4:1.0\",",[36,124394,124367],{"class":2713},[36,124396,54],{"class":998},[36,124398,124372],{"class":2713},[36,124400,64],{"class":2713},[36,124402,124403],{"class":998}," SYMLINK+=\"rplidar_back\"\n",[14,124405,124095],{},[14,124407,124098],{},[26,124409,124410],{"className":117940,"code":124101,"language":117942,"meta":31,"style":31},[33,124411,124412,124416,124426,124436,124440,124444,124454],{"__ignoreMap":31},[36,124413,124414],{"class":38,"line":39},[36,124415,124108],{"class":42},[36,124417,124418,124420,124422,124424],{"class":38,"line":46},[36,124419,25321],{"class":2713},[36,124421,120692],{"class":998},[36,124423,124117],{"class":998},[36,124425,124120],{"class":998},[36,124427,124428,124430,124432,124434],{"class":38,"line":78},[36,124429,25321],{"class":2713},[36,124431,120692],{"class":998},[36,124433,124117],{"class":998},[36,124435,124131],{"class":998},[36,124437,124438],{"class":38,"line":125},[36,124439,194],{"emptyLinePlaceholder":193},[36,124441,124442],{"class":38,"line":131},[36,124443,124140],{"class":42},[36,124445,124446,124448,124450,124452],{"class":38,"line":396},[36,124447,25321],{"class":2713},[36,124449,124147],{"class":998},[36,124451,124150],{"class":998},[36,124453,124153],{"class":60},[36,124455,124456,124458,124460],{"class":38,"line":407},[36,124457,25321],{"class":2713},[36,124459,124147],{"class":998},[36,124461,124162],{"class":998},[14,124463,124165],{},[14,124465,124168],{},[14,124467,124171,124468,124471],{},[33,124469,124470],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,124473,124474],{},[2212,124475],{"alt":31,"src":124476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,124478,124479],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,124481,124482,124484],{},[1043,124483,118608],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[868,124486,124488],{"id":124487},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,124490,124491],{},"（1）.查看所连接的主机USB接口的信息",[26,124493,124495],{"className":117940,"code":124494,"language":117942,"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,124496,124497,124527],{"__ignoreMap":31},[36,124498,124499,124501,124503,124506,124508,124510,124512,124514,124517,124520,124522,124525],{"class":38,"line":39},[36,124500,124247],{"class":2713},[36,124502,70563],{"class":998},[36,124504,124505],{"class":60}," -a",[36,124507,29961],{"class":60},[36,124509,29167],{"class":49},[36,124511,124247],{"class":2713},[36,124513,70563],{"class":998},[36,124515,124516],{"class":60}," -q",[36,124518,124519],{"class":998}," path",[36,124521,25860],{"class":60},[36,124523,124524],{"class":998}," \u002Fdev\u002FttyACM0",[36,124526,75],{"class":49},[36,124528,124529,124531,124533,124535,124537,124539,124541,124543,124545,124547,124549,124552],{"class":38,"line":46},[36,124530,124247],{"class":2713},[36,124532,70563],{"class":998},[36,124534,124505],{"class":60},[36,124536,29961],{"class":60},[36,124538,29167],{"class":49},[36,124540,124247],{"class":2713},[36,124542,70563],{"class":998},[36,124544,124516],{"class":60},[36,124546,124519],{"class":998},[36,124548,25860],{"class":60},[36,124550,124551],{"class":998}," \u002Fdev\u002FttyUSB0",[36,124553,75],{"class":49},[14,124555,124556],{},[2212,124557],{"alt":31,"src":124558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,124560,124561],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,124563,123976],{},[14,124565,123979,124566,124331],{},[33,124567,123982],{},[26,124569,124570],{"className":117940,"code":123986,"language":117942,"meta":31,"style":31},[33,124571,124572],{"__ignoreMap":31},[36,124573,124574,124576,124578],{"class":38,"line":39},[36,124575,25321],{"class":2713},[36,124577,119227],{"class":998},[36,124579,123997],{"class":998},[26,124581,124583],{"className":117940,"code":124582,"language":117942,"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,124584,124585,124613,124639],{"__ignoreMap":31},[36,124586,124587,124589,124591,124594,124596,124598,124600,124602,124605,124608,124610],{"class":38,"line":39},[36,124588,124010],{"class":49},[36,124590,54],{"class":53},[36,124592,124593],{"class":998},"=\"ttyACM*\",",[36,124595,124018],{"class":2713},[36,124597,124021],{"class":998},[36,124599,124050],{"class":2713},[36,124601,64],{"class":2713},[36,124603,124604],{"class":998}," ATTRS{idProduct}==\"55d4\",",[36,124606,124607],{"class":998}," ATTRS{serial}==\"0001\",",[36,124609,124032],{"class":998},[36,124611,124612],{"class":998}," SYMLINK+=\"ttyACM_MCU\"\n",[36,124614,124615,124617,124619,124621,124623,124625,124627,124629,124631,124634,124636],{"class":38,"line":46},[36,124616,124010],{"class":49},[36,124618,54],{"class":53},[36,124620,124593],{"class":998},[36,124622,124018],{"class":2713},[36,124624,124021],{"class":998},[36,124626,124050],{"class":2713},[36,124628,64],{"class":2713},[36,124630,124604],{"class":998},[36,124632,124633],{"class":998}," ATTRS{serial}==\"0002\",",[36,124635,124032],{"class":998},[36,124637,124638],{"class":998}," SYMLINK+=\"ttyACM_Lidar\"\n",[36,124640,124641,124643,124645,124647,124649,124651,124653,124655,124657,124659],{"class":38,"line":78},[36,124642,124010],{"class":49},[36,124644,54],{"class":53},[36,124646,124015],{"class":998},[36,124648,124018],{"class":2713},[36,124650,124021],{"class":998},[36,124652,124050],{"class":2713},[36,124654,64],{"class":2713},[36,124656,124055],{"class":998},[36,124658,124032],{"class":998},[36,124660,124661],{"class":998}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,124663,124095],{},[14,124665,124098],{},[26,124667,124668],{"className":117940,"code":124101,"language":117942,"meta":31,"style":31},[33,124669,124670,124674,124684,124694,124698,124702,124712],{"__ignoreMap":31},[36,124671,124672],{"class":38,"line":39},[36,124673,124108],{"class":42},[36,124675,124676,124678,124680,124682],{"class":38,"line":46},[36,124677,25321],{"class":2713},[36,124679,120692],{"class":998},[36,124681,124117],{"class":998},[36,124683,124120],{"class":998},[36,124685,124686,124688,124690,124692],{"class":38,"line":78},[36,124687,25321],{"class":2713},[36,124689,120692],{"class":998},[36,124691,124117],{"class":998},[36,124693,124131],{"class":998},[36,124695,124696],{"class":38,"line":125},[36,124697,194],{"emptyLinePlaceholder":193},[36,124699,124700],{"class":38,"line":131},[36,124701,124140],{"class":42},[36,124703,124704,124706,124708,124710],{"class":38,"line":396},[36,124705,25321],{"class":2713},[36,124707,124147],{"class":998},[36,124709,124150],{"class":998},[36,124711,124153],{"class":60},[36,124713,124714,124716,124718],{"class":38,"line":407},[36,124715,25321],{"class":2713},[36,124717,124147],{"class":998},[36,124719,124162],{"class":998},[14,124721,124722,124723],{},"再重新插拔设备即可，或者 ",[1043,124724,124725],{},"直接重启系统。",[14,124727,124168],{},[14,124729,124171,124730,124471],{},[33,124731,124470],{},[14,124733,124734],{},[2212,124735],{"alt":31,"src":124736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124738,124479],{},[14,124740,124741,124743],{},[1043,124742,118608],{}," 一些设备可能没有串口号等。",[868,124745,124747],{"id":124746},"_744-其他注意事项","7.4.4 其他注意事项",[14,124749,124750,124751,124753,124754,124757,124758,19154,124761,124764,124765,124767],{},"并非所有的USB设备端口号都是",[33,124752,124205],{},"的格式，比如Arduino的端口号可能是",[33,124755,124756],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[33,124759,124760],{},"videon",[33,124762,124763],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[33,124766,124760],{},"端口，绑定时需要关联的也是该接口。",[14,124769,124770,124771,124774,124775,124778,124779,124781,124782,124785,124786,124789,124790,124793,124794,124793,124797,124793,124800,29130],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[33,124772,124773],{},"KERNEL==\"ttyUSB*\"","修改为",[33,124776,124777],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[33,124780,124773],{},"修改为类似于",[33,124783,124784],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[33,124787,124788],{},"video[0,2,4,6]","表示可以绑定的端口为",[33,124791,124792],{},"video0","或",[33,124795,124796],{},"video2",[33,124798,124799],{},"video4",[33,124801,124802],{},"video6",[21,124804,124806],{"id":124805},"_75-挂载内网网页","7.5 挂载内网网页",[14,124808,124809],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124811,124812],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124814,124815],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124817,124818,124819],{},"Termux 下载地址（F-Droid）：",[50,124820,124821],{"href":124821,"rel":124822},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24609],[14,124824,124825],{},"首先打开app后，先更新软件缓存：",[26,124827,124829],{"className":117940,"code":124828,"language":117942,"meta":31,"style":31},"pkg update\n",[33,124830,124831],{"__ignoreMap":31},[36,124832,124833,124836],{"class":38,"line":39},[36,124834,124835],{"class":2713},"pkg",[36,124837,26987],{"class":998},[14,124839,124840],{},"然后换源",[26,124842,124844],{"className":117940,"code":124843,"language":117942,"meta":31,"style":31},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[33,124845,124846],{"__ignoreMap":31},[36,124847,124848,124850,124853],{"class":38,"line":39},[36,124849,123718],{"class":2713},[36,124851,124852],{"class":49}," $PREFIX",[36,124854,124855],{"class":998},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124857,124858],{},"将该文件内容替换为下面：",[26,124860,124862],{"className":117940,"code":124861,"language":117942,"meta":31,"style":31},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[33,124863,124864],{"__ignoreMap":31},[36,124865,124866,124869,124872,124875],{"class":38,"line":39},[36,124867,124868],{"class":2713},"deb",[36,124870,124871],{"class":998}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[36,124873,124874],{"class":998}," stable",[36,124876,124877],{"class":998}," main\n",[1886,124879,124880,124907],{},[854,124881,124882,124883,124885,124886],{},"如果你使用的是",[33,124884,123718],{},"编辑器：",[1886,124887,124888,124895,124901],{},[854,124889,124890,124891,124894],{},"按 ",[33,124892,124893],{},"Ctrl+O"," 保存文件。",[854,124896,124890,124897,124900],{},[33,124898,124899],{},"Enter"," 确认文件名。",[854,124902,124890,124903,124906],{},[33,124904,124905],{},"Ctrl+X"," 退出编辑器。",[854,124908,124882,124909,124885,124912],{},[33,124910,124911],{},"vim",[1886,124913,124914,124920],{},[854,124915,124890,124916,124919],{},[33,124917,124918],{},"Esc"," 退出编辑模式。",[854,124921,124922,124923,124925],{},"输入 ",[33,124924,119865],{}," 保存并退出。",[14,124927,124928],{},"接下来重新更新软件源：",[26,124930,124932],{"className":117940,"code":124931,"language":117942,"meta":31,"style":31},"pkg update && pkg upgrade\n",[33,124933,124934],{"__ignoreMap":31},[36,124935,124936,124938,124940,124942,124944],{"class":38,"line":39},[36,124937,124835],{"class":2713},[36,124939,117991],{"class":998},[36,124941,26935],{"class":49},[36,124943,124835],{"class":2713},[36,124945,117977],{"class":998},[14,124947,124948],{},"安装python：",[26,124950,124952],{"className":117940,"code":124951,"language":117942,"meta":31,"style":31},"pkg install python\n",[33,124953,124954],{"__ignoreMap":31},[36,124955,124956,124958,124960],{"class":38,"line":39},[36,124957,124835],{"class":2713},[36,124959,24578],{"class":998},[36,124961,124962],{"class":998}," python\n",[14,124964,124965,27218],{},[1043,124966,124967],{},"通过Termux访问设备存储",[14,124969,124970],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[26,124972,124974],{"className":117940,"code":124973,"language":117942,"meta":31,"style":31},"termux-setup-storage\n",[33,124975,124976],{"__ignoreMap":31},[36,124977,124978],{"class":38,"line":39},[36,124979,124973],{"class":2713},[851,124981,124982],{},[854,124983,124984,27218,124987],{},[1043,124985,124986],{},"进入HTML文件所在的目录",[851,124988,124989],{},[854,124990,124991,124992,124994],{},"使用",[33,124993,101920],{},"命令进入HTML文件所在的目录：",[26,124996,124998],{"className":117940,"code":124997,"language":117942,"meta":31,"style":31},"cd ~\u002Fyour_html_folder\n",[33,124999,125000],{"__ignoreMap":31},[36,125001,125002,125004],{"class":38,"line":39},[36,125003,101920],{"class":60},[36,125005,125006],{"class":998}," ~\u002Fyour_html_folder\n",[851,125008,125009],{"start":46},[854,125010,125011,27218,125014,125019,125036],{},[1043,125012,125013],{},"启动Python HTTP服务器",[851,125015,125016],{},[854,125017,125018],{},"运行以下命令启动一个简单的HTTP服务器：",[26,125020,125022],{"className":117940,"code":125021,"language":117942,"meta":31,"style":31},"python -m http.server 8000\n",[33,125023,125024],{"__ignoreMap":31},[36,125025,125026,125028,125030,125033],{"class":38,"line":39},[36,125027,30],{"class":2713},[36,125029,101526],{"class":60},[36,125031,125032],{"class":998}," http.server",[36,125034,125035],{"class":60}," 8000\n",[851,125037,125038],{"start":78},[854,125039,125040,125041,125044],{},"这会在端口",[33,125042,125043],{},"8000","上启动一个Web服务器。",[1886,125046,125047],{},[854,125048,125049],{},"启动服务器后，Termux会显示日志信息，例如：",[26,125051,125053],{"className":121460,"code":125052,"language":121462,"meta":121463,"style":31},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[33,125054,125055],{"__ignoreMap":31},[36,125056,125057],{"class":38,"line":39},[36,125058,125052],{},[1886,125060,125061],{},[854,125062,125063],{},"这表示服务器已成功启动。",[14,125065,125066],{},[1043,125067,125068],{},"在浏览器中访问HTML文件",[851,125070,125071],{},[854,125072,125073,27218,125076,125081],{},[1043,125074,125075],{},"在同一设备上访问",[851,125077,125078],{},[854,125079,125080],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[26,125082,125085],{"className":125083,"code":125084,"language":72406,"meta":31,"style":31},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[33,125086,125087],{"__ignoreMap":31},[36,125088,125089,125092],{"class":38,"line":39},[36,125090,125091],{"class":49},"http:",[36,125093,125094],{"class":42},"\u002F\u002Flocalhost:8000\n",[1886,125096,125097],{},[854,125098,125099,125100,125103],{},"如果HTML文件中有",[33,125101,125102],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[21,125105,125107],{"id":125106},"_76-linux重点知识","7.6 Linux重点知识",[868,125109,125111],{"id":125110},"_761-关于点的说明","7.6.1 关于点的说明",[14,125113,125114],{},[2212,125115],{"alt":31,"src":125116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,125118,125119],{},"一点本目录，两点上目录",[868,125121,125123],{"id":125122},"_762-目录","7.6.2 目录",[22742,125125,125127],{"id":125126},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,125129,125130],{},[1043,125131,125132],{},"\u002Fboot:",[14,125134,125135],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,125137,125138],{},[1043,125139,125140],{},"\u002Fetc:",[14,125142,125143],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,125145,125146],{},[1043,125147,125148],{},"\u002Flib：",[14,125150,125151],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,125153,125154],{},[1043,125155,125156],{},"\u002Fsys:",[14,125158,125159],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22742,125161,125163],{"id":125162},"_7622-指令集合","7.6.2.2 指令集合",[14,125165,125166],{},[1043,125167,125168],{},"\u002Fbin:",[14,125170,125171],{},"为二进制文件的缩写，存放最经常使用的命令",[14,125173,125174],{},[1043,125175,125176],{},"\u002Fsbin:",[14,125178,125179],{},"只有系统管理员才能使用的程序和指令",[22742,125181,125183],{"id":125182},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,125185,125186],{},[1043,125187,125188],{},"\u002Fdev:",[14,125190,125191],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,125193,125194],{},[1043,125195,125196],{},"\u002Fmedia:",[14,125198,125199],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,125201,125202],{},[1043,125203,125204],{},"\u002Fmnt:",[14,125206,125207],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22742,125209,125211],{"id":125210},"_7624-临时文件","7.6.2.4 临时文件",[14,125213,125214],{},[1043,125215,125216],{},"\u002Frun:",[14,125218,125219],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,125221,125222],{},[1043,125223,125224],{},"\u002Flost+found:",[14,125226,125227],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,125229,125230],{},[1043,125231,125232],{},"\u002Ftmp:",[14,125234,125235],{},"这个目录是用来存放一些临时文件的",[22742,125237,125239],{"id":125238},"_7625-账户","7.6.2.5 账户",[14,125241,125242],{},[1043,125243,125244],{},"\u002Froot：",[14,125246,125247],{},"系统管理员的用户主目录",[14,125249,125250,27218],{},[1043,125251,125252],{},"\u002Fhome",[14,125254,125255],{},"用户的主目录，以用户的账号命名的",[14,125257,125258,27218],{},[1043,125259,125260],{},"\u002Fusr",[14,125262,125263],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,125265,125266],{},[1043,125267,125268],{},"\u002Fusr\u002Fbin：",[14,125270,125271],{},"系统用户使用的应用程序与指令",[14,125273,125274],{},[1043,125275,125276],{},"\u002Fusr\u002Fsbin：",[14,125278,125279],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,125281,125282],{},[1043,125283,125284],{},"\u002Fusr\u002Fsrc：",[14,125286,125287],{},"内核源代码默认的放置目录",[22742,125289,125291],{"id":125290},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,125293,125294],{},[1043,125295,125296],{},"\u002Fvar：",[14,125298,125299],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,125301,125302],{},[1043,125303,125304],{},"\u002Fproc:",[14,125306,125307,125308,125311],{},"管理 ",[1043,125309,125310],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22742,125313,125315],{"id":125314},"_7627-扩展用的","7.6.2.7 扩展用的",[14,125317,125318],{},[1043,125319,125320],{},"\u002Fopt:",[14,125322,125323],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,125325,125326],{},[1043,125327,125328],{},"\u002Fsrv:",[14,125330,125331],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[868,125333,125335],{"id":125334},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,125337,125338],{},[2212,125339],{"alt":31,"src":125340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,125342,125343],{},"windows-->linux:",[14,125345,125346],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,125348,125349],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,125351,125352],{},"linux传输文件到windows",[14,125354,125355],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[868,125357,125359],{"id":125358},"_764-易忘知识","7.6.4 易忘知识",[14,125361,125362],{},"操作系统内核查看",[26,125364,125365],{"className":117940,"code":121934,"language":117942,"meta":31,"style":31},[33,125366,125367],{"__ignoreMap":31},[36,125368,125369,125371],{"class":38,"line":39},[36,125370,70946],{"class":2713},[36,125372,121943],{"class":60},[14,125374,125375],{},[2212,125376],{"alt":31,"src":125377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,125379,125380],{},[2212,125381],{"alt":31,"src":125382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[26,125384,125386],{"className":117940,"code":125385,"language":117942,"meta":31,"style":31},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[33,125387,125388,125400],{"__ignoreMap":31},[36,125389,125390,125392,125395,125398],{"class":38,"line":39},[36,125391,122151],{"class":2713},[36,125393,125394],{"class":998}," mvtest",[36,125396,125397],{"class":998}," mvtest2",[36,125399,3423],{"class":49},[36,125401,125402],{"class":38,"line":46},[36,125403,125404],{"class":2713},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,125406,125407],{},[2212,125408],{"alt":31,"src":125409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,125411,125412],{},[2212,125413],{"alt":31,"src":125414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,125416,125417,125418,125421],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[33,125419,125420],{},"du -a"," 可以快速查看磁盘使用细节。",[868,125423,125425],{"id":125424},"_765-vim","7.6.5 Vim",[14,125427,125428],{},[2212,125429],{"alt":31,"src":125430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,125432,125433],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,125435,125436],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,125438,125439],{},[1043,125440,125441],{},"1.命令模式：",[14,125443,125444],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,125446,125447],{},"x 删除当前光标所在处的字符",[14,125449,125450],{},"：切换到底线命令模式，以在最底一行输入命令",[14,125452,125453],{},"a 进行插入模式，在光标下一个位置输入文本",[14,125455,125456],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,125458,125459],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,125461,125462],{},"dd 剪切当前行",[14,125464,125465],{},"yy 复制当前行",[14,125467,125468],{},"p 粘贴剪贴板内容到光标下方",[14,125470,125471],{},"P 粘贴剪贴板内容到光标上方",[14,125473,125474],{},"u 撤销上一次操作",[14,125476,125477],{},"ctrl+r 重做上一次操作",[14,125479,125480,125482],{},[1675,125481],{}," 保存文件",[14,125484,125485,125487],{},[1527,125486],{}," 退出Vim编辑器",[14,125489,125490,125492],{},[1527,125491],{},"! 强制退出Vim编辑器，不保存修改",[14,125494,125495],{},[1043,125496,125497],{},"2.输入模式：",[14,125499,125500],{},[2212,125501],{"alt":31,"src":125502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,125504,125505],{},[1043,125506,125507],{},"3.底线命令模式：",[14,125509,125510],{},[2212,125511],{"alt":31,"src":125512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,125514,125515],{},"按下esc可以退出底线命令模式",[868,125517,125519],{"id":125518},"_766-apt","7.6.6 apt",[14,125521,125522],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[868,125524,125526],{"id":125525},"_767-home与root的区别","7.6.7 home与root的区别",[14,125528,125529],{},[2212,125530],{"alt":31,"src":125531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,125533,125534],{},[2212,125535],{"alt":31,"src":125536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,125538,125539],{},[2212,125540],{"alt":31,"src":125541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,125543,125544],{},[2212,125545],{"alt":31,"src":125546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[868,125548,125550],{"id":125549},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,125552,125553],{},[50,125554,125555],{"href":125555,"rel":125556},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24609],[851,125558,125559,125562],{},[854,125560,125561],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[854,125563,125564],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,125566,125567],{},[2212,125568],{"alt":31,"src":125569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,125571,125572],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,125574,125575],{},[2212,125576],{"alt":31,"src":125577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[26,125579,125581],{"className":121460,"code":125580,"language":121462,"meta":121463,"style":31},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[33,125582,125583,125588],{"__ignoreMap":31},[36,125584,125585],{"class":38,"line":39},[36,125586,125587],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[36,125589,125590],{"class":38,"line":46},[36,125591,125592],{},".\u002Fpycharm.sh\n",[14,125594,125595],{},"3️⃣创建.desktop文件",[14,125597,125598],{},[1043,125599,125600],{},"原理：",[1886,125602,125603,125613],{},[854,125604,125605,125606,125612],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[1043,125607,125608,125611],{},[33,125609,125610],{},".desktop"," 文件"," 来识别应用。",[854,125614,125615,125617,125618],{},[33,125616,125610],{}," 文件相当于一个“应用注册表”，告诉系统：",[1886,125619,125620,125623,125626,125629,125632],{},[854,125621,125622],{},"应用名字（Name）",[854,125624,125625],{},"图标（Icon）",[854,125627,125628],{},"执行命令（Exec）",[854,125630,125631],{},"分类（Categories）",[854,125633,125634],{},"是否需要终端（Terminal）",[26,125636,125638],{"className":121460,"code":125637,"language":121462,"meta":121463,"style":31},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[33,125639,125640,125645],{"__ignoreMap":31},[36,125641,125642],{"class":38,"line":39},[36,125643,125644],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[36,125646,125647],{"class":38,"line":46},[36,125648,125649],{},"nano pycharm.desktop\n",[14,125651,125652],{},"nano是一个命令行下的编辑器，也可以使用vim",[26,125654,125656],{"className":121460,"code":125655,"language":121462,"meta":121463,"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,125657,125658,125663,125668,125673,125678,125683,125688,125693,125698,125703],{"__ignoreMap":31},[36,125659,125660],{"class":38,"line":39},[36,125661,125662],{},"[Desktop Entry]\n",[36,125664,125665],{"class":38,"line":46},[36,125666,125667],{},"Version=1.0\n",[36,125669,125670],{"class":38,"line":78},[36,125671,125672],{},"Type=Application\n",[36,125674,125675],{"class":38,"line":125},[36,125676,125677],{},"Name=PyCharm\n",[36,125679,125680],{"class":38,"line":131},[36,125681,125682],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[36,125684,125685],{"class":38,"line":396},[36,125686,125687],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[36,125689,125690],{"class":38,"line":407},[36,125691,125692],{},"Comment=JetBrains PyCharm IDE\n",[36,125694,125695],{"class":38,"line":2061},[36,125696,125697],{},"Categories=Development;IDE;\n",[36,125699,125700],{"class":38,"line":2067},[36,125701,125702],{},"Terminal=false\n",[36,125704,125705],{"class":38,"line":2079},[36,125706,125707],{},"StartupWMClass=jetbrains-pycharm\n",[1886,125709,125710,125716,125722,125728],{},[854,125711,125712,125715],{},[33,125713,125714],{},"Exec"," → 点击图标时执行的命令",[854,125717,125718,125721],{},[33,125719,125720],{},"Icon"," → 显示在菜单和桌面上的图标",[854,125723,125724,125727],{},[33,125725,125726],{},"Terminal=false"," → 不打开终端",[854,125729,125730,125733],{},[33,125731,125732],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125735,125736,125737],"blockquote",{},[14,125738,125739,125740,125742,125743],{},"可以理解成 ",[33,125741,125610],{}," 文件是 Linux 的 ",[1043,125744,125745],{},"快捷方式配置文件",[14,125747,125748],{},"4️⃣设置可执行权限",[26,125750,125752],{"className":121460,"code":125751,"language":121462,"meta":121463,"style":31},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[33,125753,125754],{"__ignoreMap":31},[36,125755,125756],{"class":38,"line":39},[36,125757,125751],{},[14,125759,125760],{},"5️⃣桌面图标启动的话如下：",[26,125762,125764],{"className":121460,"code":125763,"language":121462,"meta":121463,"style":31},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[33,125765,125766,125771],{"__ignoreMap":31},[36,125767,125768],{"class":38,"line":39},[36,125769,125770],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[36,125772,125773],{"class":38,"line":46},[36,125774,125775],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[851,125777,125778],{"start":78},[854,125779,125780],{},"下载Appimage文件实现软件的安装",[14,125782,125783],{},"1️⃣先下载appimage",[14,125785,125786],{},[50,125787,125788],{"href":125788,"rel":125789},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24609],[14,125791,125792],{},[2212,125793],{"alt":31,"src":125794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125796,125797],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125799,125800],{},[2212,125801],{"alt":31,"src":125802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125804,125805],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125807,125808],{},[2212,125809],{"alt":31,"src":125810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,125812,125813],{},[2212,125814],{"alt":31,"src":125815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,125817,125818,125819,125822],{},"3️⃣给他们放在",[33,125820,125821],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125824,125825],{},"4️⃣给软件执行权限",[26,125827,125829],{"className":121460,"code":125828,"language":121462,"meta":121463,"style":31},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[33,125830,125831,125836],{"__ignoreMap":31},[36,125832,125833],{"class":38,"line":39},[36,125834,125835],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[36,125837,125838],{"class":38,"line":46},[36,125839,125840],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125842,125843],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[26,125845,125847],{"className":117940,"code":125846,"language":117942,"meta":31,"style":31},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[33,125848,125849,125856,125863,125869],{"__ignoreMap":31},[36,125850,125851,125853],{"class":38,"line":39},[36,125852,101920],{"class":60},[36,125854,125855],{"class":998}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[36,125857,125858,125860],{"class":38,"line":46},[36,125859,101927],{"class":2713},[36,125861,125862],{"class":998}," .\u002Fqqmusic.desktop\n",[36,125864,125865,125867],{"class":38,"line":78},[36,125866,124911],{"class":2713},[36,125868,125862],{"class":998},[36,125870,125871,125873,125875,125877],{"class":38,"line":125},[36,125872,25321],{"class":2713},[36,125874,25324],{"class":998},[36,125876,123777],{"class":998},[36,125878,125862],{"class":998},[14,125880,125881,125883],{},[33,125882,101927],{},"：一个 Linux 命令，主要功能是：",[1886,125885,125886,125889],{},[854,125887,125888],{},"如果文件不存在，就创建一个新的空文件",[854,125890,125891],{},"如果文件已存在，就更新该文件的最后修改时间",[26,125893,125895],{"className":121460,"code":125894,"language":121462,"meta":121463,"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,125896,125897,125901,125906,125911,125916,125920,125925],{"__ignoreMap":31},[36,125898,125899],{"class":38,"line":39},[36,125900,125662],{},[36,125902,125903],{"class":38,"line":46},[36,125904,125905],{},"Name=QQ音乐\n",[36,125907,125908],{"class":38,"line":78},[36,125909,125910],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[36,125912,125913],{"class":38,"line":125},[36,125914,125915],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[36,125917,125918],{"class":38,"line":131},[36,125919,125672],{},[36,125921,125922],{"class":38,"line":396},[36,125923,125924],{},"Categories=Audio;Music;Player;\n",[36,125926,125927],{"class":38,"line":407},[36,125928,125929],{},"Comment=QQ Music Client for Linux\n",[14,125931,125932],{},"将文件复制进去",[14,125934,125935],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125937,125938],{},[2212,125939],{"alt":31,"src":125940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125942,125943],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125945,125946],{},[2212,125947],{"alt":31,"src":125948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125950,125951,125952,125955,125956,125959],{},"如果你用的不是KDE，那么也可以直接修改",[33,125953,125954],{},"qqmuic.desktop","：在exec的末尾加上",[33,125957,125958],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[26,125961,125963],{"className":121460,"code":125962,"language":121462,"meta":121463,"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,125964,125965,125969,125973,125978,125982,125986,125990],{"__ignoreMap":31},[36,125966,125967],{"class":38,"line":39},[36,125968,125662],{},[36,125970,125971],{"class":38,"line":46},[36,125972,125905],{},[36,125974,125975],{"class":38,"line":78},[36,125976,125977],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[36,125979,125980],{"class":38,"line":125},[36,125981,125915],{},[36,125983,125984],{"class":38,"line":131},[36,125985,125672],{},[36,125987,125988],{"class":38,"line":396},[36,125989,125924],{},[36,125991,125992],{"class":38,"line":407},[36,125993,125929],{},[14,125995,125996],{},[2212,125997],{"alt":31,"src":125998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,126000,126001],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[26,126003,126005],{"className":121460,"code":126004,"language":121462,"meta":121463,"style":31},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[33,126006,126007],{"__ignoreMap":31},[36,126008,126009],{"class":38,"line":39},[36,126010,126004],{},[851,126012,126013],{"start":125},[854,126014,126015],{},"去Flathub上安装软件",[14,126017,126018],{},[50,126019,126020],{"href":126020,"rel":126021},"https:\u002F\u002Fflathub.org\u002F",[24609],[14,126023,126024],{},"1️⃣去上面的官网搜索软件+下载软件",[14,126026,126027],{},[2212,126028],{"alt":31,"src":126029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[26,126031,126033],{"className":121460,"code":126032,"language":121462,"meta":121463,"style":31},"flatpak install flathub com.obsproject.Studio\n",[33,126034,126035],{"__ignoreMap":31},[36,126036,126037],{"class":38,"line":39},[36,126038,126032],{},[14,126040,126041],{},[2212,126042],{"alt":31,"src":126043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,126045,126046],{},"2️⃣运行软件",[14,126048,126049],{},"a.官方方式：",[14,126051,126052],{},[2212,126053],{"alt":31,"src":126054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[26,126056,126057],{"className":121460,"code":126032,"language":121462,"meta":121463,"style":31},[33,126058,126059],{"__ignoreMap":31},[36,126060,126061],{"class":38,"line":39},[36,126062,126032],{},[14,126064,126065],{},"b.当普通软件运行：",[14,126067,126068],{},[2212,126069],{"alt":31,"src":126070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,126072,126073],{},[2212,126074],{"alt":31,"src":126075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[807,126077,126078],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":46,"depth":46,"links":126080},[126081,126082,126087,126088,126094,126095],{"id":122813,"depth":46,"text":122814},{"id":123155,"depth":46,"text":123156,"children":126083},[126084,126085,126086],{"id":123159,"depth":78,"text":123160},{"id":123226,"depth":78,"text":123227},{"id":123487,"depth":78,"text":123488},{"id":123640,"depth":46,"text":123641},{"id":123878,"depth":46,"text":123879,"children":126089},[126090,126091,126092,126093],{"id":123930,"depth":78,"text":123931},{"id":124216,"depth":78,"text":124217},{"id":124487,"depth":78,"text":124488},{"id":124746,"depth":78,"text":124747},{"id":124805,"depth":46,"text":124806},{"id":125106,"depth":46,"text":125107,"children":126096},[126097,126098,126099,126100,126101,126102,126103,126104],{"id":125110,"depth":78,"text":125111},{"id":125122,"depth":78,"text":125123},{"id":125334,"depth":78,"text":125335},{"id":125358,"depth":78,"text":125359},{"id":125424,"depth":78,"text":125425},{"id":125518,"depth":78,"text":125519},{"id":125525,"depth":78,"text":125526},{"id":125549,"depth":78,"text":125550},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122805,"description":823},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126111,"title":126112,"body":126113,"description":823,"extension":824,"meta":126117,"navigation":193,"path":126118,"seo":126119,"stem":126120,"__hash__":126121},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126114,"toc":126115},[],{"title":31,"searchDepth":46,"depth":46,"links":126116},[],{"category":31008},"\u002Fwiki\u002F2025-01-27-linux",{"title":126112,"description":823},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126123,"title":126124,"body":126125,"description":126129,"extension":824,"meta":126520,"navigation":193,"path":126521,"seo":126522,"stem":126523,"__hash__":126524},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126126,"toc":126518},[126127,126130,126134,126151,126154,126207,126211,126213,126253,126262,126266,126269,126510,126515],[14,126128,126129],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126131,126133],{"id":126132},"_1ubuntu环境配置","1.Ubuntu环境配置",[851,126135,126136,126139,126142,126145,126148],{},[854,126137,126138],{},"ubuntu环境换源",[854,126140,126141],{},"安装cuda",[854,126143,126144],{},"安装miniconda",[854,126146,126147],{},"安装pytorch",[854,126149,126150],{},"安装genesis",[14,126152,126153],{},"参考链接：",[26,126155,126157],{"className":24566,"code":126156,"language":24568,"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,126158,126159],{"__ignoreMap":31},[36,126160,126161,126164,126167,126170,126172,126175,126178,126180,126183,126186,126188,126191,126194,126196,126199,126202,126204],{"class":38,"line":39},[36,126162,126163],{"class":2713},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[36,126165,126166],{"class":998},"=blogdetail",[36,126168,126169],{"class":49},"&sharetype",[36,126171,54],{"class":53},[36,126173,126174],{"class":998},"blogdetail",[36,126176,126177],{"class":49},"&sharerId",[36,126179,54],{"class":53},[36,126181,126182],{"class":998},"144728092",[36,126184,126185],{"class":49},"&sharerefer",[36,126187,54],{"class":53},[36,126189,126190],{"class":998},"PC",[36,126192,126193],{"class":49},"&sharesource",[36,126195,54],{"class":53},[36,126197,126198],{"class":998},"qq_69379513",[36,126200,126201],{"class":49},"&sharefrom",[36,126203,54],{"class":53},[36,126205,126206],{"class":998},"from_link\n",[10,126208,126210],{"id":126209},"_2genesis-报错issue","2.Genesis 报错issue",[14,126212,126153],{},[26,126214,126215],{"className":24566,"code":126156,"language":24568,"meta":31,"style":31},[33,126216,126217],{"__ignoreMap":31},[36,126218,126219,126221,126223,126225,126227,126229,126231,126233,126235,126237,126239,126241,126243,126245,126247,126249,126251],{"class":38,"line":39},[36,126220,126163],{"class":2713},[36,126222,126166],{"class":998},[36,126224,126169],{"class":49},[36,126226,54],{"class":53},[36,126228,126174],{"class":998},[36,126230,126177],{"class":49},[36,126232,54],{"class":53},[36,126234,126182],{"class":998},[36,126236,126185],{"class":49},[36,126238,54],{"class":53},[36,126240,126190],{"class":998},[36,126242,126193],{"class":49},[36,126244,54],{"class":53},[36,126246,126198],{"class":998},[36,126248,126201],{"class":49},[36,126250,54],{"class":53},[36,126252,126206],{"class":998},[26,126254,126256],{"className":24566,"code":126255,"language":24568,"meta":31,"style":31},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[33,126257,126258],{"__ignoreMap":31},[36,126259,126260],{"class":38,"line":39},[36,126261,126255],{"class":2713},[10,126263,126265],{"id":126264},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,126267,126268],{},"hello_robot.py",[26,126270,126272],{"className":28,"code":126271,"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,126273,126274,126280,126295,126299,126311,126323,126327,126340,126344,126363,126373,126383,126397,126401,126405,126410,126414,126424,126431,126445,126452,126462,126467,126471,126489,126494,126498,126505],{"__ignoreMap":31},[36,126275,126276,126278],{"class":38,"line":39},[36,126277,31135],{"class":53},[36,126279,46047],{"class":49},[36,126281,126282,126285,126288,126290,126292],{"class":38,"line":46},[36,126283,126284],{"class":49},"os.environ[",[36,126286,126287],{"class":998},"'PYOPENGL_PLATFORM'",[36,126289,5192],{"class":49},[36,126291,54],{"class":53},[36,126293,126294],{"class":998}," 'glx'\n",[36,126296,126297],{"class":38,"line":78},[36,126298,194],{"emptyLinePlaceholder":193},[36,126300,126301,126303,126306,126308],{"class":38,"line":125},[36,126302,31135],{"class":53},[36,126304,126305],{"class":49}," genesis ",[36,126307,32125],{"class":53},[36,126309,126310],{"class":49}," gs\n",[36,126312,126313,126315,126318,126320],{"class":38,"line":131},[36,126314,31479],{"class":53},[36,126316,126317],{"class":49}," pynput ",[36,126319,31135],{"class":53},[36,126321,126322],{"class":49}," keyboard\n",[36,126324,126325],{"class":38,"line":396},[36,126326,194],{"emptyLinePlaceholder":193},[36,126328,126329,126332,126335,126337],{"class":38,"line":407},[36,126330,126331],{"class":49},"gs.init(",[36,126333,126334],{"class":416},"backend",[36,126336,54],{"class":53},[36,126338,126339],{"class":49},"gs.gpu)\n",[36,126341,126342],{"class":38,"line":2061},[36,126343,194],{"emptyLinePlaceholder":193},[36,126345,126346,126349,126351,126354,126357,126359,126361],{"class":38,"line":2067},[36,126347,126348],{"class":49},"scene ",[36,126350,54],{"class":53},[36,126352,126353],{"class":49}," gs.Scene(",[36,126355,126356],{"class":416},"show_viewer",[36,126358,54],{"class":53},[36,126360,32218],{"class":60},[36,126362,75],{"class":49},[36,126364,126365,126368,126370],{"class":38,"line":2079},[36,126366,126367],{"class":49},"plane ",[36,126369,54],{"class":53},[36,126371,126372],{"class":49}," scene.add_entity(gs.morphs.Plane())\n",[36,126374,126375,126378,126380],{"class":38,"line":2362},[36,126376,126377],{"class":49},"franka ",[36,126379,54],{"class":53},[36,126381,126382],{"class":49}," scene.add_entity(\n",[36,126384,126385,126388,126390,126392,126395],{"class":38,"line":2367},[36,126386,126387],{"class":49},"    gs.morphs.MJCF(",[36,126389,46096],{"class":416},[36,126391,54],{"class":53},[36,126393,126394],{"class":998},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[36,126396,38789],{"class":49},[36,126398,126399],{"class":38,"line":2373},[36,126400,75],{"class":49},[36,126402,126403],{"class":38,"line":2378},[36,126404,194],{"emptyLinePlaceholder":193},[36,126406,126407],{"class":38,"line":2392},[36,126408,126409],{"class":49},"scene.build()\n",[36,126411,126412],{"class":38,"line":2397},[36,126413,194],{"emptyLinePlaceholder":193},[36,126415,126416,126418,126421],{"class":38,"line":2403},[36,126417,32689],{"class":53},[36,126419,126420],{"class":2713}," on_press",[36,126422,126423],{"class":49},"(key):\n",[36,126425,126426,126429],{"class":38,"line":2424},[36,126427,126428],{"class":53},"    try",[36,126430,4488],{"class":49},[36,126432,126433,126435,126438,126440,126443],{"class":38,"line":2429},[36,126434,3246],{"class":53},[36,126436,126437],{"class":49}," key.char ",[36,126439,3698],{"class":53},[36,126441,126442],{"class":998}," 'q'",[36,126444,4488],{"class":49},[36,126446,126447,126449],{"class":38,"line":2443},[36,126448,16476],{"class":53},[36,126450,126451],{"class":60}," False\n",[36,126453,126454,126457,126460],{"class":38,"line":2448},[36,126455,126456],{"class":53},"    except",[36,126458,126459],{"class":60}," AttributeError",[36,126461,4488],{"class":49},[36,126463,126464],{"class":38,"line":2477},[36,126465,126466],{"class":53},"        pass\n",[36,126468,126469],{"class":38,"line":2482},[36,126470,194],{"emptyLinePlaceholder":193},[36,126472,126473,126476,126478,126481,126484,126486],{"class":38,"line":2499},[36,126474,126475],{"class":49},"listener ",[36,126477,54],{"class":53},[36,126479,126480],{"class":49}," keyboard.Listener(",[36,126482,126483],{"class":416},"on_press",[36,126485,54],{"class":53},[36,126487,126488],{"class":49},"on_press)\n",[36,126490,126491],{"class":38,"line":2504},[36,126492,126493],{"class":49},"listener.start()\n",[36,126495,126496],{"class":38,"line":2509},[36,126497,194],{"emptyLinePlaceholder":193},[36,126499,126500,126502],{"class":38,"line":2514},[36,126501,109307],{"class":53},[36,126503,126504],{"class":49}," listener.running:\n",[36,126506,126507],{"class":38,"line":2528},[36,126508,126509],{"class":49},"    scene.step()\n",[14,126511,126512],{},[2212,126513],{"alt":31,"src":126514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[807,126516,126517],{},"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":46,"depth":46,"links":126519},[],{"category":24122},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126124,"description":126129},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126526,"title":126527,"body":126528,"description":823,"extension":824,"meta":126543,"navigation":193,"path":126544,"seo":126545,"stem":126546,"__hash__":126547},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126529,"toc":126540},[126530,126533,126537],[10,126531,126527],{"id":126532},"_1-基础知识",[21,126534,126536],{"id":126535},"_11-js的组成","1.1 js的组成",[14,126538,126539],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":31,"searchDepth":46,"depth":46,"links":126541},[126542],{"id":126535,"depth":46,"text":126536},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126527,"description":823},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126549,"title":126550,"body":126551,"description":823,"extension":824,"meta":126690,"navigation":193,"path":126691,"seo":126692,"stem":126693,"__hash__":126694},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126552,"toc":126678},[126553,126556,126560,126563,126567,126577,126581,126584,126587,126590,126594,126601,126607,126611,126617,126628,126632,126635,126639,126642,126646,126649,126653,126656,126660,126663,126666,126669,126672,126675],[10,126554,126550],{"id":126555},"_2-vscode必备内容",[21,126557,126559],{"id":126558},"_21-标签分类","2.1 标签分类",[14,126561,126562],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[21,126564,126566],{"id":126565},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,126568,126569,126570,126572,126573,126576],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[33,126571,1117],{}," 然后按 ",[33,126574,126575],{},"Tab","，快速自动生成基本结构。",[21,126578,126580],{"id":126579},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,126582,126583],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,126585,126586],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,126588,126589],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[21,126591,126593],{"id":126592},"_24-视图缩放","2.4 视图缩放",[14,126595,126596,126597,126600],{},"缩放视图 ",[33,126598,126599],{},"ctrl+"," 可实现代码增大。",[14,126602,126603,126606],{},[33,126604,126605],{},"ctrl-"," 可实现代码减小。",[21,126608,126610],{"id":126609},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,126612,126613,126614,29130],{},"VSCode 新建文件快捷键为 ",[33,126615,126616],{},"ctrl+N",[14,126618,126619,126620,126623,126624,126627],{},"保存快捷键为 ",[33,126621,126622],{},"ctrl+S","，将文本保存为 ",[33,126625,126626],{},".html"," 文件。",[21,126629,126631],{"id":126630},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,126633,126634],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[21,126636,126638],{"id":126637},"_27-vscode-icons","2.7 vscode-icons",[14,126640,126641],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[21,126643,126645],{"id":126644},"_28-easy-less","2.8 Easy LESS",[14,126647,126648],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[21,126650,126652],{"id":126651},"_29-会了吧插件","2.9 会了吧插件",[14,126654,126655],{},"会了吧插件可以展示代码中英语单词的意思。",[21,126657,126659],{"id":126658},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,126661,126662],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,126664,126665],{},"②选定多个相同的单词:ctrl+D",[14,126667,126668],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126670,126671],{},"④全局替换某些单词:ctrl+h",[14,126673,126674],{},"⑤快速定位到某一行:ctrl+g",[14,126676,126677],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":31,"searchDepth":46,"depth":46,"links":126679},[126680,126681,126682,126683,126684,126685,126686,126687,126688,126689],{"id":126558,"depth":46,"text":126559},{"id":126565,"depth":46,"text":126566},{"id":126579,"depth":46,"text":126580},{"id":126592,"depth":46,"text":126593},{"id":126609,"depth":46,"text":126610},{"id":126630,"depth":46,"text":126631},{"id":126637,"depth":46,"text":126638},{"id":126644,"depth":46,"text":126645},{"id":126651,"depth":46,"text":126652},{"id":126658,"depth":46,"text":126659},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126550,"description":823},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126696,"title":126697,"body":126698,"description":823,"extension":824,"meta":126857,"navigation":193,"path":126858,"seo":126859,"stem":126860,"__hash__":126861},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126699,"toc":126849},[126700,126703,126707,126717,126723,126729,126733,126742,126746,126751,126754,126757,126761,126764,126774,126783,126792,126801,126811,126818,126823,126828,126841],[10,126701,126697],{"id":126702},"_3-html文本与容器标签",[21,126704,126706],{"id":126705},"_31-标题标签","3.1 标题标签",[14,126708,126709,126712,126713,126716],{},[33,126710,126711],{},"\u003Ch1>","我是一级标签",[33,126714,126715],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126718,126719,126712,126721],{},[33,126720,126711],{},[33,126722,126715],{},[14,126724,123979,126725,126728],{},[33,126726,126727],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[21,126730,126732],{"id":126731},"_32-段落标签","3.2 段落标签",[14,126734,126735,126738,126739],{},[33,126736,126737],{},"\u003Cp>","....",[33,126740,126741],{},"\u003C\u002Fp>",[21,126743,126745],{"id":126744},"_33-换行标签","3.3 换行标签",[14,126747,126748],{},[33,126749,126750],{},"\u003Cbr \u002F>",[14,126752,126753],{},"具有强制换行的作用",[14,126755,126756],{},"单标签",[21,126758,126760],{"id":126759},"_34-文本格式化标签","3.4 文本格式化标签",[14,126762,126763],{},"提供粗体、斜体和下划线等效果",[14,126765,126766,126767,83281,126770,126773],{},"加粗：",[33,126768,126769],{},"\u003Cstrong>...\u003C\u002Fstrong>",[33,126771,126772],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126775,126776,126777,83281,126780,126773],{},"斜体：",[33,126778,126779],{},"\u003Cem>...\u003C\u002Fem>",[33,126781,126782],{},"\u003Ci>...\u003C\u002Fi>",[14,126784,126785,126786,83281,126789,126773],{},"删除线：",[33,126787,126788],{},"\u003Cdel>...\u003C\u002Fdel>",[33,126790,126791],{},"\u003Cs>...\u003C\u002Fs>",[14,126793,126794,126795,83281,126798,126773],{},"下划线：",[33,126796,126797],{},"\u003Cins>...\u003C\u002Fins>",[33,126799,126800],{},"\u003Cu>...\u003C\u002Fu>",[21,126802,126804,126805,19154,126808,103337],{"id":126803},"_35-div和span标签","3.5 ",[33,126806,126807],{},"\u003Cdiv>",[33,126809,126810],{},"\u003Cspan>",[14,126812,126813,101662,126815,126817],{},[33,126814,126807],{},[33,126816,126810],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126819,126820],{},[33,126821,126822],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126824,126825],{},[33,126826,126827],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126829,126830,126831,126833,126834,126836,126837,126840],{},"两者特点：①",[33,126832,126807],{}," 标签用来布局，但一行通常只放一个 ",[33,126835,126807],{},"。可以理解为一个大盒子，独占一行，在 ",[33,126838,126839],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126842,77991,126843,126845,126846,126848],{},[33,126844,126810],{}," 标签也可用于布局，一行可以放多个 ",[33,126847,126810],{},"，可理解为小盒子。",{"title":31,"searchDepth":46,"depth":46,"links":126850},[126851,126852,126853,126854,126855],{"id":126705,"depth":46,"text":126706},{"id":126731,"depth":46,"text":126732},{"id":126744,"depth":46,"text":126745},{"id":126759,"depth":46,"text":126760},{"id":126803,"depth":46,"text":126856},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126697,"description":823},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126863,"title":126864,"body":126865,"description":823,"extension":824,"meta":127062,"navigation":193,"path":127063,"seo":127064,"stem":127065,"__hash__":127066},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126866,"toc":127054},[126867,126870,126874,126877,126883,126890,126896,126902,126905,126908,126911,126914,126917,126920,126923,126927,126930,126933,126936,126942,126948,126954,126961,126965,126971,126977,126980,126983,126989,126995,127001,127004,127007,127011,127014,127024,127030,127034,127043,127047,127050],[10,126868,126864],{"id":126869},"_4-html图像与链接",[21,126871,126873],{"id":126872},"_41-图像标签","4.1 图像标签",[14,126875,126876],{},"（1）标签",[14,126878,126879,126882],{},[33,126880,126881],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126884,126885,126886,126889],{},"src是",[33,126887,126888],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126891,126892,126893],{},"alt:文本，替换文本。图像不能显示的文字 ",[33,126894,126895],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126897,126898,126899],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[33,126900,126901],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126903,126904],{},"width:像素，设置图像的宽度",[14,126906,126907],{},"height:像素，设置图像的高度",[14,126909,126910],{},"border：像素，设置图像的边框粗细",[14,126912,126913],{},"（2）图像标签属性的注意点：",[14,126915,126916],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126918,126919],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126921,126922],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[21,126924,126926],{"id":126925},"_42-路径注意要点","4.2 路径注意要点：",[14,126928,126929],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126931,126932],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126934,126935],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126937,126938,126939],{},"①同一级路径：图像文件位于HTML文件同一级，如",[33,126940,126941],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126943,126944,126945],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[33,126946,126947],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126949,126950,126951],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[33,126952,126953],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126955,126956,126957,1141],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[50,126958,126959],{"href":126959,"rel":126960},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24609],[21,126962,126964],{"id":126963},"_43-超链接标签","4.3 超链接标签",[14,126966,126967,126970],{},[33,126968,126969],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126972,126973,126974],{},"①语法格式：",[33,126975,126976],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126978,126979],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126981,126982],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126984,126985,126986],{},"③链接分类：外部链接：",[33,126987,126988],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126990,126991,126992],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[33,126993,126994],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126996,126997,126998],{},"空链接：如果当时没有确定链接目标时，",[33,126999,127000],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,127002,127003],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,127005,127006],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[21,127008,127010],{"id":127009},"_44-锚点链接","4.4 锚点链接",[14,127012,127013],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,127015,127016,127017,127020,127021],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[33,127018,127019],{},"\u003Ca href=\"#two\">","第二级",[33,127022,127023],{},"\u003C\u002Fa>",[14,127025,127026,127027],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[33,127028,127029],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[21,127031,127033],{"id":127032},"_45-注释标签","4.5 注释标签",[14,127035,127036,127039,127040],{},[33,127037,127038],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[33,127041,127042],{},"ctrl+\u002F",[21,127044,127046],{"id":127045},"_46-特殊字符","4.6 特殊字符",[14,127048,127049],{},"可以实现添加多个空格",[2212,127051],{"style":127052,"src":127053},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":31,"searchDepth":46,"depth":46,"links":127055},[127056,127057,127058,127059,127060,127061],{"id":126872,"depth":46,"text":126873},{"id":126925,"depth":46,"text":126926},{"id":126963,"depth":46,"text":126964},{"id":127009,"depth":46,"text":127010},{"id":127032,"depth":46,"text":127033},{"id":127045,"depth":46,"text":127046},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126864,"description":823},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":127068,"title":127069,"body":127070,"description":823,"extension":824,"meta":127363,"navigation":193,"path":127364,"seo":127365,"stem":127366,"__hash__":127367},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":127071,"toc":127354},[127072,127075,127079,127082,127085,127088,127091,127094,127097,127100,127103,127106,127126,127132,127136,127139,127142,127145,127148,127151,127154,127158,127161,127164,127167,127170,127183,127188,127191,127194,127209,127212,127215,127218,127221,127224,127228,127231,127238,127241,127244,127247,127250,127253,127259,127262,127265,127271,127274,127277,127280,127286,127289,127292,127306,127313,127316,127319,127326,127335,127338,127341,127344,127348,127351],[10,127073,127069],{"id":127074},"_5-html表格列表与表单",[21,127076,127078],{"id":127077},"_51-表格标签","5.1 表格标签",[14,127080,127081],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,127083,127084],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,127086,127087],{},"②表格基本语法：",[2212,127089],{"style":127052,"src":127090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,127092,127093],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[2212,127095],{"style":127052,"src":127096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,127098,127099],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[2212,127101],{"style":127052,"src":127102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,127104,127105],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,127107,127108,127111,127112,127114,127115,127118,127119,127121,127122,127125],{},[33,127109,127110],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[33,127113,127110],{},"内部必须拥有",[33,127116,127117],{},"\u003Ctr>","标签，一般位于第一行，",[33,127120,127110],{},"比",[33,127123,127124],{},"\u003Cth>","范围广",[14,127127,127128,127131],{},[33,127129,127130],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[21,127133,127135],{"id":127134},"_52-合并单元格","5.2 合并单元格",[14,127137,127138],{},"（1）合并单元格方式：",[14,127140,127141],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,127143,127144],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,127146,127147],{},"（2）目标单元格：",[14,127149,127150],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,127152,127153],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[21,127155,127157],{"id":127156},"_53-列表标签","5.3 列表标签",[14,127159,127160],{},"（1）分类：无序列表、有序列表、自定义列表",[14,127162,127163],{},"①无序列表：",[2212,127165],{"style":127052,"src":127166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,127168,127169],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,127171,127172,127175,127176,127179,127180,127182],{},[33,127173,127174],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[33,127177,127178],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[33,127181,127174],{},"中输入其他标签或文字是不对的",[14,127184,127185,127187],{},[33,127186,127178],{},"之间相当于一个容器，可以容纳所有元素",[14,127189,127190],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,127192,127193],{},"在css中去除前边的小圆点采用如下代码:",[26,127195,127199],{"className":127196,"code":127197,"language":127198,"meta":31,"style":31},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[33,127200,127201],{"__ignoreMap":31},[36,127202,127203,127206],{"class":38,"line":39},[36,127204,127205],{"class":52042},"list-style",[36,127207,127208],{"class":49},": none;\n",[14,127210,127211],{},"②有序列表：",[2212,127213],{"style":127052,"src":127214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,127216,127217],{},"③自定义列表：",[2212,127219],{"style":127052,"src":127220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[2212,127222],{"style":127052,"src":127223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[21,127225,127227],{"id":127226},"_54-表单标签","5.4 表单标签",[14,127229,127230],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,127232,127233,127234,127237],{},"（1）表单域：包含单元素的区域，",[33,127235,127236],{},"\u003Cform>","标签可以实现信息的收集和传递。",[2212,127239],{"style":127052,"src":127240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,127242,127243],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,127245,127246],{},"表单元素提交必须有name属性",[14,127248,127249],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,127251,127252],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,127254,77968,127255,127258],{},[33,127256,127257],{},"\u003Cinput>","输入表单元素",[2212,127260],{"style":127052,"src":127261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[2212,127263],{"style":127052,"src":127264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,127266,127267,127268],{},"单选按钮：",[33,127269,127270],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[2212,127272],{"style":127052,"src":127273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,127275,127276],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[2212,127278],{"style":127052,"src":127279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,127281,127282,127285],{},[1043,127283,127284],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,127287,127288],{},"②select下拉表单元素：可以节约页面控件",[2212,127290],{"style":127052,"src":127291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,127293,127294,14539,127296,127299,127300,127302,127303,127305],{},[1043,127295,929],{},[33,127297,127298],{},"\u003Cselect>","中至少包含一对",[33,127301,103358],{},"；在",[33,127304,103358],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,127307,127308,127309,127312],{},"③",[33,127310,127311],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[2212,127314],{"style":127052,"src":127315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,127317,127318],{},"3行20列",[21,127320,127322,127323,103337],{"id":127321},"_55-lable标签","5.5 ",[33,127324,127325],{},"\u003Clable>",[14,127327,127328,127329,127331,127332,127334],{},"它不是表单标签，但常常与表单标签搭配使用，",[33,127330,127325],{},"标签用于绑定一个表单标签，当点击",[33,127333,127325],{},"标签内的文本",[14,127336,127337],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[2212,127339],{"style":127052,"src":127340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[2212,127342],{"style":127052,"src":127343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[21,127345,127347],{"id":127346},"_56-实例","5.6 实例",[2212,127349],{"style":127052,"src":127350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[807,127352,127353],{},"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":46,"depth":46,"links":127355},[127356,127357,127358,127359,127360,127362],{"id":127077,"depth":46,"text":127078},{"id":127134,"depth":46,"text":127135},{"id":127156,"depth":46,"text":127157},{"id":127226,"depth":46,"text":127227},{"id":127321,"depth":46,"text":127361},"5.5 \u003Clable>标签",{"id":127346,"depth":46,"text":127347},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":127069,"description":823},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127369,"title":127370,"body":127371,"description":823,"extension":824,"meta":127920,"navigation":193,"path":127921,"seo":127922,"stem":127923,"__hash__":127924},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127372,"toc":127895},[127373,127376,127380,127383,127386,127390,127393,127396,127399,127402,127405,127408,127411,127415,127418,127422,127425,127428,127431,127435,127438,127441,127444,127450,127453,127456,127459,127462,127465,127468,127471,127504,127508,127511,127514,127517,127521,127524,127527,127530,127533,127536,127540,127543,127546,127549,127553,127556,127560,127563,127567,127570,127575,127579,127582,127586,127589,127592,127595,127598,127625,127628,127632,127635,127638,127643,127646,127649,127653,127656,127661,127664,127667,127670,127674,127677,127680,127683,127687,127690,127693,127696,127700,127704,127707,127747,127750,127754,127761,127764,127768,127771,127817,127821,127824,127827,127830,127858,127862,127865,127892],[10,127374,127370],{"id":127375},"_6-css语法与文本样式",[21,127377,127379],{"id":127378},"_61-css语法规范","6.1 css语法规范",[14,127381,127382],{},"由两部分组成，选择器及一条或多条声明",[2212,127384],{"style":127052,"src":127385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,127387,127388],{},[1043,127389,929],{},[14,127391,127392],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,127394,127395],{},"②属性与属性值以“键值对”的形式出现",[14,127397,127398],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,127400,127401],{},"④属性和属性值之间用英文“;”分开",[2212,127403],{"style":127052,"src":127404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[2212,127406],{"style":127052,"src":127407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[2212,127409],{"style":127052,"src":127410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[21,127412,127414],{"id":127413},"_62-css选择器","6.2 css选择器",[14,127416,127417],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[868,127419,127421],{"id":127420},"_621-标签选择器","6.2.1 标签选择器",[14,127423,127424],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,127426,127427],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[2212,127429],{"style":127052,"src":127430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[868,127432,127434],{"id":127433},"_622-类选择器","6.2.2 类选择器",[14,127436,127437],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,127439,127440],{},"②样例",[2212,127442],{"style":127052,"src":127443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,127445,127446,127447,127449],{},"③ ",[1043,127448,127284],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,127451,127452],{},"可以理解为给这个标签起了个名字，来表示；",[14,127454,127455],{},"长名称或词组可以使用横线来为选择器命名；",[14,127457,127458],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,127460,127461],{},"命名要有意义；",[2212,127463],{"style":127052,"src":127464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,127466,127467],{},"类选择器也可以指定特殊的元素p.center{}",[14,127469,127470],{},"p.center和.center都对",[26,127472,127474],{"className":127196,"code":127473,"language":127198,"meta":31,"style":31},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[33,127475,127476,127481,127490,127500],{"__ignoreMap":31},[36,127477,127478],{"class":38,"line":39},[36,127479,127480],{"class":42},"\u002F* 类选择器指定特殊元素 *\u002F\n",[36,127482,127483,127485,127488],{"class":38,"line":46},[36,127484,14],{"class":52042},[36,127486,127487],{"class":2713},".center",[36,127489,16316],{"class":49},[36,127491,127492,127494,127496,127498],{"class":38,"line":78},[36,127493,71268],{"class":60},[36,127495,52179],{"class":49},[36,127497,52334],{"class":60},[36,127499,2040],{"class":49},[36,127501,127502],{"class":38,"line":125},[36,127503,2315],{"class":49},[868,127505,127507],{"id":127506},"_623-多类名使用","6.2.3 多类名使用",[14,127509,127510],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[2212,127512],{"style":127052,"src":127513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,127515,127516],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[868,127518,127520],{"id":127519},"_624-id选择器","6.2.4 id选择器",[14,127522,127523],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,127525,127526],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[2212,127528],{"style":127052,"src":127529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,127531,127532],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,127534,127535],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[868,127537,127539],{"id":127538},"_625-通配符选择器","6.2.5 通配符选择器",[14,127541,127542],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,127544,127545],{},"* {",[14,127547,127548],{},"color=\"red\"}",[868,127550,127552],{"id":127551},"_626-总结","6.2.6 总结",[2212,127554],{"style":127052,"src":127555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[21,127557,127559],{"id":127558},"_63-css字体属性","6.3 css字体属性",[14,127561,127562],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[868,127564,127566],{"id":127565},"_631-字体系列","6.3.1 字体系列",[14,127568,127569],{},"font-family: '宋体';",[14,127571,127572,127574],{},[1043,127573,929],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[868,127576,127578],{"id":127577},"_632-字体大小","6.3.2 字体大小",[14,127580,127581],{},"font-size: 20px",[14,127583,127584,27218],{},[1043,127585,127284],{},[14,127587,127588],{},"①px（像素）大小是网页的最常用单位",[14,127590,127591],{},"②谷歌浏览器默认为16px",[14,127593,127594],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,127596,127597],{},"④可以给body指定整个页面的大小：会自动引用",[26,127599,127601],{"className":127196,"code":127600,"language":127198,"meta":31,"style":31},"body {\n  font-size: 16px;\n}\n",[33,127602,127603,127609,127621],{"__ignoreMap":31},[36,127604,127605,127607],{"class":38,"line":39},[36,127606,52542],{"class":52042},[36,127608,16316],{"class":49},[36,127610,127611,127613,127615,127617,127619],{"class":38,"line":46},[36,127612,71368],{"class":60},[36,127614,52179],{"class":49},[36,127616,1483],{"class":60},[36,127618,52234],{"class":53},[36,127620,2040],{"class":49},[36,127622,127623],{"class":38,"line":78},[36,127624,2315],{"class":49},[14,127626,127627],{},"⑤标题标签比较特殊，需要单独指定大小",[868,127629,127631],{"id":127630},"_633-字体粗细","6.3.3 字体粗细",[14,127633,127634],{},"font-weight: bold;",[14,127636,127637],{},"font-weight: 100；",[14,127639,127640,127642],{},[1043,127641,929],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,127644,127645],{},"font-weight= 400;",[14,127647,127648],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[868,127650,127652],{"id":127651},"_634-文字样式","6.3.4 文字样式",[14,127654,127655],{},"font-style: normal；",[14,127657,127658,27218],{},[1043,127659,127660],{},"属性值",[14,127662,127663],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127665,127666],{},"②italic：浏览器会显示斜体的字体样式",[2212,127668],{"style":127052,"src":127669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[868,127671,127673],{"id":127672},"_635-字体符合属性","6.3.5 字体符合属性",[2212,127675],{"style":127052,"src":127676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[2212,127678],{"style":127052,"src":127679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127681,127682],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127684,127685,27218],{},[1043,127686,127284],{},[14,127688,127689],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127691,127692],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127694,127695],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[21,127697,127699],{"id":127698},"_64-css-test文本属性","6.4 css test文本属性",[868,127701,127703],{"id":127702},"_641-文本颜色","6.4.1 文本颜色",[14,127705,127706],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[26,127708,127710],{"className":127196,"code":127709,"language":127198,"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,127711,127712,127717,127723,127733,127738,127743],{"__ignoreMap":31},[36,127713,127714],{"class":38,"line":39},[36,127715,127716],{"class":42},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[36,127718,127719,127721],{"class":38,"line":46},[36,127720,14],{"class":52042},[36,127722,16316],{"class":49},[36,127724,127725,127727,127729,127731],{"class":38,"line":78},[36,127726,71647],{"class":60},[36,127728,52179],{"class":49},[36,127730,58163],{"class":60},[36,127732,2040],{"class":49},[36,127734,127735],{"class":38,"line":125},[36,127736,127737],{"class":42},"  \u002F* color: #ff0000; *\u002F\n",[36,127739,127740],{"class":38,"line":131},[36,127741,127742],{"class":42},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[36,127744,127745],{"class":38,"line":396},[36,127746,2315],{"class":49},[2212,127748],{"style":127052,"src":127749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[868,127751,127753],{"id":127752},"_642-对齐文本","6.4.2 对齐文本",[14,127755,127756,127757,127760],{},"text-align属于用于设置元素内文本内容的 ",[1043,127758,127759],{},"水平对齐"," 方式",[14,127762,127763],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[868,127765,127767],{"id":127766},"_643-装饰文本","6.4.3 装饰文本",[14,127769,127770],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[26,127772,127774],{"className":127196,"code":127773,"language":127198,"meta":31,"style":31},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[33,127775,127776,127782,127792,127796,127802,127813],{"__ignoreMap":31},[36,127777,127778,127780],{"class":38,"line":39},[36,127779,50],{"class":52042},[36,127781,16316],{"class":49},[36,127783,127784,127786,127788,127790],{"class":38,"line":46},[36,127785,71244],{"class":60},[36,127787,52179],{"class":49},[36,127789,55479],{"class":60},[36,127791,2040],{"class":49},[36,127793,127794],{"class":38,"line":78},[36,127795,2315],{"class":49},[36,127797,127798,127800],{"class":38,"line":125},[36,127799,14],{"class":52042},[36,127801,16316],{"class":49},[36,127803,127804,127806,127808,127811],{"class":38,"line":131},[36,127805,71244],{"class":60},[36,127807,52179],{"class":49},[36,127809,127810],{"class":60},"underline",[36,127812,2040],{"class":49},[36,127814,127815],{"class":38,"line":396},[36,127816,2315],{"class":49},[868,127818,127820],{"id":127819},"_644-文本缩进","6.4.4 文本缩进",[14,127822,127823],{},"实现文本的第一行首行缩进自己指定的距离",[14,127825,127826],{},"20px往右边走；-20px往左边走",[14,127828,127829],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[26,127831,127833],{"className":127196,"code":127832,"language":127198,"meta":31,"style":31},"p {\n  text-indent: 2em;\n}\n",[33,127834,127835,127841,127854],{"__ignoreMap":31},[36,127836,127837,127839],{"class":38,"line":39},[36,127838,14],{"class":52042},[36,127840,16316],{"class":49},[36,127842,127843,127846,127848,127850,127852],{"class":38,"line":46},[36,127844,127845],{"class":60},"  text-indent",[36,127847,52179],{"class":49},[36,127849,181],{"class":60},[36,127851,24297],{"class":53},[36,127853,2040],{"class":49},[36,127855,127856],{"class":38,"line":78},[36,127857,2315],{"class":49},[868,127859,127861],{"id":127860},"_645-行间距","6.4.5 行间距",[14,127863,127864],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[26,127866,127868],{"className":127196,"code":127867,"language":127198,"meta":31,"style":31},"p {\n  line-height: 1.6;\n}\n",[33,127869,127870,127876,127888],{"__ignoreMap":31},[36,127871,127872,127874],{"class":38,"line":39},[36,127873,14],{"class":52042},[36,127875,16316],{"class":49},[36,127877,127878,127881,127883,127886],{"class":38,"line":46},[36,127879,127880],{"class":60},"  line-height",[36,127882,52179],{"class":49},[36,127884,127885],{"class":60},"1.6",[36,127887,2040],{"class":49},[36,127889,127890],{"class":38,"line":78},[36,127891,2315],{"class":49},[807,127893,127894],{},"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":46,"depth":46,"links":127896},[127897,127898,127906,127913],{"id":127378,"depth":46,"text":127379},{"id":127413,"depth":46,"text":127414,"children":127899},[127900,127901,127902,127903,127904,127905],{"id":127420,"depth":78,"text":127421},{"id":127433,"depth":78,"text":127434},{"id":127506,"depth":78,"text":127507},{"id":127519,"depth":78,"text":127520},{"id":127538,"depth":78,"text":127539},{"id":127551,"depth":78,"text":127552},{"id":127558,"depth":46,"text":127559,"children":127907},[127908,127909,127910,127911,127912],{"id":127565,"depth":78,"text":127566},{"id":127577,"depth":78,"text":127578},{"id":127630,"depth":78,"text":127631},{"id":127651,"depth":78,"text":127652},{"id":127672,"depth":78,"text":127673},{"id":127698,"depth":46,"text":127699,"children":127914},[127915,127916,127917,127918,127919],{"id":127702,"depth":78,"text":127703},{"id":127752,"depth":78,"text":127753},{"id":127766,"depth":78,"text":127767},{"id":127819,"depth":78,"text":127820},{"id":127860,"depth":78,"text":127861},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127370,"description":823},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127926,"title":127927,"body":127928,"description":823,"extension":824,"meta":128577,"navigation":193,"path":128578,"seo":128579,"stem":128580,"__hash__":128581},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127929,"toc":128558},[127930,127933,127937,127941,128001,128005,128015,128018,128021,128025,128050,128054,128057,128060,128063,128066,128069,128073,128076,128079,128121,128124,128150,128156,128159,128163,128167,128173,128176,128179,128182,128185,128188,128191,128236,128240,128243,128246,128250,128254,128283,128286,128291,128294,128297,128300,128303,128307,128311,128314,128316,128319,128323,128326,128330,128333,128336,128339,128343,128347,128353,128363,128366,128369,128372,128375,128378,128501,128509,128517,128555],[10,127931,127927],{"id":127932},"_7-css引入方式与选择器进阶",[21,127934,127936],{"id":127935},"_71-css引入方式","7.1 css引入方式",[868,127938,127940],{"id":127939},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[26,127942,127946],{"className":127943,"code":127944,"language":127945,"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,127947,127948,127956,127963,127975,127988,127993],{"__ignoreMap":31},[36,127949,127950,127952,127954],{"class":38,"line":39},[36,127951,1789],{"class":49},[36,127953,807],{"class":52042},[36,127955,52049],{"class":49},[36,127957,127958,127961],{"class":38,"line":46},[36,127959,127960],{"class":52042},"  h1",[36,127962,16316],{"class":49},[36,127964,127965,127968,127970,127973],{"class":38,"line":78},[36,127966,127967],{"class":60},"    color",[36,127969,52179],{"class":49},[36,127971,127972],{"class":60},"blue",[36,127974,2040],{"class":49},[36,127976,127977,127980,127982,127984,127986],{"class":38,"line":125},[36,127978,127979],{"class":60},"    font-size",[36,127981,52179],{"class":49},[36,127983,1680],{"class":60},[36,127985,52234],{"class":53},[36,127987,2040],{"class":49},[36,127989,127990],{"class":38,"line":131},[36,127991,127992],{"class":49},"  }\n",[36,127994,127995,127997,127999],{"class":38,"line":396},[36,127996,52527],{"class":49},[36,127998,807],{"class":52042},[36,128000,52049],{"class":49},[14,128002,128003,27218],{},[1043,128004,127284],{},[14,128006,77968,128007,128010,128011,128014],{},[33,128008,128009],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[33,128012,128013],{},"\u003Chead>","标签中",[14,128016,128017],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,128019,128020],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[868,128022,128024],{"id":128023},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[26,128026,128028],{"className":127943,"code":128027,"language":127945,"meta":31,"style":31},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[33,128029,128030],{"__ignoreMap":31},[36,128031,128032,128034,128036,128038,128040,128043,128046,128048],{"class":38,"line":39},[36,128033,1789],{"class":49},[36,128035,14],{"class":52042},[36,128037,63368],{"class":2713},[36,128039,54],{"class":49},[36,128041,128042],{"class":998},"\"color: red; font-size: 16px;\"",[36,128044,128045],{"class":49},">这是一个段落\u003C\u002F",[36,128047,14],{"class":52042},[36,128049,52049],{"class":49},[14,128051,128052,27218],{},[1043,128053,127284],{},[14,128055,128056],{},"①style其实就是标签的属性",[14,128058,128059],{},"②在双引号中间，写法要符合css规范",[14,128061,128062],{},"③可以控制当前的标签设置样式",[14,128064,128065],{},"④书写繁琐，简单时才用",[14,128067,128068],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[868,128070,128072],{"id":128071},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,128074,128075],{},"使用最多，单独建一个css文件，然后html引用",[14,128077,128078],{},"①css文件部分： style.css",[26,128080,128082],{"className":127196,"code":128081,"language":127198,"meta":31,"style":31},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[33,128083,128084,128089,128095,128105,128117],{"__ignoreMap":31},[36,128085,128086],{"class":38,"line":39},[36,128087,128088],{"class":42},"\u002F* style.css *\u002F\n",[36,128090,128091,128093],{"class":38,"line":46},[36,128092,10],{"class":52042},[36,128094,16316],{"class":49},[36,128096,128097,128099,128101,128103],{"class":38,"line":78},[36,128098,71647],{"class":60},[36,128100,52179],{"class":49},[36,128102,127972],{"class":60},[36,128104,2040],{"class":49},[36,128106,128107,128109,128111,128113,128115],{"class":38,"line":125},[36,128108,71368],{"class":60},[36,128110,52179],{"class":49},[36,128112,1680],{"class":60},[36,128114,52234],{"class":53},[36,128116,2040],{"class":49},[36,128118,128119],{"class":38,"line":131},[36,128120,2315],{"class":49},[14,128122,128123],{},"②html部分",[26,128125,128127],{"className":127943,"code":128126,"language":127945,"meta":31,"style":31},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[33,128128,128129],{"__ignoreMap":31},[36,128130,128131,128133,128135,128137,128139,128141,128143,128145,128148],{"class":38,"line":39},[36,128132,1789],{"class":49},[36,128134,69747],{"class":52042},[36,128136,69750],{"class":2713},[36,128138,54],{"class":49},[36,128140,69755],{"class":998},[36,128142,61799],{"class":2713},[36,128144,54],{"class":49},[36,128146,128147],{"class":998},"\"style.css\"",[36,128149,52049],{"class":49},[14,128151,128152,128155],{},[33,128153,128154],{},"\u003Chr>","水平线标签（但是不常用！）",[14,128157,128158],{},"ctrl+0回到页面原来大小",[21,128160,128162],{"id":128161},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[868,128164,128166],{"id":128165},"_721-快速生成html","7.2.1 快速生成html",[14,128168,128169,128170],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[33,128171,128172],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,128174,128175],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,128177,128178],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,128180,128181],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,128183,128184],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,128186,128187],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,128189,128190],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[26,128192,128194],{"className":127943,"code":128193,"language":127945,"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,128195,128196,128201,128206,128211,128216,128221,128226,128231],{"__ignoreMap":31},[36,128197,128198],{"class":38,"line":39},[36,128199,128200],{"class":42},"\u003C!-- Emmet 语法示例 -->\n",[36,128202,128203],{"class":38,"line":46},[36,128204,128205],{"class":42},"\u003C!-- div*3        → 生成3个div -->\n",[36,128207,128208],{"class":38,"line":78},[36,128209,128210],{"class":42},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[36,128212,128213],{"class":38,"line":125},[36,128214,128215],{"class":42},"\u003C!-- div+p        → 兄弟div和p -->\n",[36,128217,128218],{"class":38,"line":131},[36,128219,128220],{"class":42},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[36,128222,128223],{"class":38,"line":396},[36,128224,128225],{"class":42},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[36,128227,128228],{"class":38,"line":407},[36,128229,128230],{"class":42},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[36,128232,128233],{"class":38,"line":2061},[36,128234,128235],{"class":42},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[868,128237,128239],{"id":128238},"_722-快速生成css","7.2.2 快速生成css",[14,128241,128242],{},"简写开头",[14,128244,128245],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[21,128247,128249],{"id":128248},"_73-css复合选择器","7.3 css复合选择器",[868,128251,128253],{"id":128252},"_731-后代选择器","7.3.1 后代选择器",[26,128255,128257],{"className":127196,"code":128256,"language":127198,"meta":31,"style":31},".parent .child {\n  color: blue;\n}\n",[33,128258,128259,128269,128279],{"__ignoreMap":31},[36,128260,128261,128264,128267],{"class":38,"line":39},[36,128262,128263],{"class":2713},".parent",[36,128265,128266],{"class":2713}," .child",[36,128268,16316],{"class":49},[36,128270,128271,128273,128275,128277],{"class":38,"line":46},[36,128272,71647],{"class":60},[36,128274,52179],{"class":49},[36,128276,127972],{"class":60},[36,128278,2040],{"class":49},[36,128280,128281],{"class":38,"line":78},[36,128282,2315],{"class":49},[14,128284,128285],{},"元素1 元素2 {样式声明}",[14,128287,128288],{},[1043,128289,128290],{},"注意点:",[14,128292,128293],{},"①元素1和元素2中间用空格隔开",[14,128295,128296],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,128298,128299],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,128301,128302],{},"④元素1和元素2可以是任意基础选择器",[868,128304,128306],{"id":128305},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,128308,128309],{},[1043,128310,128290],{},[14,128312,128313],{},"①元素1和元素2中间用大于号隔开",[14,128315,128296],{},[14,128317,128318],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[868,128320,128322],{"id":128321},"_733-并集选择器","7.3.3 并集选择器",[14,128324,128325],{},"元素1，元素2 {样式声明}",[14,128327,128328],{},[1043,128329,128290],{},[14,128331,128332],{},"①元素1和元素2中间用逗号隔开",[14,128334,128335],{},"②逗号可以理解为和的意思",[14,128337,128338],{},"③并集选择器通常用于集体声明",[868,128340,128342],{"id":128341},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,128344,128345],{},[1043,128346,128290],{},[14,128348,128349,128350,128352],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69747,128351],{},"－:visited－:hover－:active。",[14,128354,128355,128356,128359,128360,26485],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128357,128358],"hover",{}," 、 ",[128361,128362],"first-child",{},[14,128364,128365],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,128367,128368],{},"link对没访问的进行设置",[14,128370,128371],{},"vistied对已访问的进行改变",[14,128373,128374],{},"hover鼠标经过就会变",[14,128376,128377],{},"active常按(点)就会变",[26,128379,128381],{"className":127196,"code":128380,"language":127198,"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,128382,128383,128388,128397,128407,128417,128421,128430,128441,128445,128453,128463,128473,128477,128486,128497],{"__ignoreMap":31},[36,128384,128385],{"class":38,"line":39},[36,128386,128387],{"class":42},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[36,128389,128390,128392,128395],{"class":38,"line":46},[36,128391,50],{"class":52042},[36,128393,128394],{"class":2713},":link",[36,128396,16316],{"class":49},[36,128398,128399,128401,128403,128405],{"class":38,"line":78},[36,128400,71647],{"class":60},[36,128402,52179],{"class":49},[36,128404,63111],{"class":60},[36,128406,2040],{"class":49},[36,128408,128409,128411,128413,128415],{"class":38,"line":125},[36,128410,71244],{"class":60},[36,128412,52179],{"class":49},[36,128414,55479],{"class":60},[36,128416,2040],{"class":49},[36,128418,128419],{"class":38,"line":131},[36,128420,2315],{"class":49},[36,128422,128423,128425,128428],{"class":38,"line":396},[36,128424,50],{"class":52042},[36,128426,128427],{"class":2713},":visited",[36,128429,16316],{"class":49},[36,128431,128432,128434,128436,128439],{"class":38,"line":407},[36,128433,71647],{"class":60},[36,128435,52179],{"class":49},[36,128437,128438],{"class":60},"purple",[36,128440,2040],{"class":49},[36,128442,128443],{"class":38,"line":2061},[36,128444,2315],{"class":49},[36,128446,128447,128449,128451],{"class":38,"line":2067},[36,128448,50],{"class":52042},[36,128450,61682],{"class":2713},[36,128452,16316],{"class":49},[36,128454,128455,128457,128459,128461],{"class":38,"line":2079},[36,128456,71647],{"class":60},[36,128458,52179],{"class":49},[36,128460,55631],{"class":60},[36,128462,2040],{"class":49},[36,128464,128465,128467,128469,128471],{"class":38,"line":2362},[36,128466,71244],{"class":60},[36,128468,52179],{"class":49},[36,128470,127810],{"class":60},[36,128472,2040],{"class":49},[36,128474,128475],{"class":38,"line":2367},[36,128476,2315],{"class":49},[36,128478,128479,128481,128484],{"class":38,"line":2373},[36,128480,50],{"class":52042},[36,128482,128483],{"class":2713},":active",[36,128485,16316],{"class":49},[36,128487,128488,128490,128492,128495],{"class":38,"line":2378},[36,128489,71647],{"class":60},[36,128491,52179],{"class":49},[36,128493,128494],{"class":60},"green",[36,128496,2040],{"class":49},[36,128498,128499],{"class":38,"line":2392},[36,128500,2315],{"class":49},[868,128502,128504,128505,128508],{"id":128503},"_735-伪类选择器","7.3.5 ",[128506,128507],"focus",{},"伪类选择器",[14,128510,128511,128513,128514,128516],{},[128506,128512],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[33,128515,127257],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[26,128518,128520],{"className":127196,"code":128519,"language":127198,"meta":31,"style":31},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[33,128521,128522,128530,128541,128551],{"__ignoreMap":31},[36,128523,128524,128526,128528],{"class":38,"line":39},[36,128525,54563],{"class":52042},[36,128527,62642],{"class":2713},[36,128529,16316],{"class":49},[36,128531,128532,128535,128537,128539],{"class":38,"line":46},[36,128533,128534],{"class":60},"  border-color",[36,128536,52179],{"class":49},[36,128538,55631],{"class":60},[36,128540,2040],{"class":49},[36,128542,128543,128545,128547,128549],{"class":38,"line":78},[36,128544,71540],{"class":60},[36,128546,52179],{"class":49},[36,128548,55479],{"class":60},[36,128550,2040],{"class":49},[36,128552,128553],{"class":38,"line":125},[36,128554,2315],{"class":49},[807,128556,128557],{},"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":46,"depth":46,"links":128559},[128560,128565,128569],{"id":127935,"depth":46,"text":127936,"children":128561},[128562,128563,128564],{"id":127939,"depth":78,"text":127940},{"id":128023,"depth":78,"text":128024},{"id":128071,"depth":78,"text":128072},{"id":128161,"depth":46,"text":128162,"children":128566},[128567,128568],{"id":128165,"depth":78,"text":128166},{"id":128238,"depth":78,"text":128239},{"id":128248,"depth":46,"text":128249,"children":128570},[128571,128572,128573,128574,128575],{"id":128252,"depth":78,"text":128253},{"id":128305,"depth":78,"text":128306},{"id":128321,"depth":78,"text":128322},{"id":128341,"depth":78,"text":128342},{"id":128503,"depth":78,"text":128576},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127927,"description":823},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128583,"title":128584,"body":128585,"description":823,"extension":824,"meta":130508,"navigation":193,"path":130509,"seo":130510,"stem":130511,"__hash__":130512},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128586,"toc":130482},[128587,128590,128594,128603,128607,128633,128638,128641,128644,128647,128650,128654,128657,128667,128675,128679,128714,128719,128722,128725,128728,128731,128735,128738,128747,128751,128764,128769,128772,128775,128778,128782,128785,128789,128792,128847,128850,128881,128884,128938,128942,128945,129111,129234,129237,129240,129243,129246,129250,129253,129257,129260,129263,129267,129270,129301,129328,129356,129359,129363,129389,129432,129436,129530,129533,129560,129563,129566,129569,129572,129575,129578,129581,129584,129587,129591,129648,129675,129679,129727,129731,129772,129774,129777,129780,129783,129786,129790,129882,129885,129888,129891,129895,130018,130219,130223,130227,130230,130233,130236,130240,130243,130246,130271,130274,130277,130280,130283,130286,130290,130298,130360,130363,130421,130424,130427,130430,130433,130436,130439,130442,130479],[10,128588,128584],{"id":128589},"_8-css显示模式与背景特性",[21,128591,128593],{"id":128592},"_81-css元素显示模式","8.1 css元素显示模式",[14,128595,128596,128597,128599,128600,128602],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[33,128598,126807],{},"自己占一行，比如一行可以放多个",[33,128601,126810],{},"，HTML 元素一般分为块元素和行内元素两种类型",[868,128604,128606],{"id":128605},"_811-块元素","8.1.1 块元素",[14,128608,128609,128610,128612,128613,1104,128616,1104,128618,1104,128620,1104,128623,1104,128626,128629,128630,128632],{},"常见的块元素有",[33,128611,126711],{},"~",[33,128614,128615],{},"\u003Ch6>",[33,128617,126737],{},[33,128619,126807],{},[33,128621,128622],{},"\u003Cul>",[33,128624,128625],{},"\u003Col>",[33,128627,128628],{},"\u003Cli>","等，其中 ",[33,128631,126807],{}," 标签是最典型的块元素",[14,128634,128635],{},[1043,128636,128637],{},"块级元素的特点：",[14,128639,128640],{},"① 比较霸道，自己独占一行。",[14,128642,128643],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,128645,128646],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,128648,128649],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,128651,128652],{},[1043,128653,929],{},[14,128655,128656],{},"①文字类的元素内不能使用块级元素",[14,128658,77991,128659,128661,128662,128664,128665],{},[33,128660,126737],{}," 标签主要用于存放文字，因此 ",[33,128663,126737],{}," 里面不能放块级元素，特别是不能放",[33,128666,126807],{},[14,128668,128669,128670,128612,128672,128674],{},"⑥同理， ",[33,128671,126711],{},[33,128673,128615],{},"等都是文字类块级标签，里面也不能放其他块级元素",[868,128676,128678],{"id":128677},"_812-行内元素","8.1.2 行内元素",[14,128680,128681,128682,1104,128684,1104,128687,1104,128690,1104,128693,1104,128696,1104,128699,1104,128702,1104,128705,1104,128708,128710,128711,128713],{},"常见的行内元素有 ",[33,128683,126969],{},[33,128685,128686],{},"\u003Cstrong>",[33,128688,128689],{},"\u003Cb>",[33,128691,128692],{},"\u003Cem>",[33,128694,128695],{},"\u003Ci>",[33,128697,128698],{},"\u003Cdel>",[33,128700,128701],{},"\u003Cs>",[33,128703,128704],{},"\u003Cins>",[33,128706,128707],{},"\u003Cu>",[33,128709,126810],{}," 等，其中 ",[33,128712,126810],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128715,128716],{},[1043,128717,128718],{},"特点：",[14,128720,128721],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128723,128724],{},"② 高、宽直接设置是无效的。",[14,128726,128727],{},"③ 默认宽度就是它本身内容的宽度。",[14,128729,128730],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128732,128733],{},[1043,128734,929],{},[14,128736,128737],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128739,128740,128741,128743,128744,128746],{},"②特殊情况链接 ",[33,128742,126969],{}," 里面可以放块级元素，但是给 ",[33,128745,126969],{}," 转换一下块级模式最安全",[868,128748,128750],{"id":128749},"_813-行内块元素","8.1.3 行内块元素",[14,128752,128753,128754,1104,128757,1104,128760,128763],{},"在行内元素中有几个特殊的标签 —— ",[33,128755,128756],{},"\u003Cimg \u002F>",[33,128758,128759],{},"\u003Cinput \u002F>",[33,128761,128762],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128765,128766],{},[1043,128767,128768],{},"行内块元素的特点：",[14,128770,128771],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128773,128774],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128776,128777],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[868,128779,128781],{"id":128780},"_814-总结","8.1.4 总结",[2212,128783],{"style":127052,"src":128784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[868,128786,128788],{"id":128787},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128790,128791],{},"①转换为块元素：display:block;",[26,128793,128795],{"className":127196,"code":128794,"language":127198,"meta":31,"style":31},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[33,128796,128797,128802,128808,128819,128831,128843],{"__ignoreMap":31},[36,128798,128799],{"class":38,"line":39},[36,128800,128801],{"class":42},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[36,128803,128804,128806],{"class":38,"line":46},[36,128805,50],{"class":52042},[36,128807,16316],{"class":49},[36,128809,128810,128813,128815,128817],{"class":38,"line":78},[36,128811,128812],{"class":60},"  display",[36,128814,52179],{"class":49},[36,128816,61611],{"class":60},[36,128818,2040],{"class":49},[36,128820,128821,128823,128825,128827,128829],{"class":38,"line":125},[36,128822,71310],{"class":60},[36,128824,52179],{"class":49},[36,128826,67],{"class":60},[36,128828,52234],{"class":53},[36,128830,2040],{"class":49},[36,128832,128833,128835,128837,128839,128841],{"class":38,"line":131},[36,128834,71530],{"class":60},[36,128836,52179],{"class":49},[36,128838,1286],{"class":60},[36,128840,52234],{"class":53},[36,128842,2040],{"class":49},[36,128844,128845],{"class":38,"line":396},[36,128846,2315],{"class":49},[14,128848,128849],{},"②转换为行内元素：display:inline;",[26,128851,128853],{"className":127196,"code":128852,"language":127198,"meta":31,"style":31},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[33,128854,128855,128860,128866,128877],{"__ignoreMap":31},[36,128856,128857],{"class":38,"line":39},[36,128858,128859],{"class":42},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[36,128861,128862,128864],{"class":38,"line":46},[36,128863,52353],{"class":52042},[36,128865,16316],{"class":49},[36,128867,128868,128870,128872,128875],{"class":38,"line":78},[36,128869,128812],{"class":60},[36,128871,52179],{"class":49},[36,128873,128874],{"class":60},"inline",[36,128876,2040],{"class":49},[36,128878,128879],{"class":38,"line":125},[36,128880,2315],{"class":49},[14,128882,128883],{},"③转换为行内块：display:inline-block;",[26,128885,128887],{"className":127196,"code":128886,"language":127198,"meta":31,"style":31},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[33,128888,128889,128894,128900,128910,128922,128934],{"__ignoreMap":31},[36,128890,128891],{"class":38,"line":39},[36,128892,128893],{"class":42},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[36,128895,128896,128898],{"class":38,"line":46},[36,128897,36],{"class":52042},[36,128899,16316],{"class":49},[36,128901,128902,128904,128906,128908],{"class":38,"line":78},[36,128903,128812],{"class":60},[36,128905,52179],{"class":49},[36,128907,73125],{"class":60},[36,128909,2040],{"class":49},[36,128911,128912,128914,128916,128918,128920],{"class":38,"line":125},[36,128913,71310],{"class":60},[36,128915,52179],{"class":49},[36,128917,1494],{"class":60},[36,128919,52234],{"class":53},[36,128921,2040],{"class":49},[36,128923,128924,128926,128928,128930,128932],{"class":38,"line":131},[36,128925,71530],{"class":60},[36,128927,52179],{"class":49},[36,128929,1830],{"class":60},[36,128931,52234],{"class":53},[36,128933,2040],{"class":49},[36,128935,128936],{"class":38,"line":396},[36,128937,2315],{"class":49},[868,128939,128941],{"id":128940},"_816-小米侧边栏","8.1.6 小米侧边栏",[2212,128943],{"style":127052,"src":128944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[26,128946,128948],{"className":127943,"code":128947,"language":127945,"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,128949,128950,128955,128970,128989,129008,129027,129046,129065,129084,129103],{"__ignoreMap":31},[36,128951,128952],{"class":38,"line":39},[36,128953,128954],{"class":42},"\u003C!-- 小米侧边栏案例 -->\n",[36,128956,128957,128959,128961,128963,128965,128968],{"class":38,"line":46},[36,128958,1789],{"class":49},[36,128960,52353],{"class":52042},[36,128962,54228],{"class":2713},[36,128964,54],{"class":49},[36,128966,128967],{"class":998},"\"sidebar\"",[36,128969,52049],{"class":49},[36,128971,128972,128974,128976,128978,128980,128982,128985,128987],{"class":38,"line":78},[36,128973,52886],{"class":49},[36,128975,50],{"class":52042},[36,128977,61799],{"class":2713},[36,128979,54],{"class":49},[36,128981,61804],{"class":998},[36,128983,128984],{"class":49},">手机 电话卡\u003C\u002F",[36,128986,50],{"class":52042},[36,128988,52049],{"class":49},[36,128990,128991,128993,128995,128997,128999,129001,129004,129006],{"class":38,"line":125},[36,128992,52886],{"class":49},[36,128994,50],{"class":52042},[36,128996,61799],{"class":2713},[36,128998,54],{"class":49},[36,129000,61804],{"class":998},[36,129002,129003],{"class":49},">电视 盒子\u003C\u002F",[36,129005,50],{"class":52042},[36,129007,52049],{"class":49},[36,129009,129010,129012,129014,129016,129018,129020,129023,129025],{"class":38,"line":131},[36,129011,52886],{"class":49},[36,129013,50],{"class":52042},[36,129015,61799],{"class":2713},[36,129017,54],{"class":49},[36,129019,61804],{"class":998},[36,129021,129022],{"class":49},">笔记本 平板\u003C\u002F",[36,129024,50],{"class":52042},[36,129026,52049],{"class":49},[36,129028,129029,129031,129033,129035,129037,129039,129042,129044],{"class":38,"line":396},[36,129030,52886],{"class":49},[36,129032,50],{"class":52042},[36,129034,61799],{"class":2713},[36,129036,54],{"class":49},[36,129038,61804],{"class":998},[36,129040,129041],{"class":49},">出行 穿戴\u003C\u002F",[36,129043,50],{"class":52042},[36,129045,52049],{"class":49},[36,129047,129048,129050,129052,129054,129056,129058,129061,129063],{"class":38,"line":407},[36,129049,52886],{"class":49},[36,129051,50],{"class":52042},[36,129053,61799],{"class":2713},[36,129055,54],{"class":49},[36,129057,61804],{"class":998},[36,129059,129060],{"class":49},">智能 路由器\u003C\u002F",[36,129062,50],{"class":52042},[36,129064,52049],{"class":49},[36,129066,129067,129069,129071,129073,129075,129077,129080,129082],{"class":38,"line":2061},[36,129068,52886],{"class":49},[36,129070,50],{"class":52042},[36,129072,61799],{"class":2713},[36,129074,54],{"class":49},[36,129076,61804],{"class":998},[36,129078,129079],{"class":49},">健康 儿童\u003C\u002F",[36,129081,50],{"class":52042},[36,129083,52049],{"class":49},[36,129085,129086,129088,129090,129092,129094,129096,129099,129101],{"class":38,"line":2067},[36,129087,52886],{"class":49},[36,129089,50],{"class":52042},[36,129091,61799],{"class":2713},[36,129093,54],{"class":49},[36,129095,61804],{"class":998},[36,129097,129098],{"class":49},">耳机 音响\u003C\u002F",[36,129100,50],{"class":52042},[36,129102,52049],{"class":49},[36,129104,129105,129107,129109],{"class":38,"line":2079},[36,129106,52527],{"class":49},[36,129108,52353],{"class":52042},[36,129110,52049],{"class":49},[26,129112,129114],{"className":127196,"code":129113,"language":127198,"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,129115,129116,129125,129135,129148,129160,129172,129184,129194,129205,129209,129219,129230],{"__ignoreMap":31},[36,129117,129118,129121,129123],{"class":38,"line":39},[36,129119,129120],{"class":2713},".sidebar",[36,129122,2148],{"class":52042},[36,129124,16316],{"class":49},[36,129126,129127,129129,129131,129133],{"class":38,"line":46},[36,129128,128812],{"class":60},[36,129130,52179],{"class":49},[36,129132,61611],{"class":60},[36,129134,2040],{"class":49},[36,129136,129137,129139,129141,129144,129146],{"class":38,"line":78},[36,129138,71310],{"class":60},[36,129140,52179],{"class":49},[36,129142,129143],{"class":60},"234",[36,129145,52234],{"class":53},[36,129147,2040],{"class":49},[36,129149,129150,129152,129154,129156,129158],{"class":38,"line":125},[36,129151,71530],{"class":60},[36,129153,52179],{"class":49},[36,129155,1336],{"class":60},[36,129157,52234],{"class":53},[36,129159,2040],{"class":49},[36,129161,129162,129164,129166,129168,129170],{"class":38,"line":131},[36,129163,127880],{"class":60},[36,129165,52179],{"class":49},[36,129167,1336],{"class":60},[36,129169,52234],{"class":53},[36,129171,2040],{"class":49},[36,129173,129174,129176,129178,129180,129182],{"class":38,"line":396},[36,129175,71565],{"class":60},[36,129177,52179],{"class":49},[36,129179,1830],{"class":60},[36,129181,52234],{"class":53},[36,129183,2040],{"class":49},[36,129185,129186,129188,129190,129192],{"class":38,"line":407},[36,129187,71647],{"class":60},[36,129189,52179],{"class":49},[36,129191,61584],{"class":60},[36,129193,2040],{"class":49},[36,129195,129196,129198,129200,129203],{"class":38,"line":2061},[36,129197,71620],{"class":60},[36,129199,52179],{"class":49},[36,129201,129202],{"class":60},"#55585a",[36,129204,2040],{"class":49},[36,129206,129207],{"class":38,"line":2067},[36,129208,2315],{"class":49},[36,129210,129211,129213,129215,129217],{"class":38,"line":2079},[36,129212,129120],{"class":2713},[36,129214,2148],{"class":52042},[36,129216,61682],{"class":2713},[36,129218,16316],{"class":49},[36,129220,129221,129223,129225,129228],{"class":38,"line":2362},[36,129222,71620],{"class":60},[36,129224,52179],{"class":49},[36,129226,129227],{"class":60},"#ff6700",[36,129229,2040],{"class":49},[36,129231,129232],{"class":38,"line":2367},[36,129233,2315],{"class":49},[2212,129235],{"style":127052,"src":129236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,129238,129239],{},"行高=盒子高度：实现文字的垂直居中",[14,129241,129242],{},"原理讲解：",[2212,129244],{"style":127052,"src":129245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[21,129247,129249],{"id":129248},"_82-css背景","8.2 css背景",[14,129251,129252],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[868,129254,129256],{"id":129255},"_821-背景颜色","8.2.1 背景颜色",[14,129258,129259],{},"background-color:颜色值;",[14,129261,129262],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[868,129264,129266],{"id":129265},"_822-背景图片","8.2.2 背景图片",[14,129268,129269],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[26,129271,129273],{"className":127196,"code":129272,"language":127198,"meta":31,"style":31},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[33,129274,129275,129281,129297],{"__ignoreMap":31},[36,129276,129277,129279],{"class":38,"line":39},[36,129278,52353],{"class":52042},[36,129280,16316],{"class":49},[36,129282,129283,129286,129288,129290,129292,129295],{"class":38,"line":46},[36,129284,129285],{"class":60},"  background-image",[36,129287,52179],{"class":49},[36,129289,62468],{"class":60},[36,129291,901],{"class":49},[36,129293,129294],{"class":416},"images\u002Fbg.png",[36,129296,3468],{"class":49},[36,129298,129299],{"class":38,"line":78},[36,129300,2315],{"class":49},[1031,129302,129303,129312],{},[1034,129304,129305],{},[1037,129306,129307,129310],{},[1040,129308,129309],{"align":24480},"参数值",[1040,129311,103340],{"align":24480},[1078,129313,129314,129321],{},[1037,129315,129316,129318],{},[1083,129317,55479],{"align":24480},[1083,129319,129320],{"align":24480},"无背景图（默认的）",[1037,129322,129323,129325],{},[1083,129324,62468],{"align":24480},[1083,129326,129327],{"align":24480},"使用绝对或相对地址指定背景图像",[26,129329,129330],{"className":127196,"code":129272,"language":127198,"meta":31,"style":31},[33,129331,129332,129338,129352],{"__ignoreMap":31},[36,129333,129334,129336],{"class":38,"line":39},[36,129335,52353],{"class":52042},[36,129337,16316],{"class":49},[36,129339,129340,129342,129344,129346,129348,129350],{"class":38,"line":46},[36,129341,129285],{"class":60},[36,129343,52179],{"class":49},[36,129345,62468],{"class":60},[36,129347,901],{"class":49},[36,129349,129294],{"class":416},[36,129351,3468],{"class":49},[36,129353,129354],{"class":38,"line":78},[36,129355,2315],{"class":49},[14,129357,129358],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[868,129360,129362],{"id":129361},"_823-背景平铺","8.2.3 背景平铺",[26,129364,129366],{"className":127196,"code":129365,"language":127198,"meta":31,"style":31},"div {\n  background-repeat: no-repeat;\n}\n",[33,129367,129368,129374,129385],{"__ignoreMap":31},[36,129369,129370,129372],{"class":38,"line":39},[36,129371,52353],{"class":52042},[36,129373,16316],{"class":49},[36,129375,129376,129379,129381,129383],{"class":38,"line":46},[36,129377,129378],{"class":60},"  background-repeat",[36,129380,52179],{"class":49},[36,129382,62478],{"class":60},[36,129384,2040],{"class":49},[36,129386,129387],{"class":38,"line":78},[36,129388,2315],{"class":49},[1031,129390,129391,129399],{},[1034,129392,129393],{},[1037,129394,129395,129397],{},[1040,129396,129309],{"align":24480},[1040,129398,103340],{"align":24480},[1078,129400,129401,129409,129416,129424],{},[1037,129402,129403,129406],{},[1083,129404,129405],{"align":24480},"repeat",[1083,129407,129408],{"align":24480},"背景图像在纵向和横向上平铺（默认的）",[1037,129410,129411,129413],{},[1083,129412,62478],{"align":24480},[1083,129414,129415],{"align":24480},"背景图像不平铺",[1037,129417,129418,129421],{},[1083,129419,129420],{"align":24480},"repeat-x",[1083,129422,129423],{"align":24480},"背景图像在横向上平铺",[1037,129425,129426,129429],{},[1083,129427,129428],{"align":24480},"repeat-y",[1083,129430,129431],{"align":24480},"背景图像在纵向平铺",[868,129433,129435],{"id":129434},"_824-背景图片位置","8.2.4 背景图片位置",[26,129437,129439],{"className":127196,"code":129438,"language":127198,"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,129440,129441,129446,129452,129466,129470,129475,129481,129497,129501,129506,129512,129526],{"__ignoreMap":31},[36,129442,129443],{"class":38,"line":39},[36,129444,129445],{"class":42},"\u002F* 方位名词 *\u002F\n",[36,129447,129448,129450],{"class":38,"line":46},[36,129449,52353],{"class":52042},[36,129451,16316],{"class":49},[36,129453,129454,129457,129459,129461,129464],{"class":38,"line":78},[36,129455,129456],{"class":60},"  background-position",[36,129458,52179],{"class":49},[36,129460,52334],{"class":60},[36,129462,129463],{"class":60}," top",[36,129465,2040],{"class":49},[36,129467,129468],{"class":38,"line":125},[36,129469,2315],{"class":49},[36,129471,129472],{"class":38,"line":131},[36,129473,129474],{"class":42},"\u002F* 精确单位 *\u002F\n",[36,129476,129477,129479],{"class":38,"line":396},[36,129478,52353],{"class":52042},[36,129480,16316],{"class":49},[36,129482,129483,129485,129487,129489,129491,129493,129495],{"class":38,"line":407},[36,129484,129456],{"class":60},[36,129486,52179],{"class":49},[36,129488,72],{"class":60},[36,129490,52234],{"class":53},[36,129492,58246],{"class":60},[36,129494,52234],{"class":53},[36,129496,2040],{"class":49},[36,129498,129499],{"class":38,"line":2061},[36,129500,2315],{"class":49},[36,129502,129503],{"class":38,"line":2067},[36,129504,129505],{"class":42},"\u002F* 混合单位 *\u002F\n",[36,129507,129508,129510],{"class":38,"line":2079},[36,129509,52353],{"class":52042},[36,129511,16316],{"class":49},[36,129513,129514,129516,129518,129520,129522,129524],{"class":38,"line":2362},[36,129515,129456],{"class":60},[36,129517,52179],{"class":49},[36,129519,72],{"class":60},[36,129521,52234],{"class":53},[36,129523,17888],{"class":60},[36,129525,2040],{"class":49},[36,129527,129528],{"class":38,"line":2367},[36,129529,2315],{"class":49},[14,129531,129532],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[1031,129534,129535,129543],{},[1034,129536,129537],{},[1037,129538,129539,129541],{},[1040,129540,129309],{"align":24480},[1040,129542,26614],{"align":24480},[1078,129544,129545,129552],{},[1037,129546,129547,129549],{},[1083,129548,52710],{"align":24480},[1083,129550,129551],{"align":24480},"百分数|由浮点数和单位标识符组成的长度值",[1037,129553,129554,129557],{},[1083,129555,129556],{"align":24480},"position",[1083,129558,129559],{"align":24480},"top|center|bottom|left|center|right 方位名词",[14,129561,129562],{},"其他说明：",[14,129564,129565],{},"①参数是方位名词",[14,129567,129568],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,129570,129571],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,129573,129574],{},"②参数是精确单位",[14,129576,129577],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,129579,129580],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,129582,129583],{},"③参数是混合单位",[14,129585,129586],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[868,129588,129590],{"id":129589},"_825-背景图片固定","8.2.5 背景图片固定",[26,129592,129594],{"className":127196,"code":129593,"language":127198,"meta":31,"style":31},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[33,129595,129596,129601,129607,129619,129623,129628,129634,129644],{"__ignoreMap":31},[36,129597,129598],{"class":38,"line":39},[36,129599,129600],{"class":42},"\u002F* 背景滚动（默认） *\u002F\n",[36,129602,129603,129605],{"class":38,"line":46},[36,129604,52353],{"class":52042},[36,129606,16316],{"class":49},[36,129608,129609,129612,129614,129617],{"class":38,"line":78},[36,129610,129611],{"class":60},"  background-attachment",[36,129613,52179],{"class":49},[36,129615,129616],{"class":60},"scroll",[36,129618,2040],{"class":49},[36,129620,129621],{"class":38,"line":125},[36,129622,2315],{"class":49},[36,129624,129625],{"class":38,"line":131},[36,129626,129627],{"class":42},"\u002F* 背景固定 *\u002F\n",[36,129629,129630,129632],{"class":38,"line":396},[36,129631,52353],{"class":52042},[36,129633,16316],{"class":49},[36,129635,129636,129638,129640,129642],{"class":38,"line":407},[36,129637,129611],{"class":60},[36,129639,52179],{"class":49},[36,129641,86975],{"class":60},[36,129643,2040],{"class":49},[36,129645,129646],{"class":38,"line":2061},[36,129647,2315],{"class":49},[1031,129649,129650,129659],{},[1034,129651,129652],{},[1037,129653,129654,129657],{},[1040,129655,129656],{"align":24480},"参数",[1040,129658,103340],{"align":24480},[1078,129660,129661,129668],{},[1037,129662,129663,129665],{},[1083,129664,129616],{"align":24480},[1083,129666,129667],{"align":24480},"背景图像是随对象内容滚动",[1037,129669,129670,129672],{},[1083,129671,86975],{"align":24480},[1083,129673,129674],{"align":24480},"背景图像固定",[868,129676,129678],{"id":129677},"_826-背景样式合写","8.2.6 背景样式合写",[26,129680,129682],{"className":127196,"code":129681,"language":127198,"meta":31,"style":31},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[33,129683,129684,129689,129695,129723],{"__ignoreMap":31},[36,129685,129686],{"class":38,"line":39},[36,129687,129688],{"class":42},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[36,129690,129691,129693],{"class":38,"line":46},[36,129692,52353],{"class":52042},[36,129694,16316],{"class":49},[36,129696,129697,129699,129701,129703,129706,129708,129710,129712,129714,129717,129719,129721],{"class":38,"line":78},[36,129698,71353],{"class":60},[36,129700,52179],{"class":49},[36,129702,61584],{"class":60},[36,129704,129705],{"class":60}," url",[36,129707,901],{"class":49},[36,129709,129294],{"class":416},[36,129711,14458],{"class":49},[36,129713,62478],{"class":60},[36,129715,129716],{"class":60}," fixed",[36,129718,17888],{"class":60},[36,129720,129463],{"class":60},[36,129722,2040],{"class":49},[36,129724,129725],{"class":38,"line":125},[36,129726,2315],{"class":49},[868,129728,129730],{"id":129729},"_827-背景色半透明","8.2.7 背景色半透明",[26,129732,129734],{"className":127196,"code":129733,"language":127198,"meta":31,"style":31},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[33,129735,129736,129742,129768],{"__ignoreMap":31},[36,129737,129738,129740],{"class":38,"line":39},[36,129739,52353],{"class":52042},[36,129741,16316],{"class":49},[36,129743,129744,129746,129748,129750,129752,129754,129756,129758,129760,129762,129764,129766],{"class":38,"line":46},[36,129745,71353],{"class":60},[36,129747,52179],{"class":49},[36,129749,55852],{"class":60},[36,129751,901],{"class":49},[36,129753,643],{"class":60},[36,129755,154],{"class":49},[36,129757,643],{"class":60},[36,129759,154],{"class":49},[36,129761,643],{"class":60},[36,129763,154],{"class":49},[36,129765,101165],{"class":60},[36,129767,3468],{"class":49},[36,129769,129770],{"class":38,"line":78},[36,129771,2315],{"class":49},[14,129773,100040],{},[14,129775,129776],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129778,129779],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129781,129782],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129784,129785],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[868,129787,129789],{"id":129788},"_828-总结","8.2.8 总结",[1031,129791,129792,129803],{},[1034,129793,129794],{},[1037,129795,129796,129799,129801],{},[1040,129797,129798],{"align":24480},"属性",[1040,129800,103340],{"align":24480},[1040,129802,1046],{"align":24480},[1078,129804,129805,129816,129827,129838,129849,129860,129871],{},[1037,129806,129807,129810,129813],{},[1083,129808,129809],{"align":24480},"background-color",[1083,129811,129812],{"align":24480},"背景颜色",[1083,129814,129815],{"align":24480},"预定义的颜色值\u002F十六进制\u002FRGB代码",[1037,129817,129818,129821,129824],{},[1083,129819,129820],{"align":24480},"background-image",[1083,129822,129823],{"align":24480},"背景图片",[1083,129825,129826],{"align":24480},"url(图片路径)",[1037,129828,129829,129832,129835],{},[1083,129830,129831],{"align":24480},"background-repeat",[1083,129833,129834],{"align":24480},"是否平铺",[1083,129836,129837],{"align":24480},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[1037,129839,129840,129843,129846],{},[1083,129841,129842],{"align":24480},"background-position",[1083,129844,129845],{"align":24480},"背景位置",[1083,129847,129848],{"align":24480},"length\u002Fposition 分别是x和y坐标",[1037,129850,129851,129854,129857],{},[1083,129852,129853],{"align":24480},"background-attachment",[1083,129855,129856],{"align":24480},"背景附着",[1083,129858,129859],{"align":24480},"scroll(背景滚动) \u002Ffixed (背景固定)",[1037,129861,129862,129865,129868],{},[1083,129863,129864],{"align":24480},"背景简写",[1083,129866,129867],{"align":24480},"书写更简单",[1083,129869,129870],{"align":24480},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[1037,129872,129873,129876,129879],{},[1083,129874,129875],{"align":24480},"背景半透明",[1083,129877,129878],{"align":24480},"背景颜色半透明",[1083,129880,129881],{"align":24480},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129883,129884],{},"颜色渐变：",[2212,129886],{"style":127052,"src":129887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[2212,129889],{"style":127052,"src":129890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[868,129892,129894],{"id":129893},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[26,129896,129898],{"className":127943,"code":129897,"language":127945,"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,129899,129900,129915,129934,129953,129972,129991,130010],{"__ignoreMap":31},[36,129901,129902,129904,129906,129908,129910,129913],{"class":38,"line":39},[36,129903,1789],{"class":49},[36,129905,52353],{"class":52042},[36,129907,54228],{"class":2713},[36,129909,54],{"class":49},[36,129911,129912],{"class":998},"\"nav\"",[36,129914,52049],{"class":49},[36,129916,129917,129919,129921,129923,129925,129927,129930,129932],{"class":38,"line":46},[36,129918,52886],{"class":49},[36,129920,50],{"class":52042},[36,129922,61799],{"class":2713},[36,129924,54],{"class":49},[36,129926,61804],{"class":998},[36,129928,129929],{"class":49},">五彩导航1\u003C\u002F",[36,129931,50],{"class":52042},[36,129933,52049],{"class":49},[36,129935,129936,129938,129940,129942,129944,129946,129949,129951],{"class":38,"line":78},[36,129937,52886],{"class":49},[36,129939,50],{"class":52042},[36,129941,61799],{"class":2713},[36,129943,54],{"class":49},[36,129945,61804],{"class":998},[36,129947,129948],{"class":49},">五彩导航2\u003C\u002F",[36,129950,50],{"class":52042},[36,129952,52049],{"class":49},[36,129954,129955,129957,129959,129961,129963,129965,129968,129970],{"class":38,"line":125},[36,129956,52886],{"class":49},[36,129958,50],{"class":52042},[36,129960,61799],{"class":2713},[36,129962,54],{"class":49},[36,129964,61804],{"class":998},[36,129966,129967],{"class":49},">五彩导航3\u003C\u002F",[36,129969,50],{"class":52042},[36,129971,52049],{"class":49},[36,129973,129974,129976,129978,129980,129982,129984,129987,129989],{"class":38,"line":131},[36,129975,52886],{"class":49},[36,129977,50],{"class":52042},[36,129979,61799],{"class":2713},[36,129981,54],{"class":49},[36,129983,61804],{"class":998},[36,129985,129986],{"class":49},">五彩导航4\u003C\u002F",[36,129988,50],{"class":52042},[36,129990,52049],{"class":49},[36,129992,129993,129995,129997,129999,130001,130003,130006,130008],{"class":38,"line":396},[36,129994,52886],{"class":49},[36,129996,50],{"class":52042},[36,129998,61799],{"class":2713},[36,130000,54],{"class":49},[36,130002,61804],{"class":998},[36,130004,130005],{"class":49},">五彩导航5\u003C\u002F",[36,130007,50],{"class":52042},[36,130009,52049],{"class":49},[36,130011,130012,130014,130016],{"class":38,"line":407},[36,130013,52527],{"class":49},[36,130015,52353],{"class":52042},[36,130017,52049],{"class":49},[26,130019,130021],{"className":127196,"code":130020,"language":127198,"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,130022,130023,130032,130042,130054,130066,130076,130088,130098,130102,130127,130150,130173,130196],{"__ignoreMap":31},[36,130024,130025,130028,130030],{"class":38,"line":39},[36,130026,130027],{"class":2713},".nav",[36,130029,2148],{"class":52042},[36,130031,16316],{"class":49},[36,130033,130034,130036,130038,130040],{"class":38,"line":46},[36,130035,128812],{"class":60},[36,130037,52179],{"class":49},[36,130039,73125],{"class":60},[36,130041,2040],{"class":49},[36,130043,130044,130046,130048,130050,130052],{"class":38,"line":78},[36,130045,71310],{"class":60},[36,130047,52179],{"class":49},[36,130049,1697],{"class":60},[36,130051,52234],{"class":53},[36,130053,2040],{"class":49},[36,130055,130056,130058,130060,130062,130064],{"class":38,"line":125},[36,130057,71530],{"class":60},[36,130059,52179],{"class":49},[36,130061,1735],{"class":60},[36,130063,52234],{"class":53},[36,130065,2040],{"class":49},[36,130067,130068,130070,130072,130074],{"class":38,"line":131},[36,130069,71268],{"class":60},[36,130071,52179],{"class":49},[36,130073,52334],{"class":60},[36,130075,2040],{"class":49},[36,130077,130078,130080,130082,130084,130086],{"class":38,"line":396},[36,130079,127880],{"class":60},[36,130081,52179],{"class":49},[36,130083,1735],{"class":60},[36,130085,52234],{"class":53},[36,130087,2040],{"class":49},[36,130089,130090,130092,130094,130096],{"class":38,"line":407},[36,130091,71647],{"class":60},[36,130093,52179],{"class":49},[36,130095,61584],{"class":60},[36,130097,2040],{"class":49},[36,130099,130100],{"class":38,"line":2061},[36,130101,2315],{"class":49},[36,130103,130104,130106,130108,130111,130113,130115,130118,130120,130122,130124],{"class":38,"line":2067},[36,130105,130027],{"class":2713},[36,130107,2148],{"class":52042},[36,130109,130110],{"class":2713},":nth-child",[36,130112,901],{"class":49},[36,130114,61],{"class":60},[36,130116,130117],{"class":49},") { ",[36,130119,129809],{"class":60},[36,130121,52179],{"class":49},[36,130123,129227],{"class":60},[36,130125,130126],{"class":49},"; }\n",[36,130128,130129,130131,130133,130135,130137,130139,130141,130143,130145,130148],{"class":38,"line":2079},[36,130130,130027],{"class":2713},[36,130132,2148],{"class":52042},[36,130134,130110],{"class":2713},[36,130136,901],{"class":49},[36,130138,181],{"class":60},[36,130140,130117],{"class":49},[36,130142,129809],{"class":60},[36,130144,52179],{"class":49},[36,130146,130147],{"class":60},"#ff0000",[36,130149,130126],{"class":49},[36,130151,130152,130154,130156,130158,130160,130162,130164,130166,130168,130171],{"class":38,"line":2362},[36,130153,130027],{"class":2713},[36,130155,2148],{"class":52042},[36,130157,130110],{"class":2713},[36,130159,901],{"class":49},[36,130161,162],{"class":60},[36,130163,130117],{"class":49},[36,130165,129809],{"class":60},[36,130167,52179],{"class":49},[36,130169,130170],{"class":60},"#00a4ff",[36,130172,130126],{"class":49},[36,130174,130175,130177,130179,130181,130183,130185,130187,130189,130191,130194],{"class":38,"line":2367},[36,130176,130027],{"class":2713},[36,130178,2148],{"class":52042},[36,130180,130110],{"class":2713},[36,130182,901],{"class":49},[36,130184,186],{"class":60},[36,130186,130117],{"class":49},[36,130188,129809],{"class":60},[36,130190,52179],{"class":49},[36,130192,130193],{"class":60},"#ff00ff",[36,130195,130126],{"class":49},[36,130197,130198,130200,130202,130204,130206,130208,130210,130212,130214,130217],{"class":38,"line":2373},[36,130199,130027],{"class":2713},[36,130201,2148],{"class":52042},[36,130203,130110],{"class":2713},[36,130205,901],{"class":49},[36,130207,157],{"class":60},[36,130209,130117],{"class":49},[36,130211,129809],{"class":60},[36,130213,52179],{"class":49},[36,130215,130216],{"class":60},"#00ff00",[36,130218,130126],{"class":49},[21,130220,130222],{"id":130221},"_83-css三大特性","8.3 css三大特性",[868,130224,130226],{"id":130225},"_831-层叠性","8.3.1 层叠性",[14,130228,130229],{},"为了解决样式冲突问题",[14,130231,130232],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,130234,130235],{},"   ②样式不冲突，不会层叠",[868,130237,130239],{"id":130238},"_832-继承性","8.3.2 继承性",[14,130241,130242],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,130244,130245],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[26,130247,130249],{"className":127196,"code":130248,"language":127198,"meta":31,"style":31},"p {\n  color: #333;\n}\n",[33,130250,130251,130257,130267],{"__ignoreMap":31},[36,130252,130253,130255],{"class":38,"line":39},[36,130254,14],{"class":52042},[36,130256,16316],{"class":49},[36,130258,130259,130261,130263,130265],{"class":38,"line":46},[36,130260,71647],{"class":60},[36,130262,52179],{"class":49},[36,130264,63111],{"class":60},[36,130266,2040],{"class":49},[36,130268,130269],{"class":38,"line":78},[36,130270,2315],{"class":49},[2212,130272],{"style":127052,"src":130273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,130275,130276],{},"解释：①行高可以跟单位也可以不跟单位",[14,130278,130279],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,130281,130282],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,130284,130285],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[868,130287,130289],{"id":130288},"_833-优先级","8.3.3 优先级",[851,130291,130292,130295],{},[854,130293,130294],{},"选择器相同，则执行层叠性",[854,130296,130297],{},"选择器不同，则根据选择器权重执行",[1031,130299,130300,130310],{},[1034,130301,130302],{},[1037,130303,130304,130307],{},[1040,130305,130306],{"align":24480},"选择器",[1040,130308,130309],{"align":24480},"选择器权重",[1078,130311,130312,130320,130328,130336,130344,130352],{},[1037,130313,130314,130317],{},[1083,130315,130316],{"align":24480},"继承 或者*",[1083,130318,130319],{"align":24480},"0，0，0，0",[1037,130321,130322,130325],{},[1083,130323,130324],{"align":24480},"标签选择器",[1083,130326,130327],{"align":24480},"0，0，0，1",[1037,130329,130330,130333],{},[1083,130331,130332],{"align":24480},"类选择器，伪类选择器",[1083,130334,130335],{"align":24480},"0，0，1，0",[1037,130337,130338,130341],{},[1083,130339,130340],{"align":24480},"ID选择器",[1083,130342,130343],{"align":24480},"0，1，0，0",[1037,130345,130346,130349],{},[1083,130347,130348],{"align":24480},"行内样式",[1083,130350,130351],{"align":24480},"1，0，0，0",[1037,130353,130354,130357],{},[1083,130355,130356],{"align":24480},"！important",[1083,130358,130359],{"align":24480},"无穷大",[14,130361,130362],{},"! important用法：",[26,130364,130366],{"className":127196,"code":130365,"language":127198,"meta":31,"style":31},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[33,130367,130368,130373,130379,130392,130396,130401,130407,130417],{"__ignoreMap":31},[36,130369,130370],{"class":38,"line":39},[36,130371,130372],{"class":42},"\u002F* !important 拥有最高优先级 *\u002F\n",[36,130374,130375,130377],{"class":38,"line":46},[36,130376,52353],{"class":52042},[36,130378,16316],{"class":49},[36,130380,130381,130383,130385,130387,130390],{"class":38,"line":78},[36,130382,71647],{"class":60},[36,130384,52179],{"class":49},[36,130386,52387],{"class":60},[36,130388,130389],{"class":53}," !important",[36,130391,2040],{"class":49},[36,130393,130394],{"class":38,"line":125},[36,130395,2315],{"class":49},[36,130397,130398],{"class":38,"line":131},[36,130399,130400],{"class":42},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[36,130402,130403,130405],{"class":38,"line":396},[36,130404,52353],{"class":52042},[36,130406,16316],{"class":49},[36,130408,130409,130411,130413,130415],{"class":38,"line":407},[36,130410,71647],{"class":60},[36,130412,52179],{"class":49},[36,130414,58163],{"class":60},[36,130416,2040],{"class":49},[36,130418,130419],{"class":38,"line":2061},[36,130420,2315],{"class":49},[14,130422,130423],{},"优先级注意点：",[14,130425,130426],{},"①权重是有4组数字组成,但是不会有进位",[14,130428,130429],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,130431,130432],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,130434,130435],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,130437,130438],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,130440,130441],{},"⑥复合选择器",[1031,130443,130444,130454],{},[1034,130445,130446],{},[1037,130447,130448,130451],{},[1040,130449,130450],{"align":24480},"div ul li",[1040,130452,130453],{"align":24480},"0,0,0,3",[1078,130455,130456,130464,130472],{},[1037,130457,130458,130461],{},[1083,130459,130460],{"align":24480},".nav ul li",[1083,130462,130463],{"align":24480},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[1037,130465,130466,130469],{},[1083,130467,130468],{"align":24480},"a:hover",[1083,130470,130471],{"align":24480},"0,0,1,1",[1037,130473,130474,130477],{},[1083,130475,130476],{"align":24480},".nav a",[1083,130478,130471],{"align":24480},[807,130480,130481],{},"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":46,"depth":46,"links":130483},[130484,130492,130503],{"id":128592,"depth":46,"text":128593,"children":130485},[130486,130487,130488,130489,130490,130491],{"id":128605,"depth":78,"text":128606},{"id":128677,"depth":78,"text":128678},{"id":128749,"depth":78,"text":128750},{"id":128780,"depth":78,"text":128781},{"id":128787,"depth":78,"text":128788},{"id":128940,"depth":78,"text":128941},{"id":129248,"depth":46,"text":129249,"children":130493},[130494,130495,130496,130497,130498,130499,130500,130501,130502],{"id":129255,"depth":78,"text":129256},{"id":129265,"depth":78,"text":129266},{"id":129361,"depth":78,"text":129362},{"id":129434,"depth":78,"text":129435},{"id":129589,"depth":78,"text":129590},{"id":129677,"depth":78,"text":129678},{"id":129729,"depth":78,"text":129730},{"id":129788,"depth":78,"text":129789},{"id":129893,"depth":78,"text":129894},{"id":130221,"depth":46,"text":130222,"children":130504},[130505,130506,130507],{"id":130225,"depth":78,"text":130226},{"id":130238,"depth":78,"text":130239},{"id":130288,"depth":78,"text":130289},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128584,"description":823},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130514,"title":130515,"body":130516,"description":823,"extension":824,"meta":132106,"navigation":193,"path":132107,"seo":132108,"stem":132109,"__hash__":132110},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130517,"toc":132085},[130518,130521,130525,130528,130531,130534,130537,130540,130543,130546,130550,130558,130595,130631,130634,130648,130653,130687,130690,130783,130788,130791,130821,130824,130829,130837,130841,130848,130894,130938,130943,130946,130949,130952,130955,130958,130961,130963,130966,130970,130975,131019,131024,131027,131030,131067,131072,131075,131078,131081,131084,131116,131119,131122,131125,131157,131160,131163,131166,131170,131173,131205,131208,131212,131232,131235,131243,131246,131250,131255,131258,131290,131295,131298,131336,131340,131345,131348,131351,131382,131385,131402,131407,131459,131519,131524,131578,131616,131620,131624,131627,131631,131639,131642,131644,131655,131660,131708,131742,131745,131748,131751,131754,131798,131801,131804,131807,131810,131813,131816,131860,131863,131866,131869,131872,131875,131878,131884,131887,131931,131934,131937,131940,131943,131946,131990,131993,131995,131998,132002,132006,132044,132048,132051,132054,132058,132066,132070,132073,132076,132079,132082],[10,130519,130515],{"id":130520},"_9-css盒模型浮动与切图",[21,130522,130524],{"id":130523},"_91-盒子模型","9.1 盒子模型",[14,130526,130527],{},"利用盒子来设计网页",[14,130529,130530],{},"盒子包含：边框、外边距、内边距、实际内容",[14,130532,130533],{},"网页布局设置：",[14,130535,130536],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,130538,130539],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,130541,130542],{},"③往盒子里装内容",[2212,130544],{"style":127052,"src":130545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[868,130547,130549],{"id":130548},"_911-边框border","9.1.1 边框（border）",[851,130551,130552,130555],{},[854,130553,130554],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[854,130556,130557],{},"语法",[26,130559,130561],{"className":127196,"code":130560,"language":127198,"meta":31,"style":31},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[33,130562,130563,130568,130574,130591],{"__ignoreMap":31},[36,130564,130565],{"class":38,"line":39},[36,130566,130567],{"class":42},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[36,130569,130570,130572],{"class":38,"line":46},[36,130571,52353],{"class":52042},[36,130573,16316],{"class":49},[36,130575,130576,130578,130580,130582,130584,130586,130589],{"class":38,"line":78},[36,130577,71638],{"class":60},[36,130579,52179],{"class":49},[36,130581,61],{"class":60},[36,130583,52234],{"class":53},[36,130585,52263],{"class":60},[36,130587,130588],{"class":60}," #ccc",[36,130590,2040],{"class":49},[36,130592,130593],{"class":38,"line":125},[36,130594,2315],{"class":49},[1031,130596,130597,130605],{},[1034,130598,130599],{},[1037,130600,130601,130603],{},[1040,130602,129798],{"align":24480},[1040,130604,103340],{"align":24480},[1078,130606,130607,130615,130623],{},[1037,130608,130609,130612],{},[1083,130610,130611],{"align":24480},"border-width",[1083,130613,130614],{"align":24480},"定义边框粗细，单位是px",[1037,130616,130617,130620],{},[1083,130618,130619],{"align":24480},"border-style",[1083,130621,130622],{"align":24480},"边框的样式",[1037,130624,130625,130628],{},[1083,130626,130627],{"align":24480},"border-color",[1083,130629,130630],{"align":24480},"边框的颜色",[14,130632,130633],{},"边框样式 border-style 可以设置如下值：",[1886,130635,130636,130639,130642,130645],{},[854,130637,130638],{},"none：没有边框即忽略所有边框的宽度（默认值）",[854,130640,130641],{},"solid：边框为单实线(最为常用的)",[854,130643,130644],{},"dashed：边框为虚线",[854,130646,130647],{},"dotted：边框为点线",[851,130649,130650],{"start":78},[854,130651,130652],{},"边框的合写分写",[26,130654,130655],{"className":127196,"code":130560,"language":127198,"meta":31,"style":31},[33,130656,130657,130661,130667,130683],{"__ignoreMap":31},[36,130658,130659],{"class":38,"line":39},[36,130660,130567],{"class":42},[36,130662,130663,130665],{"class":38,"line":46},[36,130664,52353],{"class":52042},[36,130666,16316],{"class":49},[36,130668,130669,130671,130673,130675,130677,130679,130681],{"class":38,"line":78},[36,130670,71638],{"class":60},[36,130672,52179],{"class":49},[36,130674,61],{"class":60},[36,130676,52234],{"class":53},[36,130678,52263],{"class":60},[36,130680,130588],{"class":60},[36,130682,2040],{"class":49},[36,130684,130685],{"class":38,"line":125},[36,130686,2315],{"class":49},[14,130688,130689],{},"边框分开写法：",[26,130691,130693],{"className":127196,"code":130692,"language":127198,"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,130694,130695,130700,130706,130724,130742,130761,130779],{"__ignoreMap":31},[36,130696,130697],{"class":38,"line":39},[36,130698,130699],{"class":42},"\u002F* 边框分开写法 *\u002F\n",[36,130701,130702,130704],{"class":38,"line":46},[36,130703,52353],{"class":52042},[36,130705,16316],{"class":49},[36,130707,130708,130711,130713,130715,130717,130719,130722],{"class":38,"line":78},[36,130709,130710],{"class":60},"  border-top",[36,130712,52179],{"class":49},[36,130714,61],{"class":60},[36,130716,52234],{"class":53},[36,130718,52263],{"class":60},[36,130720,130721],{"class":60}," #000",[36,130723,2040],{"class":49},[36,130725,130726,130729,130731,130733,130735,130737,130740],{"class":38,"line":125},[36,130727,130728],{"class":60},"  border-right",[36,130730,52179],{"class":49},[36,130732,181],{"class":60},[36,130734,52234],{"class":53},[36,130736,62983],{"class":60},[36,130738,130739],{"class":60}," #333",[36,130741,2040],{"class":49},[36,130743,130744,130747,130749,130751,130753,130756,130759],{"class":38,"line":131},[36,130745,130746],{"class":60},"  border-bottom",[36,130748,52179],{"class":49},[36,130750,162],{"class":60},[36,130752,52234],{"class":53},[36,130754,130755],{"class":60}," dotted",[36,130757,130758],{"class":60}," #666",[36,130760,2040],{"class":49},[36,130762,130763,130766,130768,130770,130772,130774,130777],{"class":38,"line":396},[36,130764,130765],{"class":60},"  border-left",[36,130767,52179],{"class":49},[36,130769,61],{"class":60},[36,130771,52234],{"class":53},[36,130773,52263],{"class":60},[36,130775,130776],{"class":60}," #999",[36,130778,2040],{"class":49},[36,130780,130781],{"class":38,"line":407},[36,130782,2315],{"class":49},[851,130784,130785],{"start":125},[854,130786,130787],{},"表格的细线边框",[14,130789,130790],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[26,130792,130794],{"className":127196,"code":130793,"language":127198,"meta":31,"style":31},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[33,130795,130796,130801,130807,130817],{"__ignoreMap":31},[36,130797,130798],{"class":38,"line":39},[36,130799,130800],{"class":42},"\u002F* 表格细线边框合并 *\u002F\n",[36,130802,130803,130805],{"class":38,"line":46},[36,130804,1031],{"class":52042},[36,130806,16316],{"class":49},[36,130808,130809,130811,130813,130815],{"class":38,"line":78},[36,130810,71320],{"class":60},[36,130812,52179],{"class":49},[36,130814,65777],{"class":60},[36,130816,2040],{"class":49},[36,130818,130819],{"class":38,"line":125},[36,130820,2315],{"class":49},[14,130822,130823],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[851,130825,130826],{"start":131},[854,130827,130828],{},"解决边框额外增加盒子的实际大小的方法：",[1886,130830,130831,130834],{},[854,130832,130833],{},"测量盒子大小的时候,不量边框",[854,130835,130836],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[868,130838,130840],{"id":130839},"_912-内边距","9.1.2 内边距",[851,130842,130843,130846],{},[854,130844,130845],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[854,130847,130557],{},[1031,130849,130850,130860],{},[1034,130851,130852],{},[1037,130853,130854,130857],{},[1040,130855,130856],{"align":24480},"值的个数",[1040,130858,130859],{"align":24480},"表达意思",[1078,130861,130862,130870,130878,130886],{},[1037,130863,130864,130867],{},[1083,130865,130866],{"align":24480},"padding: 5px;",[1083,130868,130869],{"align":24480},"1个值，代表上下左右都有5个元素",[1037,130871,130872,130875],{},[1083,130873,130874],{"align":24480},"padding: 5px 10px;",[1083,130876,130877],{"align":24480},"2个值，代表上下内边距为5像素，左右内边距为10像素",[1037,130879,130880,130883],{},[1083,130881,130882],{"align":24480},"padding: 5px 10px 20px;",[1083,130884,130885],{"align":24480},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[1037,130887,130888,130891],{},[1083,130889,130890],{"align":24480},"padding: 5px 10px 20px 30px;",[1083,130892,130893],{"align":24480},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[1031,130895,130896,130904],{},[1034,130897,130898],{},[1037,130899,130900,130902],{},[1040,130901,129798],{"align":24480},[1040,130903,103340],{"align":24480},[1078,130905,130906,130914,130922,130930],{},[1037,130907,130908,130911],{},[1083,130909,130910],{"align":24480},"padding-left",[1083,130912,130913],{"align":24480},"左内边距",[1037,130915,130916,130919],{},[1083,130917,130918],{"align":24480},"padding-right",[1083,130920,130921],{"align":24480},"右内边距",[1037,130923,130924,130927],{},[1083,130925,130926],{"align":24480},"padding-top",[1083,130928,130929],{"align":24480},"上内边距",[1037,130931,130932,130935],{},[1083,130933,130934],{"align":24480},"padding-bottom",[1083,130936,130937],{"align":24480},"下内边距",[851,130939,130940],{"start":78},[854,130941,130942],{},"内边距会影响盒子的实际大小",[14,130944,130945],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130947,130948],{},"①内容和边框有了距离，添加了内边距",[14,130950,130951],{},"②padding影响了盒子实际大小",[14,130953,130954],{},"内边距对盒子大小的影响：",[14,130956,130957],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130959,130960],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130962,95864],{},[14,130964,130965],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[868,130967,130969],{"id":130968},"_913-外边距","9.1.3 外边距",[851,130971,130972],{},[854,130973,130974],{},"控制盒子与盒子之间的距离",[1031,130976,130977,130985],{},[1034,130978,130979],{},[1037,130980,130981,130983],{},[1040,130982,129798],{"align":24480},[1040,130984,103340],{"align":24480},[1078,130986,130987,130995,131003,131011],{},[1037,130988,130989,130992],{},[1083,130990,130991],{"align":24480},"margin-left",[1083,130993,130994],{"align":24480},"左外边距",[1037,130996,130997,131000],{},[1083,130998,130999],{"align":24480},"margin-right",[1083,131001,131002],{"align":24480},"右外边距",[1037,131004,131005,131008],{},[1083,131006,131007],{"align":24480},"margin-top",[1083,131009,131010],{"align":24480},"上外边距",[1037,131012,131013,131016],{},[1083,131014,131015],{"align":24480},"margin-bottom",[1083,131017,131018],{"align":24480},"下外边距",[851,131020,131021],{"start":46},[854,131022,131023],{},"外边距可以让块级盒子水平居中的两个条件：",[14,131025,131026],{},"①盒子必须指定了宽度（width）",[14,131028,131029],{},"②盒子左右的外边距都设置为 auto",[26,131031,131033],{"className":127196,"code":131032,"language":127198,"meta":31,"style":31},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[33,131034,131035,131040,131047,131063],{"__ignoreMap":31},[36,131036,131037],{"class":38,"line":39},[36,131038,131039],{"class":42},"\u002F* margin 复合写法（同上） *\u002F\n",[36,131041,131042,131045],{"class":38,"line":46},[36,131043,131044],{"class":2713},".box",[36,131046,16316],{"class":49},[36,131048,131049,131051,131053,131055,131057,131060],{"class":38,"line":78},[36,131050,71212],{"class":60},[36,131052,52179],{"class":49},[36,131054,643],{"class":60},[36,131056,52298],{"class":60},[36,131058,131059],{"class":49},";  ",[36,131061,131062],{"class":42},"\u002F* 块级盒子水平居中 *\u002F\n",[36,131064,131065],{"class":38,"line":125},[36,131066,2315],{"class":49},[851,131068,131069],{"start":78},[854,131070,131071],{},"外边距塌陷问题",[14,131073,131074],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[2212,131076],{"style":127052,"src":131077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,131079,131080],{},"解决方案：",[14,131082,131083],{},"①可以为父亲元素定义上边距",[26,131085,131086],{"className":127196,"code":131032,"language":127198,"meta":31,"style":31},[33,131087,131088,131092,131098,131112],{"__ignoreMap":31},[36,131089,131090],{"class":38,"line":39},[36,131091,131039],{"class":42},[36,131093,131094,131096],{"class":38,"line":46},[36,131095,131044],{"class":2713},[36,131097,16316],{"class":49},[36,131099,131100,131102,131104,131106,131108,131110],{"class":38,"line":78},[36,131101,71212],{"class":60},[36,131103,52179],{"class":49},[36,131105,643],{"class":60},[36,131107,52298],{"class":60},[36,131109,131059],{"class":49},[36,131111,131062],{"class":42},[36,131113,131114],{"class":38,"line":125},[36,131115,2315],{"class":49},[14,131117,131118],{},"②可以为父亲元素定义上内边距",[14,131120,131121],{},"③可以为父亲元素添加overflow:hidden",[2212,131123],{"style":127052,"src":131124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[26,131126,131127],{"className":127196,"code":131032,"language":127198,"meta":31,"style":31},[33,131128,131129,131133,131139,131153],{"__ignoreMap":31},[36,131130,131131],{"class":38,"line":39},[36,131132,131039],{"class":42},[36,131134,131135,131137],{"class":38,"line":46},[36,131136,131044],{"class":2713},[36,131138,16316],{"class":49},[36,131140,131141,131143,131145,131147,131149,131151],{"class":38,"line":78},[36,131142,71212],{"class":60},[36,131144,52179],{"class":49},[36,131146,643],{"class":60},[36,131148,52298],{"class":60},[36,131150,131059],{"class":49},[36,131152,131062],{"class":42},[36,131154,131155],{"class":38,"line":125},[36,131156,2315],{"class":49},[2212,131158],{"style":127052,"src":131159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,131161,131162],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,131164,131165],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[868,131167,131169],{"id":131168},"_914-清除内外边距","9.1.4 清除内外边距",[14,131171,131172],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[26,131174,131175],{"className":127196,"code":131032,"language":127198,"meta":31,"style":31},[33,131176,131177,131181,131187,131201],{"__ignoreMap":31},[36,131178,131179],{"class":38,"line":39},[36,131180,131039],{"class":42},[36,131182,131183,131185],{"class":38,"line":46},[36,131184,131044],{"class":2713},[36,131186,16316],{"class":49},[36,131188,131189,131191,131193,131195,131197,131199],{"class":38,"line":78},[36,131190,71212],{"class":60},[36,131192,52179],{"class":49},[36,131194,643],{"class":60},[36,131196,52298],{"class":60},[36,131198,131059],{"class":49},[36,131200,131062],{"class":42},[36,131202,131203],{"class":38,"line":125},[36,131204,2315],{"class":49},[14,131206,131207],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[868,131209,131211],{"id":131210},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1886,131213,131214,131217,131220,131223,131226,131229],{},[854,131215,131216],{},"文件→打开 ：可以打开我们要测量的图片",[854,131218,131219],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[854,131221,131222],{},"右击标尺，把里面的单位改为像素",[854,131224,131225],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[854,131227,131228],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[854,131230,131231],{},"用选区拖动 可以测量大小",[2212,131233],{"style":127052,"src":131234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1886,131236,131237,131240],{},[854,131238,131239],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[854,131241,131242],{},"吸管取色工具",[2212,131244],{"style":127052,"src":131245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[868,131247,131249],{"id":131248},"_916-案例","9.1.6 案例",[851,131251,131252],{},[854,131253,131254],{},"小米商品",[2212,131256],{"style":127052,"src":131257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[26,131259,131260],{"className":127196,"code":131032,"language":127198,"meta":31,"style":31},[33,131261,131262,131266,131272,131286],{"__ignoreMap":31},[36,131263,131264],{"class":38,"line":39},[36,131265,131039],{"class":42},[36,131267,131268,131270],{"class":38,"line":46},[36,131269,131044],{"class":2713},[36,131271,16316],{"class":49},[36,131273,131274,131276,131278,131280,131282,131284],{"class":38,"line":78},[36,131275,71212],{"class":60},[36,131277,52179],{"class":49},[36,131279,643],{"class":60},[36,131281,52298],{"class":60},[36,131283,131059],{"class":49},[36,131285,131062],{"class":42},[36,131287,131288],{"class":38,"line":125},[36,131289,2315],{"class":49},[851,131291,131292],{"start":46},[854,131293,131294],{},"快报模块",[2212,131296],{"style":127052,"src":131297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[26,131299,131301],{"className":127943,"code":131300,"language":127945,"meta":31,"style":31},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[33,131302,131303,131308,131323,131328],{"__ignoreMap":31},[36,131304,131305],{"class":38,"line":39},[36,131306,131307],{"class":42},"\u003C!-- HTML 代码示例 -->\n",[36,131309,131310,131312,131314,131316,131318,131321],{"class":38,"line":46},[36,131311,1789],{"class":49},[36,131313,52353],{"class":52042},[36,131315,54228],{"class":2713},[36,131317,54],{"class":49},[36,131319,131320],{"class":998},"\"example\"",[36,131322,52049],{"class":49},[36,131324,131325],{"class":38,"line":78},[36,131326,131327],{"class":49},"  示例内容\n",[36,131329,131330,131332,131334],{"class":38,"line":125},[36,131331,52527],{"class":49},[36,131333,52353],{"class":52042},[36,131335,52049],{"class":49},[868,131337,131339],{"id":131338},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[851,131341,131342],{},[854,131343,131344],{},"圆角边框",[14,131346,131347],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[2212,131349],{"style":127052,"src":131350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[26,131352,131354],{"className":127196,"code":131353,"language":127198,"meta":31,"style":31},"div {\n  border: 1px solid #ccc;\n}\n",[33,131355,131356,131362,131378],{"__ignoreMap":31},[36,131357,131358,131360],{"class":38,"line":39},[36,131359,52353],{"class":52042},[36,131361,16316],{"class":49},[36,131363,131364,131366,131368,131370,131372,131374,131376],{"class":38,"line":46},[36,131365,71638],{"class":60},[36,131367,52179],{"class":49},[36,131369,61],{"class":60},[36,131371,52234],{"class":53},[36,131373,52263],{"class":60},[36,131375,130588],{"class":60},[36,131377,2040],{"class":49},[36,131379,131380],{"class":38,"line":78},[36,131381,2315],{"class":49},[14,131383,131384],{},"解释:",[1886,131386,131387,131390,131393,131396,131399],{},[854,131388,131389],{},"参数值可以为数值或百分比的形式",[854,131391,131392],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[854,131394,131395],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[854,131397,131398],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[854,131400,131401],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[851,131403,131404],{"start":46},[854,131405,131406],{},"盒子阴影",[26,131408,131410],{"className":127196,"code":131409,"language":127198,"meta":31,"style":31},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[33,131411,131412,131418,131455],{"__ignoreMap":31},[36,131413,131414,131416],{"class":38,"line":39},[36,131415,52353],{"class":52042},[36,131417,16316],{"class":49},[36,131419,131420,131423,131425,131427,131429,131431,131433,131435,131437,131439,131441,131443,131445,131447,131449,131451,131453],{"class":38,"line":46},[36,131421,131422],{"class":60},"  box-shadow",[36,131424,52179],{"class":49},[36,131426,643],{"class":60},[36,131428,15499],{"class":60},[36,131430,52234],{"class":53},[36,131432,2788],{"class":60},[36,131434,52234],{"class":53},[36,131436,79509],{"class":60},[36,131438,901],{"class":49},[36,131440,643],{"class":60},[36,131442,154],{"class":49},[36,131444,643],{"class":60},[36,131446,154],{"class":49},[36,131448,643],{"class":60},[36,131450,154],{"class":49},[36,131452,86952],{"class":60},[36,131454,3468],{"class":49},[36,131456,131457],{"class":38,"line":78},[36,131458,2315],{"class":49},[1031,131460,131461,131469],{},[1034,131462,131463],{},[1037,131464,131465,131467],{},[1040,131466,1046],{"align":24480},[1040,131468,28234],{"align":24480},[1078,131470,131471,131479,131487,131495,131503,131511],{},[1037,131472,131473,131476],{},[1083,131474,131475],{"align":24480},"h-shadow",[1083,131477,131478],{"align":24480},"必需,水平阴影的位置,允许负值",[1037,131480,131481,131484],{},[1083,131482,131483],{"align":24480},"v-shadow",[1083,131485,131486],{"align":24480},"必需,垂直阴影的位置,允许负值",[1037,131488,131489,131492],{},[1083,131490,131491],{"align":24480},"blur",[1083,131493,131494],{"align":24480},"可选,模糊距离,就是影子的虚实",[1037,131496,131497,131500],{},[1083,131498,131499],{"align":24480},"spread",[1083,131501,131502],{"align":24480},"可选,阴影尺寸",[1037,131504,131505,131508],{},[1083,131506,131507],{"align":24480},"color",[1083,131509,131510],{"align":24480},"可选,阴影的颜色",[1037,131512,131513,131516],{},[1083,131514,131515],{"align":24480},"inset",[1083,131517,131518],{"align":24480},"可选,将外部阴影(outset)改为内部阴影",[851,131520,131521],{"start":78},[854,131522,131523],{},"文字阴影",[26,131525,131527],{"className":127196,"code":131526,"language":127198,"meta":31,"style":31},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[33,131528,131529,131535,131574],{"__ignoreMap":31},[36,131530,131531,131533],{"class":38,"line":39},[36,131532,14],{"class":52042},[36,131534,16316],{"class":49},[36,131536,131537,131540,131542,131544,131546,131548,131550,131552,131554,131556,131558,131560,131562,131564,131566,131568,131570,131572],{"class":38,"line":46},[36,131538,131539],{"class":60},"  text-shadow",[36,131541,52179],{"class":49},[36,131543,61],{"class":60},[36,131545,52234],{"class":53},[36,131547,25863],{"class":60},[36,131549,52234],{"class":53},[36,131551,15499],{"class":60},[36,131553,52234],{"class":53},[36,131555,79509],{"class":60},[36,131557,901],{"class":49},[36,131559,643],{"class":60},[36,131561,154],{"class":49},[36,131563,643],{"class":60},[36,131565,154],{"class":49},[36,131567,643],{"class":60},[36,131569,154],{"class":49},[36,131571,101165],{"class":60},[36,131573,3468],{"class":49},[36,131575,131576],{"class":38,"line":78},[36,131577,2315],{"class":49},[1031,131579,131580,131588],{},[1034,131581,131582],{},[1037,131583,131584,131586],{},[1040,131585,1046],{"align":24480},[1040,131587,28234],{"align":24480},[1078,131589,131590,131596,131603,131610],{},[1037,131591,131592,131594],{},[1083,131593,131475],{"align":24480},[1083,131595,131478],{"align":24480},[1037,131597,131598,131600],{},[1083,131599,131483],{"align":24480},[1083,131601,131602],{"align":24480},"必需,垂直阴影位置,允许负值",[1037,131604,131605,131607],{},[1083,131606,131491],{"align":24480},[1083,131608,131609],{"align":24480},"可选,模糊的距离",[1037,131611,131612,131614],{},[1083,131613,131507],{"align":24480},[1083,131615,131510],{"align":24480},[21,131617,131619],{"id":131618},"_92-浮动","9.2 浮动",[868,131621,131623],{"id":131622},"_921-浮动介绍","9.2.1 浮动介绍",[14,131625,131626],{},"在16.2中详细介绍",[868,131628,131630],{"id":131629},"_922-清除浮动","9.2.2 清除浮动",[851,131632,131633,131636],{},[854,131634,131635],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[854,131637,131638],{},"清除浮动的本质",[14,131640,131641],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,131643,9772],{},[1886,131645,131646,131649,131652],{},[854,131647,131648],{},"如果父盒子本身有高度，则不需要清除浮动",[854,131650,131651],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[854,131653,131654],{},"父级有了高度，就不会影响下面的标准流了",[851,131656,131657],{"start":78},[854,131658,131659],{},"清除浮动样式",[26,131661,131663],{"className":127196,"code":131662,"language":127198,"meta":31,"style":31},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[33,131664,131665,131672,131683,131687,131694,131704],{"__ignoreMap":31},[36,131666,131667,131670],{"class":38,"line":39},[36,131668,131669],{"class":2713},".left",[36,131671,16316],{"class":49},[36,131673,131674,131677,131679,131681],{"class":38,"line":46},[36,131675,131676],{"class":60},"  float",[36,131678,52179],{"class":49},[36,131680,24480],{"class":60},[36,131682,2040],{"class":49},[36,131684,131685],{"class":38,"line":78},[36,131686,2315],{"class":49},[36,131688,131689,131692],{"class":38,"line":125},[36,131690,131691],{"class":2713},".right",[36,131693,16316],{"class":49},[36,131695,131696,131698,131700,131702],{"class":38,"line":131},[36,131697,131676],{"class":60},[36,131699,52179],{"class":49},[36,131701,73264],{"class":60},[36,131703,2040],{"class":49},[36,131705,131706],{"class":38,"line":396},[36,131707,2315],{"class":49},[1031,131709,131710,131718],{},[1034,131711,131712],{},[1037,131713,131714,131716],{},[1040,131715,127660],{"align":24480},[1040,131717,28234],{"align":24480},[1078,131719,131720,131727,131734],{},[1037,131721,131722,131724],{},[1083,131723,24480],{"align":24480},[1083,131725,131726],{"align":24480},"不允许左侧有浮动元素（清除左侧浮动的影响）",[1037,131728,131729,131731],{},[1083,131730,73264],{"align":24480},[1083,131732,131733],{"align":24480},"不允许右侧有浮动元素（清除右侧浮动的影响）",[1037,131735,131736,131739],{},[1083,131737,131738],{"align":24480},"both",[1083,131740,131741],{"align":24480},"同时清除左右侧浮动的影响",[14,131743,131744],{},"法一",[14,131746,131747],{},"额外标签法也称为隔墙法",[14,131749,131750],{},"使用方式：",[14,131752,131753],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[26,131755,131756],{"className":127196,"code":131662,"language":127198,"meta":31,"style":31},[33,131757,131758,131764,131774,131778,131784,131794],{"__ignoreMap":31},[36,131759,131760,131762],{"class":38,"line":39},[36,131761,131669],{"class":2713},[36,131763,16316],{"class":49},[36,131765,131766,131768,131770,131772],{"class":38,"line":46},[36,131767,131676],{"class":60},[36,131769,52179],{"class":49},[36,131771,24480],{"class":60},[36,131773,2040],{"class":49},[36,131775,131776],{"class":38,"line":78},[36,131777,2315],{"class":49},[36,131779,131780,131782],{"class":38,"line":125},[36,131781,131691],{"class":2713},[36,131783,16316],{"class":49},[36,131785,131786,131788,131790,131792],{"class":38,"line":131},[36,131787,131676],{"class":60},[36,131789,52179],{"class":49},[36,131791,73264],{"class":60},[36,131793,2040],{"class":49},[36,131795,131796],{"class":38,"line":396},[36,131797,2315],{"class":49},[14,131799,131800],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131802,131803],{},"优点： 通俗易懂，书写方便",[14,131805,131806],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131808,131809],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131811,131812],{},"法二",[14,131814,131815],{},"父级添加overflow属性",[26,131817,131818],{"className":127196,"code":131662,"language":127198,"meta":31,"style":31},[33,131819,131820,131826,131836,131840,131846,131856],{"__ignoreMap":31},[36,131821,131822,131824],{"class":38,"line":39},[36,131823,131669],{"class":2713},[36,131825,16316],{"class":49},[36,131827,131828,131830,131832,131834],{"class":38,"line":46},[36,131829,131676],{"class":60},[36,131831,52179],{"class":49},[36,131833,24480],{"class":60},[36,131835,2040],{"class":49},[36,131837,131838],{"class":38,"line":78},[36,131839,2315],{"class":49},[36,131841,131842,131844],{"class":38,"line":125},[36,131843,131691],{"class":2713},[36,131845,16316],{"class":49},[36,131847,131848,131850,131852,131854],{"class":38,"line":131},[36,131849,131676],{"class":60},[36,131851,52179],{"class":49},[36,131853,73264],{"class":60},[36,131855,2040],{"class":49},[36,131857,131858],{"class":38,"line":396},[36,131859,2315],{"class":49},[14,131861,131862],{},"overflow: hidden;",[14,131864,131865],{},"优点：代码简洁",[14,131867,131868],{},"缺点：无法显示溢出的部分",[14,131870,131871],{},"注意：是给父元素添加代码",[14,131873,131874],{},"法三",[14,131876,131877],{},"父级添加after伪元素",[14,131879,131880,131883],{},[131881,131882],"after",{}," 方式是额外标签法的升级版",[14,131885,131886],{},"使用的时候复制就可以",[26,131888,131889],{"className":127196,"code":131662,"language":127198,"meta":31,"style":31},[33,131890,131891,131897,131907,131911,131917,131927],{"__ignoreMap":31},[36,131892,131893,131895],{"class":38,"line":39},[36,131894,131669],{"class":2713},[36,131896,16316],{"class":49},[36,131898,131899,131901,131903,131905],{"class":38,"line":46},[36,131900,131676],{"class":60},[36,131902,52179],{"class":49},[36,131904,24480],{"class":60},[36,131906,2040],{"class":49},[36,131908,131909],{"class":38,"line":78},[36,131910,2315],{"class":49},[36,131912,131913,131915],{"class":38,"line":125},[36,131914,131691],{"class":2713},[36,131916,16316],{"class":49},[36,131918,131919,131921,131923,131925],{"class":38,"line":131},[36,131920,131676],{"class":60},[36,131922,52179],{"class":49},[36,131924,73264],{"class":60},[36,131926,2040],{"class":49},[36,131928,131929],{"class":38,"line":396},[36,131930,2315],{"class":49},[14,131932,131933],{},"优点：没有增加标签，结构更简单",[14,131935,131936],{},"缺点：照顾低版本浏览器",[14,131938,131939],{},"代表网站： 百度、淘宝网、网易等",[14,131941,131942],{},"法四",[14,131944,131945],{},"父级添加双伪元素",[26,131947,131948],{"className":127196,"code":131662,"language":127198,"meta":31,"style":31},[33,131949,131950,131956,131966,131970,131976,131986],{"__ignoreMap":31},[36,131951,131952,131954],{"class":38,"line":39},[36,131953,131669],{"class":2713},[36,131955,16316],{"class":49},[36,131957,131958,131960,131962,131964],{"class":38,"line":46},[36,131959,131676],{"class":60},[36,131961,52179],{"class":49},[36,131963,24480],{"class":60},[36,131965,2040],{"class":49},[36,131967,131968],{"class":38,"line":78},[36,131969,2315],{"class":49},[36,131971,131972,131974],{"class":38,"line":125},[36,131973,131691],{"class":2713},[36,131975,16316],{"class":49},[36,131977,131978,131980,131982,131984],{"class":38,"line":131},[36,131979,131676],{"class":60},[36,131981,52179],{"class":49},[36,131983,73264],{"class":60},[36,131985,2040],{"class":49},[36,131987,131988],{"class":38,"line":396},[36,131989,2315],{"class":49},[14,131991,131992],{},"优点：代码更简洁",[14,131994,131936],{},[14,131996,131997],{},"代表网站：小米、腾讯等",[21,131999,132001],{"id":132000},"_93-ps切图","9.3 PS切图",[868,132003,132005],{"id":132004},"_931-常见图片格式","9.3.1 常见图片格式",[1031,132007,132008,132018],{},[1034,132009,132010],{},[1037,132011,132012,132015],{},[1040,132013,132014],{"align":24480},"jpg图像格式",[1040,132016,132017],{"align":24480},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[1078,132019,132020,132028,132036],{},[1037,132021,132022,132025],{},[1083,132023,132024],{"align":24480},"gif图像格式",[1083,132026,132027],{"align":24480},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[1037,132029,132030,132033],{},[1083,132031,132032],{"align":24480},"png图像格式",[1083,132034,132035],{"align":24480},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[1037,132037,132038,132041],{},[1083,132039,132040],{"align":24480},"PSD图像格式",[1083,132042,132043],{"align":24480},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[868,132045,132047],{"id":132046},"_932-图层切图","9.3.2 图层切图",[14,132049,132050],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,132052,132053],{},"按住shift选中两个图层->图层菜单->合并图层",[868,132055,132057],{"id":132056},"_933-切片切图","9.3.3 切片切图",[1886,132059,132060,132063],{},[854,132061,132062],{},"利用切片工具手动划出",[854,132064,132065],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[868,132067,132069],{"id":132068},"_934-切图步骤","9.3.4 切图步骤",[14,132071,132072],{},"用切片工具选中：",[2212,132074],{"style":127052,"src":132075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,132077,132078],{},"文件 -> 导出",[2212,132080],{"style":127052,"src":132081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[807,132083,132084],{},"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":46,"depth":46,"links":132086},[132087,132096,132100],{"id":130523,"depth":46,"text":130524,"children":132088},[132089,132090,132091,132092,132093,132094,132095],{"id":130548,"depth":78,"text":130549},{"id":130839,"depth":78,"text":130840},{"id":130968,"depth":78,"text":130969},{"id":131168,"depth":78,"text":131169},{"id":131210,"depth":78,"text":131211},{"id":131248,"depth":78,"text":131249},{"id":131338,"depth":78,"text":131339},{"id":131618,"depth":46,"text":131619,"children":132097},[132098,132099],{"id":131622,"depth":78,"text":131623},{"id":131629,"depth":78,"text":131630},{"id":132000,"depth":46,"text":132001,"children":132101},[132102,132103,132104,132105],{"id":132004,"depth":78,"text":132005},{"id":132046,"depth":78,"text":132047},{"id":132056,"depth":78,"text":132057},{"id":132068,"depth":78,"text":132069},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130515,"description":823},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":132112,"title":132113,"body":132114,"description":823,"extension":824,"meta":132755,"navigation":193,"path":132756,"seo":132757,"stem":132758,"__hash__":132759},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":132115,"toc":132743},[132116,132119,132123,132149,132183,132187,132191,132194,132236,132243,132253,132261,132263,132266,132269,132272,132279,132293,132297,132300,132329,132333,132336,132350,132354,132357,132385,132389,132392,132418,132422,132427,132460,132465,132493,132497,132514,132560,132565,132609,132626,132733,132741],[10,132117,132113],{"id":132118},"_10-css规范与学成在线案例",[21,132120,132122],{"id":132121},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[851,132124,132125,132131,132137,132143],{},[854,132126,132127,132130],{},[1043,132128,132129],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[854,132132,132133,132136],{},[1043,132134,132135],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[854,132138,132139,132142],{},[1043,132140,132141],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[854,132144,132145,132148],{},[1043,132146,132147],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[26,132150,132151],{"className":127196,"code":130560,"language":127198,"meta":31,"style":31},[33,132152,132153,132157,132163,132179],{"__ignoreMap":31},[36,132154,132155],{"class":38,"line":39},[36,132156,130567],{"class":42},[36,132158,132159,132161],{"class":38,"line":46},[36,132160,52353],{"class":52042},[36,132162,16316],{"class":49},[36,132164,132165,132167,132169,132171,132173,132175,132177],{"class":38,"line":78},[36,132166,71638],{"class":60},[36,132168,52179],{"class":49},[36,132170,61],{"class":60},[36,132172,52234],{"class":53},[36,132174,52263],{"class":60},[36,132176,130588],{"class":60},[36,132178,2040],{"class":49},[36,132180,132181],{"class":38,"line":125},[36,132182,2315],{"class":49},[21,132184,132186],{"id":132185},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[868,132188,132190],{"id":132189},"_1021-header头部制作","10.2.1 header头部制作",[2212,132192],{"style":127052,"src":132193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1886,132195,132196,132203,132210,132216,132223,132230],{},[854,132197,132198,132199,132202],{},"1号是版心盒子 ",[1043,132200,132201],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[854,132204,132205,132206,132209],{},"版心盒子 里面包含 2号盒子 ",[1043,132207,132208],{},"logo"," 图标",[854,132211,132212,132213,132215],{},"版心盒子 里面包含 3号盒子 ",[1043,132214,54455],{}," 导航栏",[854,132217,132218,132219,132222],{},"版心盒子 里面包含 4号盒子 ",[1043,132220,132221],{},"search"," 搜索框",[854,132224,132225,132226,132229],{},"版心盒子 里面包含 5号盒子 ",[1043,132227,132228],{},"user"," 个人信息",[854,132231,132232,132233],{},"注意，要求里面的 ",[1043,132234,132235],{},"4个子盒子 必须都浮动",[851,132237,132238],{},[854,132239,132240],{},[1043,132241,132242],{},"导航栏注意点:",[14,132244,132245,132246,132249,132250],{},"实际开发中， ",[1043,132247,132248],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[1043,132251,132252],{},"用 li 包含链接(li+a)的做法",[1886,132254,132255,132258],{},[854,132256,132257],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[854,132259,132260],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,132262,9772],{},[14,132264,132265],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,132267,132268],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,132270,132271],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[851,132273,132274],{"start":46},[854,132275,132276],{},[1043,132277,132278],{},"4号盒子search的细节：",[1886,132280,132281,132284,132287],{},[854,132282,132283],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[854,132285,132286],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[854,132288,132289,132292],{},[33,132290,132291],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[868,132294,132296],{"id":132295},"_1022-banner制作","10.2.2 banner制作",[2212,132298],{"style":127052,"src":132299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1886,132301,132302,132309,132315,132322],{},[854,132303,132304,132305,132308],{},"1号盒子是通栏的大盒子 ",[1043,132306,132307],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[854,132310,132311,132312,132314],{},"2号盒子是版心 ",[1043,132313,1675],{}," ， 要水平居中对齐",[854,132316,132317,132318,132321],{},"3号盒子版心内，左对齐 ",[1043,132319,132320],{},"subnav"," 侧导航栏",[854,132323,132324,132325,132328],{},"4号盒子版心内，右对齐 ",[1043,132326,132327],{},"course"," 课程",[868,132330,132332],{"id":132331},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[2212,132334],{"style":127052,"src":132335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1886,132337,132338,132341,132344,132347],{},[854,132339,132340],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[854,132342,132343],{},"1号盒子是标题 H3 左侧浮动",[854,132345,132346],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[854,132348,132349],{},"3号盒子 右浮动 mod 修改",[868,132351,132353],{"id":132352},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[2212,132355],{"style":127052,"src":132356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1886,132358,132359,132365,132372,132379,132382],{},[854,132360,132361,132362,132364],{},"1号盒子为最大的盒子 ",[1043,132363,54456],{}," 版心水平居中对齐",[854,132366,132367,132368,132371],{},"2号盒子为上面部分 ",[1043,132369,132370],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[854,132373,132374,132375,132378],{},"3号盒子为底下部分 ",[1043,132376,132377],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[854,132380,132381],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[854,132383,132384],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[868,132386,132388],{"id":132387},"_1025-底部模块制作","10.2.5 底部模块制作",[2212,132390],{"style":127052,"src":132391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1886,132393,132394,132401,132404,132411],{},[854,132395,132396,132397,132400],{},"1号盒子通栏大盒子 底部 ",[1043,132398,132399],{},"footer"," 给高度 底色是白色",[854,132402,132403],{},"2号盒子版心水平居中",[854,132405,132406,132407,132410],{},"3号盒子版权 ",[1043,132408,132409],{},"copyright"," 左对齐",[854,132412,132413,132414,132417],{},"4号盒子 链接组 ",[1043,132415,132416],{},"links"," 右对齐",[868,132419,132421],{"id":132420},"_1026-代码模块","10.2.6 代码模块",[851,132423,132424],{},[854,132425,132426],{},"html部分",[26,132428,132430],{"className":127943,"code":132429,"language":127945,"meta":31,"style":31},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[33,132431,132432],{"__ignoreMap":31},[36,132433,132434,132436,132438,132440,132442,132445,132448,132450,132453,132456,132458],{"class":38,"line":39},[36,132435,1789],{"class":49},[36,132437,50],{"class":52042},[36,132439,61799],{"class":2713},[36,132441,54],{"class":49},[36,132443,132444],{"class":998},"\"https:\u002F\u002Fexample.com\"",[36,132446,132447],{"class":2713}," target",[36,132449,54],{"class":49},[36,132451,132452],{"class":998},"\"_blank\"",[36,132454,132455],{"class":49},">链接文字\u003C\u002F",[36,132457,50],{"class":52042},[36,132459,52049],{"class":49},[851,132461,132462],{"start":46},[854,132463,132464],{},"css部分",[26,132466,132467],{"className":127943,"code":132429,"language":127945,"meta":31,"style":31},[33,132468,132469],{"__ignoreMap":31},[36,132470,132471,132473,132475,132477,132479,132481,132483,132485,132487,132489,132491],{"class":38,"line":39},[36,132472,1789],{"class":49},[36,132474,50],{"class":52042},[36,132476,61799],{"class":2713},[36,132478,54],{"class":49},[36,132480,132444],{"class":998},[36,132482,132447],{"class":2713},[36,132484,54],{"class":49},[36,132486,132452],{"class":998},[36,132488,132455],{"class":49},[36,132490,50],{"class":52042},[36,132492,52049],{"class":49},[868,132494,132496],{"id":132495},"_1027-收获","10.2.7 收获",[851,132498,132499,132502,132505,132508,132511],{},[854,132500,132501],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[854,132503,132504],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[854,132506,132507],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[854,132509,132510],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[854,132512,132513],{},"遗忘代码",[26,132515,132517],{"className":127196,"code":132516,"language":127198,"meta":31,"style":31},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[33,132518,132519,132541,132546,132556],{"__ignoreMap":31},[36,132520,132521,132523,132525,132527,132529,132531,132533,132535,132537,132539],{"class":38,"line":39},[36,132522,52353],{"class":52042},[36,132524,154],{"class":49},[36,132526,14],{"class":52042},[36,132528,154],{"class":49},[36,132530,10],{"class":52042},[36,132532,154],{"class":49},[36,132534,1886],{"class":52042},[36,132536,154],{"class":49},[36,132538,854],{"class":52042},[36,132540,16316],{"class":49},[36,132542,132543],{"class":38,"line":46},[36,132544,132545],{"class":42},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[36,132547,132548,132550,132552,132554],{"class":38,"line":78},[36,132549,128812],{"class":60},[36,132551,52179],{"class":49},[36,132553,61611],{"class":60},[36,132555,2040],{"class":49},[36,132557,132558],{"class":38,"line":125},[36,132559,2315],{"class":49},[851,132561,132562],{"start":396},[854,132563,132564],{},"html引css的程序",[26,132566,132567],{"className":127196,"code":132516,"language":127198,"meta":31,"style":31},[33,132568,132569,132591,132595,132605],{"__ignoreMap":31},[36,132570,132571,132573,132575,132577,132579,132581,132583,132585,132587,132589],{"class":38,"line":39},[36,132572,52353],{"class":52042},[36,132574,154],{"class":49},[36,132576,14],{"class":52042},[36,132578,154],{"class":49},[36,132580,10],{"class":52042},[36,132582,154],{"class":49},[36,132584,1886],{"class":52042},[36,132586,154],{"class":49},[36,132588,854],{"class":52042},[36,132590,16316],{"class":49},[36,132592,132593],{"class":38,"line":46},[36,132594,132545],{"class":42},[36,132596,132597,132599,132601,132603],{"class":38,"line":78},[36,132598,128812],{"class":60},[36,132600,52179],{"class":49},[36,132602,61611],{"class":60},[36,132604,2040],{"class":49},[36,132606,132607],{"class":38,"line":125},[36,132608,2315],{"class":49},[851,132610,132611,132614,132617,132620,132623],{"start":407},[854,132612,132613],{},"浮动的盒子不会有外边距合并问题",[854,132615,132616],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[854,132618,132619],{},"ctrl+g快速定位行；shift+alt多个光标",[854,132621,132622],{},"学习上方各个模块的选择器起名方法，以后就这样用",[854,132624,132625],{},"在写选择器时尽量写全一些，例如",[26,132627,132629],{"className":127196,"code":132628,"language":127198,"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,132630,132631,132636,132652,132657,132672,132677,132692,132697,132712,132717],{"__ignoreMap":31},[36,132632,132633],{"class":38,"line":39},[36,132634,132635],{"class":42},"\u002F* 静态定位（默认） *\u002F\n",[36,132637,132638,132641,132643,132645,132647,132650],{"class":38,"line":46},[36,132639,132640],{"class":2713},".static",[36,132642,80549],{"class":49},[36,132644,129556],{"class":60},[36,132646,52179],{"class":49},[36,132648,132649],{"class":60},"static",[36,132651,130126],{"class":49},[36,132653,132654],{"class":38,"line":78},[36,132655,132656],{"class":42},"\u002F* 相对定位 *\u002F\n",[36,132658,132659,132662,132664,132666,132668,132670],{"class":38,"line":125},[36,132660,132661],{"class":2713},".relative",[36,132663,80549],{"class":49},[36,132665,129556],{"class":60},[36,132667,52179],{"class":49},[36,132669,55506],{"class":60},[36,132671,130126],{"class":49},[36,132673,132674],{"class":38,"line":131},[36,132675,132676],{"class":42},"\u002F* 绝对定位 *\u002F\n",[36,132678,132679,132682,132684,132686,132688,132690],{"class":38,"line":396},[36,132680,132681],{"class":2713},".absolute",[36,132683,80549],{"class":49},[36,132685,129556],{"class":60},[36,132687,52179],{"class":49},[36,132689,55573],{"class":60},[36,132691,130126],{"class":49},[36,132693,132694],{"class":38,"line":407},[36,132695,132696],{"class":42},"\u002F* 固定定位 *\u002F\n",[36,132698,132699,132702,132704,132706,132708,132710],{"class":38,"line":2061},[36,132700,132701],{"class":2713},".fixed",[36,132703,80549],{"class":49},[36,132705,129556],{"class":60},[36,132707,52179],{"class":49},[36,132709,86975],{"class":60},[36,132711,130126],{"class":49},[36,132713,132714],{"class":38,"line":2067},[36,132715,132716],{"class":42},"\u002F* 粘性定位 *\u002F\n",[36,132718,132719,132722,132724,132726,132728,132731],{"class":38,"line":2079},[36,132720,132721],{"class":2713},".sticky",[36,132723,80549],{"class":49},[36,132725,129556],{"class":60},[36,132727,52179],{"class":49},[36,132729,132730],{"class":60},"sticky",[36,132732,130126],{"class":49},[851,132734,132735,132738],{"start":2367},[854,132736,132737],{},"一定要用好注释",[854,132739,132740],{},"浮动的盒子不会有外边距合并的问题",[807,132742,132084],{},{"title":31,"searchDepth":46,"depth":46,"links":132744},[132745,132746],{"id":132121,"depth":46,"text":132122},{"id":132185,"depth":46,"text":132186,"children":132747},[132748,132749,132750,132751,132752,132753,132754],{"id":132189,"depth":78,"text":132190},{"id":132295,"depth":78,"text":132296},{"id":132331,"depth":78,"text":132332},{"id":132352,"depth":78,"text":132353},{"id":132387,"depth":78,"text":132388},{"id":132420,"depth":78,"text":132421},{"id":132495,"depth":78,"text":132496},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132113,"description":823},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132761,"title":132762,"body":132763,"description":823,"extension":824,"meta":134249,"navigation":193,"path":134250,"seo":134251,"stem":134252,"__hash__":134253},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132764,"toc":134241},[132765,132768,132772,132776,132787,132791,132808,132852,132885,132888,132905,132908,132911,132955,132959,132963,132966,132969,132973,132976,132987,133050,133091,133094,133109,133163,133171,133174,133185,133239,133265,133268,133281,133335,133367,133421,133444,133498,133501,133504,133511,133565,133586,133640,133643,133646,133731,133739,133796,133819,133823,133826,133844,133848,133867,133921,133959,133963,133966,133969,133991,133995,134003,134006,134011,134022,134025,134029,134043,134087,134090,134094,134097,134102,134128,134133,134210,134213,134217,134220,134223,134226,134229,134232,134235,134238],[10,132766,132762],{"id":132767},"_11-传统布局与定位体系",[21,132769,132771],{"id":132770},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[868,132773,132775],{"id":132774},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1886,132777,132778,132781,132784],{},[854,132779,132780],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[854,132782,132783],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[854,132785,132786],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[868,132788,132790],{"id":132789},"_1112-浮动","11.1.2 浮动",[1886,132792,132793,132796,132799,132802,132805],{},[854,132794,132795],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[854,132797,132798],{},"浮动可以改变元素标签默认的排列方式",[854,132800,132801],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[854,132803,132804],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[854,132806,132807],{},"在使用行内块转换时盒子之间是有空隙的",[26,132809,132810],{"className":127196,"code":131662,"language":127198,"meta":31,"style":31},[33,132811,132812,132818,132828,132832,132838,132848],{"__ignoreMap":31},[36,132813,132814,132816],{"class":38,"line":39},[36,132815,131669],{"class":2713},[36,132817,16316],{"class":49},[36,132819,132820,132822,132824,132826],{"class":38,"line":46},[36,132821,131676],{"class":60},[36,132823,52179],{"class":49},[36,132825,24480],{"class":60},[36,132827,2040],{"class":49},[36,132829,132830],{"class":38,"line":78},[36,132831,2315],{"class":49},[36,132833,132834,132836],{"class":38,"line":125},[36,132835,131691],{"class":2713},[36,132837,16316],{"class":49},[36,132839,132840,132842,132844,132846],{"class":38,"line":131},[36,132841,131676],{"class":60},[36,132843,52179],{"class":49},[36,132845,73264],{"class":60},[36,132847,2040],{"class":49},[36,132849,132850],{"class":38,"line":396},[36,132851,2315],{"class":49},[1031,132853,132854,132862],{},[1034,132855,132856],{},[1037,132857,132858,132860],{},[1040,132859,127660],{"align":24480},[1040,132861,28234],{"align":24480},[1078,132863,132864,132871,132878],{},[1037,132865,132866,132868],{},[1083,132867,55479],{"align":24480},[1083,132869,132870],{"align":24480},"元素不浮动（默认值）",[1037,132872,132873,132875],{},[1083,132874,24480],{"align":24480},[1083,132876,132877],{"align":24480},"元素向左浮动",[1037,132879,132880,132882],{},[1083,132881,73264],{"align":24480},[1083,132883,132884],{"align":24480},"元素向右浮动",[14,132886,132887],{},"浮动重点：",[1886,132889,132890,132893,132896,132899,132902],{},[854,132891,132892],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[854,132894,132895],{},"浮动的元素会一行内显示并且元素顶部对齐",[854,132897,132898],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[854,132900,132901],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[854,132903,132904],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132906,132907],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132909,132910],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[26,132912,132913],{"className":127196,"code":131662,"language":127198,"meta":31,"style":31},[33,132914,132915,132921,132931,132935,132941,132951],{"__ignoreMap":31},[36,132916,132917,132919],{"class":38,"line":39},[36,132918,131669],{"class":2713},[36,132920,16316],{"class":49},[36,132922,132923,132925,132927,132929],{"class":38,"line":46},[36,132924,131676],{"class":60},[36,132926,52179],{"class":49},[36,132928,24480],{"class":60},[36,132930,2040],{"class":49},[36,132932,132933],{"class":38,"line":78},[36,132934,2315],{"class":49},[36,132936,132937,132939],{"class":38,"line":125},[36,132938,131691],{"class":2713},[36,132940,16316],{"class":49},[36,132942,132943,132945,132947,132949],{"class":38,"line":131},[36,132944,131676],{"class":60},[36,132946,52179],{"class":49},[36,132948,73264],{"class":60},[36,132950,2040],{"class":49},[36,132952,132953],{"class":38,"line":396},[36,132954,2315],{"class":49},[868,132956,132958],{"id":132957},"_1113-定位","11.1.3 定位",[22742,132960,132962],{"id":132961},"_11131-使用场景","11.1.3.1 使用场景",[14,132964,132965],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132967,132968],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22742,132970,132972],{"id":132971},"_11132-定位组成","11.1.3.2 定位组成",[14,132974,132975],{},"定位 = 定位模式 + 边偏移",[851,132977,132978],{},[854,132979,132980,132983,132984],{},[1043,132981,132982],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[1043,132985,132986],{},"定位模式",[26,132988,132990],{"className":127196,"code":132989,"language":127198,"meta":31,"style":31},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[33,132991,132992,132998,133012,133029,133046],{"__ignoreMap":31},[36,132993,132994,132996],{"class":38,"line":39},[36,132995,131044],{"class":2713},[36,132997,16316],{"class":49},[36,132999,133000,133003,133005,133007,133009],{"class":38,"line":46},[36,133001,133002],{"class":60},"  position",[36,133004,52179],{"class":49},[36,133006,55506],{"class":60},[36,133008,131059],{"class":49},[36,133010,133011],{"class":42},"\u002F* 定位模式 *\u002F\n",[36,133013,133014,133017,133019,133021,133023,133026],{"class":38,"line":78},[36,133015,133016],{"class":60},"  top",[36,133018,52179],{"class":49},[36,133020,332],{"class":60},[36,133022,52234],{"class":53},[36,133024,133025],{"class":49},";           ",[36,133027,133028],{"class":42},"\u002F* 边偏移：上 *\u002F\n",[36,133030,133031,133034,133036,133038,133040,133043],{"class":38,"line":125},[36,133032,133033],{"class":60},"  left",[36,133035,52179],{"class":49},[36,133037,72],{"class":60},[36,133039,52234],{"class":53},[36,133041,133042],{"class":49},";          ",[36,133044,133045],{"class":42},"\u002F* 边偏移：左 *\u002F\n",[36,133047,133048],{"class":38,"line":131},[36,133049,2315],{"class":49},[1031,133051,133052,133061],{},[1034,133053,133054],{},[1037,133055,133056,133058],{},[1040,133057,1046],{"align":24480},[1040,133059,133060],{"align":24480},"语义",[1078,133062,133063,133070,133077,133084],{},[1037,133064,133065,133067],{},[1083,133066,132649],{"align":24480},[1083,133068,133069],{"align":24480},"静态定位",[1037,133071,133072,133074],{},[1083,133073,55506],{"align":24480},[1083,133075,133076],{"align":24480},"相对定位",[1037,133078,133079,133081],{},[1083,133080,55573],{"align":24480},[1083,133082,133083],{"align":24480},"绝对定位",[1037,133085,133086,133088],{},[1083,133087,86975],{"align":24480},[1083,133089,133090],{"align":24480},"固定定位",[14,133092,133093],{},"（1）静态定位：",[1886,133095,133096,133107],{},[854,133097,133098,133099,133102,133103,133106],{},"静态定位是元素的 ",[1043,133100,133101],{},"默认定位方式"," ， ",[1043,133104,133105],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[854,133108,5929],{},[26,133110,133111],{"className":127196,"code":132989,"language":127198,"meta":31,"style":31},[33,133112,133113,133119,133131,133145,133159],{"__ignoreMap":31},[36,133114,133115,133117],{"class":38,"line":39},[36,133116,131044],{"class":2713},[36,133118,16316],{"class":49},[36,133120,133121,133123,133125,133127,133129],{"class":38,"line":46},[36,133122,133002],{"class":60},[36,133124,52179],{"class":49},[36,133126,55506],{"class":60},[36,133128,131059],{"class":49},[36,133130,133011],{"class":42},[36,133132,133133,133135,133137,133139,133141,133143],{"class":38,"line":78},[36,133134,133016],{"class":60},[36,133136,52179],{"class":49},[36,133138,332],{"class":60},[36,133140,52234],{"class":53},[36,133142,133025],{"class":49},[36,133144,133028],{"class":42},[36,133146,133147,133149,133151,133153,133155,133157],{"class":38,"line":125},[36,133148,133033],{"class":60},[36,133150,52179],{"class":49},[36,133152,72],{"class":60},[36,133154,52234],{"class":53},[36,133156,133042],{"class":49},[36,133158,133045],{"class":42},[36,133160,133161],{"class":38,"line":131},[36,133162,2315],{"class":49},[1886,133164,133165,133168],{},[854,133166,133167],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[854,133169,133170],{},"静态定位在布局时我们几乎不用的",[14,133172,133173],{},"（2）相对定位",[1886,133175,133176,133183],{},[854,133177,133178,133179,133182],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[1043,133180,133181],{},"原来的位置"," 来说的（自恋型）",[854,133184,5929],{},[26,133186,133187],{"className":127196,"code":132989,"language":127198,"meta":31,"style":31},[33,133188,133189,133195,133207,133221,133235],{"__ignoreMap":31},[36,133190,133191,133193],{"class":38,"line":39},[36,133192,131044],{"class":2713},[36,133194,16316],{"class":49},[36,133196,133197,133199,133201,133203,133205],{"class":38,"line":46},[36,133198,133002],{"class":60},[36,133200,52179],{"class":49},[36,133202,55506],{"class":60},[36,133204,131059],{"class":49},[36,133206,133011],{"class":42},[36,133208,133209,133211,133213,133215,133217,133219],{"class":38,"line":78},[36,133210,133016],{"class":60},[36,133212,52179],{"class":49},[36,133214,332],{"class":60},[36,133216,52234],{"class":53},[36,133218,133025],{"class":49},[36,133220,133028],{"class":42},[36,133222,133223,133225,133227,133229,133231,133233],{"class":38,"line":125},[36,133224,133033],{"class":60},[36,133226,52179],{"class":49},[36,133228,72],{"class":60},[36,133230,52234],{"class":53},[36,133232,133042],{"class":49},[36,133234,133045],{"class":42},[36,133236,133237],{"class":38,"line":131},[36,133238,2315],{"class":49},[1886,133240,133241],{},[854,133242,133243,133244,133246,133247,133249,133250,133253,133254,133257,133258,133260,133261,133264],{},"相对定位的特点：",[54458,133245],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54458,133248],{},"  ② ",[1043,133251,133252],{},"原来"," 在标准流的 ",[1043,133255,133256],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54458,133259],{},"  ③因此， ",[1043,133262,133263],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,133266,133267],{},"（3）绝对定位",[1886,133269,133270,133279],{},[854,133271,133272,133274,133275,133278],{},[1043,133273,133083],{}," 是元素在移动位置的时候，是相对于它 ",[1043,133276,133277],{},"祖先元素"," 来说的（拼爹型）",[854,133280,5929],{},[26,133282,133283],{"className":127196,"code":132989,"language":127198,"meta":31,"style":31},[33,133284,133285,133291,133303,133317,133331],{"__ignoreMap":31},[36,133286,133287,133289],{"class":38,"line":39},[36,133288,131044],{"class":2713},[36,133290,16316],{"class":49},[36,133292,133293,133295,133297,133299,133301],{"class":38,"line":46},[36,133294,133002],{"class":60},[36,133296,52179],{"class":49},[36,133298,55506],{"class":60},[36,133300,131059],{"class":49},[36,133302,133011],{"class":42},[36,133304,133305,133307,133309,133311,133313,133315],{"class":38,"line":78},[36,133306,133016],{"class":60},[36,133308,52179],{"class":49},[36,133310,332],{"class":60},[36,133312,52234],{"class":53},[36,133314,133025],{"class":49},[36,133316,133028],{"class":42},[36,133318,133319,133321,133323,133325,133327,133329],{"class":38,"line":125},[36,133320,133033],{"class":60},[36,133322,52179],{"class":49},[36,133324,72],{"class":60},[36,133326,52234],{"class":53},[36,133328,133042],{"class":49},[36,133330,133045],{"class":42},[36,133332,133333],{"class":38,"line":131},[36,133334,2315],{"class":49},[1886,133336,133337,133352,133361,133364],{},[854,133338,133339,133340,133342,133343,133345,133346,133348,133349,133351],{},"绝对定位的特点：",[54458,133341],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54458,133344],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54458,133347],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54458,133350],{},"  (4)固定定位",[854,133353,133354,133356,133357,133360],{},[1043,133355,133090],{}," 是元素 ",[1043,133358,133359],{},"固定于浏览器可视区的位置"," 。（认死理型）",[854,133362,133363],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[854,133365,133366],{},"语法:",[26,133368,133369],{"className":127196,"code":132989,"language":127198,"meta":31,"style":31},[33,133370,133371,133377,133389,133403,133417],{"__ignoreMap":31},[36,133372,133373,133375],{"class":38,"line":39},[36,133374,131044],{"class":2713},[36,133376,16316],{"class":49},[36,133378,133379,133381,133383,133385,133387],{"class":38,"line":46},[36,133380,133002],{"class":60},[36,133382,52179],{"class":49},[36,133384,55506],{"class":60},[36,133386,131059],{"class":49},[36,133388,133011],{"class":42},[36,133390,133391,133393,133395,133397,133399,133401],{"class":38,"line":78},[36,133392,133016],{"class":60},[36,133394,52179],{"class":49},[36,133396,332],{"class":60},[36,133398,52234],{"class":53},[36,133400,133025],{"class":49},[36,133402,133028],{"class":42},[36,133404,133405,133407,133409,133411,133413,133415],{"class":38,"line":125},[36,133406,133033],{"class":60},[36,133408,52179],{"class":49},[36,133410,72],{"class":60},[36,133412,52234],{"class":53},[36,133414,133042],{"class":49},[36,133416,133045],{"class":42},[36,133418,133419],{"class":38,"line":131},[36,133420,2315],{"class":49},[1886,133422,133423,133432],{},[854,133424,133425,133426,133428,133429,133431],{},"特点:",[54458,133427],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54458,133430],{},"  ②固定定位不再占有原先的位置,完全脱标",[854,133433,133434,133435,133437,133438,133440,133441,133443],{},"固定在版心位置的方法:",[54458,133436],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54458,133439],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54458,133442],{},"  实例：",[26,133445,133446],{"className":127196,"code":132989,"language":127198,"meta":31,"style":31},[33,133447,133448,133454,133466,133480,133494],{"__ignoreMap":31},[36,133449,133450,133452],{"class":38,"line":39},[36,133451,131044],{"class":2713},[36,133453,16316],{"class":49},[36,133455,133456,133458,133460,133462,133464],{"class":38,"line":46},[36,133457,133002],{"class":60},[36,133459,52179],{"class":49},[36,133461,55506],{"class":60},[36,133463,131059],{"class":49},[36,133465,133011],{"class":42},[36,133467,133468,133470,133472,133474,133476,133478],{"class":38,"line":78},[36,133469,133016],{"class":60},[36,133471,52179],{"class":49},[36,133473,332],{"class":60},[36,133475,52234],{"class":53},[36,133477,133025],{"class":49},[36,133479,133028],{"class":42},[36,133481,133482,133484,133486,133488,133490,133492],{"class":38,"line":125},[36,133483,133033],{"class":60},[36,133485,52179],{"class":49},[36,133487,72],{"class":60},[36,133489,52234],{"class":53},[36,133491,133042],{"class":49},[36,133493,133045],{"class":42},[36,133495,133496],{"class":38,"line":131},[36,133497,2315],{"class":49},[2212,133499],{"style":127052,"src":133500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,133502,133503],{},"(5)粘性定位",[1886,133505,133506,133509],{},[854,133507,133508],{},"粘性定位可以被认为是相对定位和固定定位的混合",[854,133510,5929],{},[26,133512,133513],{"className":127196,"code":132989,"language":127198,"meta":31,"style":31},[33,133514,133515,133521,133533,133547,133561],{"__ignoreMap":31},[36,133516,133517,133519],{"class":38,"line":39},[36,133518,131044],{"class":2713},[36,133520,16316],{"class":49},[36,133522,133523,133525,133527,133529,133531],{"class":38,"line":46},[36,133524,133002],{"class":60},[36,133526,52179],{"class":49},[36,133528,55506],{"class":60},[36,133530,131059],{"class":49},[36,133532,133011],{"class":42},[36,133534,133535,133537,133539,133541,133543,133545],{"class":38,"line":78},[36,133536,133016],{"class":60},[36,133538,52179],{"class":49},[36,133540,332],{"class":60},[36,133542,52234],{"class":53},[36,133544,133025],{"class":49},[36,133546,133028],{"class":42},[36,133548,133549,133551,133553,133555,133557,133559],{"class":38,"line":125},[36,133550,133033],{"class":60},[36,133552,52179],{"class":49},[36,133554,72],{"class":60},[36,133556,52234],{"class":53},[36,133558,133042],{"class":49},[36,133560,133045],{"class":42},[36,133562,133563],{"class":38,"line":131},[36,133564,2315],{"class":49},[1886,133566,133567],{},[854,133568,133569,133570,133572,133573,133575,133576,133578,133579,133582,133583,133585],{},"粘性定位的特点：",[54458,133571],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54458,133574],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54458,133577],{},"  ③必须添加 top 、left、right、bottom ",[1043,133580,133581],{},"其中一个"," 才有效",[54458,133584],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[26,133587,133588],{"className":127196,"code":132989,"language":127198,"meta":31,"style":31},[33,133589,133590,133596,133608,133622,133636],{"__ignoreMap":31},[36,133591,133592,133594],{"class":38,"line":39},[36,133593,131044],{"class":2713},[36,133595,16316],{"class":49},[36,133597,133598,133600,133602,133604,133606],{"class":38,"line":46},[36,133599,133002],{"class":60},[36,133601,52179],{"class":49},[36,133603,55506],{"class":60},[36,133605,131059],{"class":49},[36,133607,133011],{"class":42},[36,133609,133610,133612,133614,133616,133618,133620],{"class":38,"line":78},[36,133611,133016],{"class":60},[36,133613,52179],{"class":49},[36,133615,332],{"class":60},[36,133617,52234],{"class":53},[36,133619,133025],{"class":49},[36,133621,133028],{"class":42},[36,133623,133624,133626,133628,133630,133632,133634],{"class":38,"line":125},[36,133625,133033],{"class":60},[36,133627,52179],{"class":49},[36,133629,72],{"class":60},[36,133631,52234],{"class":53},[36,133633,133042],{"class":49},[36,133635,133045],{"class":42},[36,133637,133638],{"class":38,"line":131},[36,133639,2315],{"class":49},[2212,133641],{"style":127052,"src":133642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,133644,133645],{},"(6)总结",[1031,133647,133648,133663],{},[1034,133649,133650],{},[1037,133651,133652,133654,133657,133660],{},[1040,133653,132986],{"align":24480},[1040,133655,133656],{"align":24480},"是否脱标",[1040,133658,133659],{"align":24480},"移动位置",[1040,133661,133662],{"align":24480},"是否常用",[1078,133664,133665,133678,133692,133706,133719],{},[1037,133666,133667,133670,133672,133675],{},[1083,133668,133669],{"align":24480},"Static 静态定位",[1083,133671,105322],{"align":24480},[1083,133673,133674],{"align":24480},"不能使用边偏移",[1083,133676,133677],{"align":24480},"很少",[1037,133679,133680,133683,133686,133689],{},[1083,133681,133682],{"align":24480},"Relative 相对定位",[1083,133684,133685],{"align":24480},"否(占有位置)",[1083,133687,133688],{"align":24480},"相对于自身位置移动",[1083,133690,133691],{"align":24480},"基本单独使用",[1037,133693,133694,133697,133700,133703],{},[1083,133695,133696],{"align":24480},"Absolute 绝对定位",[1083,133698,133699],{"align":24480},"是(不占有位置)",[1083,133701,133702],{"align":24480},"带有定位的父级",[1083,133704,133705],{"align":24480},"要和定位父级元素搭配使用",[1037,133707,133708,133711,133713,133716],{},[1083,133709,133710],{"align":24480},"Fixed 固定定位",[1083,133712,133699],{"align":24480},[1083,133714,133715],{"align":24480},"浏览器可视区",[1083,133717,133718],{"align":24480},"单独使用,不需要父级",[1037,133720,133721,133724,133726,133728],{},[1083,133722,133723],{"align":24480},"Sticky 粘性定位",[1083,133725,133685],{"align":24480},[1083,133727,133715],{"align":24480},[1083,133729,133730],{"align":24480},"当前阶段少",[851,133732,133733],{"start":46},[854,133734,133735,133738],{},[1043,133736,133737],{},"边偏移"," 则决定了该元素的最终位置",[1031,133740,133741,133752],{},[1034,133742,133743],{},[1037,133744,133745,133748,133750],{},[1040,133746,133747],{"align":24480},"边偏移属性",[1040,133749,28237],{"align":24480},[1040,133751,28234],{"align":24480},[1078,133753,133754,133765,133776,133786],{},[1037,133755,133756,133759,133762],{},[1083,133757,133758],{"align":24480},"top",[1083,133760,133761],{"align":24480},"top: 80px;",[1083,133763,133764],{"align":24480},"顶端偏移量，定义元素相对于父元素上边线的距离",[1037,133766,133767,133770,133773],{},[1083,133768,133769],{"align":24480},"bottom",[1083,133771,133772],{"align":24480},"bottom: 80px ;",[1083,133774,133775],{"align":24480},"底部偏移量，定义元素相对于其父元素下边线的距离",[1037,133777,133778,133780,133783],{},[1083,133779,24480],{"align":24480},[1083,133781,133782],{"align":24480},"left: 80px ;",[1083,133784,133785],{"align":24480},"左侧偏移量，定义元素相对于其父元素左边线的距离",[1037,133787,133788,133790,133793],{},[1083,133789,73264],{"align":24480},[1083,133791,133792],{"align":24480},"right: 80px ;",[1083,133794,133795],{"align":24480},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1886,133797,133798],{},[854,133799,9772,133800,133802,133803,133805,133806,133808,133809,133812,133813,133815,133816,133818],{},[54458,133801],{},"  ① ",[1043,133804,133737],{}," 需要和 ",[1043,133807,132986],{}," 联合使用， ",[1043,133810,133811],{},"单独使用无效"," ；",[54458,133814],{},"  ②top和bottom不要同时使用",[54458,133817],{},"  ③left和right不要同时使用",[22742,133820,133822],{"id":133821},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133824,133825],{},"子级是绝对定位的话，父级要用相对定位",[1886,133827,133828,133831,133834,133837],{},[854,133829,133830],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[854,133832,133833],{},"父盒子需要加定位限制子盒子在父盒子内显示",[854,133835,133836],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[854,133838,133839,133840,133843],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[1043,133841,133842],{},"子绝父绝"," 也会遇到",[22742,133845,133847],{"id":133846},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1886,133849,133850,133865],{},[854,133851,133852,133853,133856,133857,133860,133861,133864],{},"在使用 ",[1043,133854,133855],{},"定位"," 布局时，可能会 ",[1043,133858,133859],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[1043,133862,133863],{},"z-index"," 来控制盒子的前后次序 (z轴)",[854,133866,5929],{},[26,133868,133869],{"className":127196,"code":132989,"language":127198,"meta":31,"style":31},[33,133870,133871,133877,133889,133903,133917],{"__ignoreMap":31},[36,133872,133873,133875],{"class":38,"line":39},[36,133874,131044],{"class":2713},[36,133876,16316],{"class":49},[36,133878,133879,133881,133883,133885,133887],{"class":38,"line":46},[36,133880,133002],{"class":60},[36,133882,52179],{"class":49},[36,133884,55506],{"class":60},[36,133886,131059],{"class":49},[36,133888,133011],{"class":42},[36,133890,133891,133893,133895,133897,133899,133901],{"class":38,"line":78},[36,133892,133016],{"class":60},[36,133894,52179],{"class":49},[36,133896,332],{"class":60},[36,133898,52234],{"class":53},[36,133900,133025],{"class":49},[36,133902,133028],{"class":42},[36,133904,133905,133907,133909,133911,133913,133915],{"class":38,"line":125},[36,133906,133033],{"class":60},[36,133908,52179],{"class":49},[36,133910,72],{"class":60},[36,133912,52234],{"class":53},[36,133914,133042],{"class":49},[36,133916,133045],{"class":42},[36,133918,133919],{"class":38,"line":131},[36,133920,2315],{"class":49},[1886,133922,133923],{},[854,133924,133925,133926,133802,133928,133930,133931,128359,133934,83281,133937,133939,133940,133942,133943,133946,133947,133812,133950,133952,133953,133956,133958],{},"z-index的特性",[54458,133927],{},[1043,133929,127660],{}," ： ",[1043,133932,133933],{},"正整数",[1043,133935,133936],{},"负整数",[1043,133938,643],{}," ，默认值是 0，数值越大，盒子越靠上；",[54458,133941],{},"  ②如果 ",[1043,133944,133945],{},"属性值相同"," ，则按照书写顺序， ",[1043,133948,133949],{},"后来居上",[54458,133951],{},"  ③数字后面 ",[1043,133954,133955],{},"不能加单位",[54458,133957],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22742,133960,133962],{"id":133961},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133964,133965],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133967,133968],{},"方法:",[1886,133970,133971,133981],{},[854,133972,133973,133974,133977,133978],{},"left: 50%; 让 ",[1043,133975,133976],{},"盒子的左侧"," 移动到 ",[1043,133979,133980],{},"父级元素的水平中心位置",[854,133982,133983,133984,133987,133988],{},"margin-left: -100px; 让盒子 ",[1043,133985,133986],{},"向左"," 移动 ",[1043,133989,133990],{},"自身宽度的一半",[22742,133992,133994],{"id":133993},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[851,133996,133997,134000],{},[854,133998,133999],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[854,134001,134002],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,134004,134005],{},"也就是说绝对定位和固定定位和浮动类似",[851,134007,134008],{"start":78},[854,134009,134010],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1886,134012,134013,134016,134019],{},[854,134014,134015],{},"可以用inline-block 转换为行内块",[854,134017,134018],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[854,134020,134021],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,134023,134024],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22742,134026,134028],{"id":134027},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[851,134030,134031,134034,134037,134040],{},[854,134032,134033],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[854,134035,134036],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[854,134038,134039],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[854,134041,134042],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[26,134044,134045],{"className":127196,"code":131662,"language":127198,"meta":31,"style":31},[33,134046,134047,134053,134063,134067,134073,134083],{"__ignoreMap":31},[36,134048,134049,134051],{"class":38,"line":39},[36,134050,131669],{"class":2713},[36,134052,16316],{"class":49},[36,134054,134055,134057,134059,134061],{"class":38,"line":46},[36,134056,131676],{"class":60},[36,134058,52179],{"class":49},[36,134060,24480],{"class":60},[36,134062,2040],{"class":49},[36,134064,134065],{"class":38,"line":78},[36,134066,2315],{"class":49},[36,134068,134069,134071],{"class":38,"line":125},[36,134070,131691],{"class":2713},[36,134072,16316],{"class":49},[36,134074,134075,134077,134079,134081],{"class":38,"line":131},[36,134076,131676],{"class":60},[36,134078,52179],{"class":49},[36,134080,73264],{"class":60},[36,134082,2040],{"class":49},[36,134084,134085],{"class":38,"line":396},[36,134086,2315],{"class":49},[2212,134088],{"style":127052,"src":134089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22742,134091,134093],{"id":134092},"_11138-轮播图","11.1.3.8 轮播图",[2212,134095],{"style":127052,"src":134096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[851,134098,134099],{},[854,134100,134101],{},"制作顺序:",[1886,134103,134104,134107,134110,134119],{},[854,134105,134106],{},"大盒子我们类名为： tb-promo 淘宝广告",[854,134108,134109],{},"里面先放一张图片",[854,134111,134112,134113,134115,134116,134118],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54458,134114],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54458,134117],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[854,134120,134121,134122,134124,134125,134127],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54458,134123],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54458,134126],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[851,134129,134130],{"start":46},[854,134131,134132],{},"代码模块",[26,134134,134136],{"className":127196,"code":134135,"language":127198,"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,134137,134138,134143,134150,134160,134170,134180,134184,134189,134196,134206],{"__ignoreMap":31},[36,134139,134140],{"class":38,"line":39},[36,134141,134142],{"class":42},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[36,134144,134145,134148],{"class":38,"line":46},[36,134146,134147],{"class":2713},".son",[36,134149,16316],{"class":49},[36,134151,134152,134154,134156,134158],{"class":38,"line":78},[36,134153,133002],{"class":60},[36,134155,52179],{"class":49},[36,134157,55573],{"class":60},[36,134159,2040],{"class":49},[36,134161,134162,134164,134166,134168],{"class":38,"line":125},[36,134163,133016],{"class":60},[36,134165,52179],{"class":49},[36,134167,643],{"class":60},[36,134169,2040],{"class":49},[36,134171,134172,134174,134176,134178],{"class":38,"line":131},[36,134173,133033],{"class":60},[36,134175,52179],{"class":49},[36,134177,643],{"class":60},[36,134179,2040],{"class":49},[36,134181,134182],{"class":38,"line":396},[36,134183,2315],{"class":49},[36,134185,134186],{"class":38,"line":407},[36,134187,134188],{"class":42},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[36,134190,134191,134194],{"class":38,"line":2061},[36,134192,134193],{"class":2713},".father",[36,134195,16316],{"class":49},[36,134197,134198,134200,134202,134204],{"class":38,"line":2067},[36,134199,133002],{"class":60},[36,134201,52179],{"class":49},[36,134203,55506],{"class":60},[36,134205,2040],{"class":49},[36,134207,134208],{"class":38,"line":2079},[36,134209,2315],{"class":49},[14,134211,134212],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[868,134214,134216],{"id":134215},"_1114-定位数值的移动","11.1.4 定位数值的移动",[2212,134218],{"style":127052,"src":134219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,134221,134222],{},"✨ 黄金口诀：",[14,134224,134225],{},"\"TOP正下负上，LEFT正右负左\"",[14,134227,134228],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,134230,134231],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,134233,134234],{},"✨ 简单记：",[14,134236,134237],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[807,134239,134240],{},"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":46,"depth":46,"links":134242},[134243],{"id":132770,"depth":46,"text":132771,"children":134244},[134245,134246,134247,134248],{"id":132774,"depth":78,"text":132775},{"id":132789,"depth":78,"text":132790},{"id":132957,"depth":78,"text":132958},{"id":134215,"depth":78,"text":134216},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132762,"description":823},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134255,"title":134256,"body":134257,"description":823,"extension":824,"meta":135680,"navigation":193,"path":135681,"seo":135682,"stem":135683,"__hash__":135684},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134258,"toc":135659},[134259,134262,134266,134274,134278,134283,134291,134303,134307,134312,134320,134331,134335,134340,134381,134389,134393,134396,134399,134402,134496,134499,134593,134596,134690,134693,134696,134731,134734,134737,134767,134770,134773,134776,134779,134782,134785,134788,134858,134861,134865,134869,134910,134914,134920,134923,134926,134930,134933,134936,134939,135020,135023,135026,135030,135034,135037,135040,135043,135046,135049,135055,135064,135068,135087,135091,135101,135104,135107,135110,135113,135116,135119,135122,135125,135134,135138,135147,135150,135155,135208,135213,135379,135382,135385,135390,135393,135396,135399,135402,135407,135555,135558,135561,135566,135569,135574,135608,135611,135614,135618,135621,135628,135631,135634,135637,135640,135643,135646,135649,135653,135656],[10,134260,134256],{"id":134261},"_12-显示隐藏与图形资源",[21,134263,134265],{"id":134264},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1886,134267,134268,134271],{},[854,134269,134270],{},"目的:让一个元素在页面中消失或者显示出来",[854,134272,134273],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[868,134275,134277],{"id":134276},"_1211-display-显示","12.1.1 display 显示",[851,134279,134280],{},[854,134281,134282],{},"display 设置或检索对象是否及如何显示",[1886,134284,134285,134288],{},[854,134286,134287],{},"display: none;隐藏对象",[854,134289,134290],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[851,134292,134293,134300],{"start":46},[854,134294,134295,134296,134299],{},"特点： display 隐藏元素后， ",[1043,134297,134298],{},"不再占"," 有原来的位置",[854,134301,134302],{},"在js中使用非常的广泛",[868,134304,134306],{"id":134305},"_1212-visibility可见性","12.1.2 visibility可见性",[851,134308,134309],{},[854,134310,134311],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1886,134313,134314,134317],{},[854,134315,134316],{},"visibility： visible；元素可见",[854,134318,134319],{},"visibility：hidden；元素隐藏",[851,134321,134322,134325,134328],{"start":46},[854,134323,134324],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[854,134326,134327],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[854,134329,134330],{},"隐藏后继续占有原有位置",[868,134332,134334],{"id":134333},"_1213-overflow溢出","12.1.3 overflow溢出",[1886,134336,134337],{},[854,134338,134339],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[1031,134341,134342,134350],{},[1034,134343,134344],{},[1037,134345,134346,134348],{},[1040,134347,127660],{"align":24480},[1040,134349,28234],{"align":24480},[1078,134351,134352,134360,134367,134374],{},[1037,134353,134354,134357],{},[1083,134355,134356],{"align":24480},"visible",[1083,134358,134359],{"align":24480},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[1037,134361,134362,134364],{},[1083,134363,62456],{"align":24480},[1083,134365,134366],{"align":24480},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[1037,134368,134369,134371],{},[1083,134370,129616],{"align":24480},[1083,134372,134373],{"align":24480},"不管超出内容否，总是显示滚动条",[1037,134375,134376,134378],{},[1083,134377,73405],{"align":24480},[1083,134379,134380],{"align":24480},"超出自动显示滚动条，不超出不显示滚动条",[1886,134382,134383,134386],{},[854,134384,134385],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[854,134387,134388],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[868,134390,134392],{"id":134391},"_1214-案例收获","12.1.4 案例收获",[2212,134394],{"style":127052,"src":134395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,134397,134398],{},"问题：没做出来动态效果，使用hover没实现",[14,134400,134401],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[26,134403,134404],{"className":127196,"code":132628,"language":127198,"meta":31,"style":31},[33,134405,134406,134410,134424,134428,134442,134446,134460,134464,134478,134482],{"__ignoreMap":31},[36,134407,134408],{"class":38,"line":39},[36,134409,132635],{"class":42},[36,134411,134412,134414,134416,134418,134420,134422],{"class":38,"line":46},[36,134413,132640],{"class":2713},[36,134415,80549],{"class":49},[36,134417,129556],{"class":60},[36,134419,52179],{"class":49},[36,134421,132649],{"class":60},[36,134423,130126],{"class":49},[36,134425,134426],{"class":38,"line":78},[36,134427,132656],{"class":42},[36,134429,134430,134432,134434,134436,134438,134440],{"class":38,"line":125},[36,134431,132661],{"class":2713},[36,134433,80549],{"class":49},[36,134435,129556],{"class":60},[36,134437,52179],{"class":49},[36,134439,55506],{"class":60},[36,134441,130126],{"class":49},[36,134443,134444],{"class":38,"line":131},[36,134445,132676],{"class":42},[36,134447,134448,134450,134452,134454,134456,134458],{"class":38,"line":396},[36,134449,132681],{"class":2713},[36,134451,80549],{"class":49},[36,134453,129556],{"class":60},[36,134455,52179],{"class":49},[36,134457,55573],{"class":60},[36,134459,130126],{"class":49},[36,134461,134462],{"class":38,"line":407},[36,134463,132696],{"class":42},[36,134465,134466,134468,134470,134472,134474,134476],{"class":38,"line":2061},[36,134467,132701],{"class":2713},[36,134469,80549],{"class":49},[36,134471,129556],{"class":60},[36,134473,52179],{"class":49},[36,134475,86975],{"class":60},[36,134477,130126],{"class":49},[36,134479,134480],{"class":38,"line":2067},[36,134481,132716],{"class":42},[36,134483,134484,134486,134488,134490,134492,134494],{"class":38,"line":2079},[36,134485,132721],{"class":2713},[36,134487,80549],{"class":49},[36,134489,129556],{"class":60},[36,134491,52179],{"class":49},[36,134493,132730],{"class":60},[36,134495,130126],{"class":49},[14,134497,134498],{},"完整代码：",[26,134500,134501],{"className":127196,"code":132628,"language":127198,"meta":31,"style":31},[33,134502,134503,134507,134521,134525,134539,134543,134557,134561,134575,134579],{"__ignoreMap":31},[36,134504,134505],{"class":38,"line":39},[36,134506,132635],{"class":42},[36,134508,134509,134511,134513,134515,134517,134519],{"class":38,"line":46},[36,134510,132640],{"class":2713},[36,134512,80549],{"class":49},[36,134514,129556],{"class":60},[36,134516,52179],{"class":49},[36,134518,132649],{"class":60},[36,134520,130126],{"class":49},[36,134522,134523],{"class":38,"line":78},[36,134524,132656],{"class":42},[36,134526,134527,134529,134531,134533,134535,134537],{"class":38,"line":125},[36,134528,132661],{"class":2713},[36,134530,80549],{"class":49},[36,134532,129556],{"class":60},[36,134534,52179],{"class":49},[36,134536,55506],{"class":60},[36,134538,130126],{"class":49},[36,134540,134541],{"class":38,"line":131},[36,134542,132676],{"class":42},[36,134544,134545,134547,134549,134551,134553,134555],{"class":38,"line":396},[36,134546,132681],{"class":2713},[36,134548,80549],{"class":49},[36,134550,129556],{"class":60},[36,134552,52179],{"class":49},[36,134554,55573],{"class":60},[36,134556,130126],{"class":49},[36,134558,134559],{"class":38,"line":407},[36,134560,132696],{"class":42},[36,134562,134563,134565,134567,134569,134571,134573],{"class":38,"line":2061},[36,134564,132701],{"class":2713},[36,134566,80549],{"class":49},[36,134568,129556],{"class":60},[36,134570,52179],{"class":49},[36,134572,86975],{"class":60},[36,134574,130126],{"class":49},[36,134576,134577],{"class":38,"line":2067},[36,134578,132716],{"class":42},[36,134580,134581,134583,134585,134587,134589,134591],{"class":38,"line":2079},[36,134582,132721],{"class":2713},[36,134584,80549],{"class":49},[36,134586,129556],{"class":60},[36,134588,52179],{"class":49},[36,134590,132730],{"class":60},[36,134592,130126],{"class":49},[14,134594,134595],{},"分布思路重点详解：",[26,134597,134598],{"className":127196,"code":132628,"language":127198,"meta":31,"style":31},[33,134599,134600,134604,134618,134622,134636,134640,134654,134658,134672,134676],{"__ignoreMap":31},[36,134601,134602],{"class":38,"line":39},[36,134603,132635],{"class":42},[36,134605,134606,134608,134610,134612,134614,134616],{"class":38,"line":46},[36,134607,132640],{"class":2713},[36,134609,80549],{"class":49},[36,134611,129556],{"class":60},[36,134613,52179],{"class":49},[36,134615,132649],{"class":60},[36,134617,130126],{"class":49},[36,134619,134620],{"class":38,"line":78},[36,134621,132656],{"class":42},[36,134623,134624,134626,134628,134630,134632,134634],{"class":38,"line":125},[36,134625,132661],{"class":2713},[36,134627,80549],{"class":49},[36,134629,129556],{"class":60},[36,134631,52179],{"class":49},[36,134633,55506],{"class":60},[36,134635,130126],{"class":49},[36,134637,134638],{"class":38,"line":131},[36,134639,132676],{"class":42},[36,134641,134642,134644,134646,134648,134650,134652],{"class":38,"line":396},[36,134643,132681],{"class":2713},[36,134645,80549],{"class":49},[36,134647,129556],{"class":60},[36,134649,52179],{"class":49},[36,134651,55573],{"class":60},[36,134653,130126],{"class":49},[36,134655,134656],{"class":38,"line":407},[36,134657,132696],{"class":42},[36,134659,134660,134662,134664,134666,134668,134670],{"class":38,"line":2061},[36,134661,132701],{"class":2713},[36,134663,80549],{"class":49},[36,134665,129556],{"class":60},[36,134667,52179],{"class":49},[36,134669,86975],{"class":60},[36,134671,130126],{"class":49},[36,134673,134674],{"class":38,"line":2067},[36,134675,132716],{"class":42},[36,134677,134678,134680,134682,134684,134686,134688],{"class":38,"line":2079},[36,134679,132721],{"class":2713},[36,134681,80549],{"class":49},[36,134683,129556],{"class":60},[36,134685,52179],{"class":49},[36,134687,132730],{"class":60},[36,134689,130126],{"class":49},[2212,134691],{"style":127052,"src":134692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134694,134695],{},"图片太大，盒子太小，此时需要修改图片的大小",[26,134697,134699],{"className":127943,"code":134698,"language":127945,"meta":31,"style":31},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[33,134700,134701],{"__ignoreMap":31},[36,134702,134703,134705,134707,134709,134711,134714,134716,134718,134721,134724,134726,134729],{"class":38,"line":39},[36,134704,1789],{"class":49},[36,134706,2212],{"class":52042},[36,134708,55981],{"class":2713},[36,134710,54],{"class":49},[36,134712,134713],{"class":998},"\"images\u002Fpic.jpg\"",[36,134715,55989],{"class":2713},[36,134717,54],{"class":49},[36,134719,134720],{"class":998},"\"描述文字\"",[36,134722,134723],{"class":2713}," title",[36,134725,54],{"class":49},[36,134727,134728],{"class":998},"\"悬停提示\"",[36,134730,52049],{"class":49},[2212,134732],{"style":127052,"src":134733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134735,134736],{},"制造遮罩层",[26,134738,134739],{"className":127943,"code":134698,"language":127945,"meta":31,"style":31},[33,134740,134741],{"__ignoreMap":31},[36,134742,134743,134745,134747,134749,134751,134753,134755,134757,134759,134761,134763,134765],{"class":38,"line":39},[36,134744,1789],{"class":49},[36,134746,2212],{"class":52042},[36,134748,55981],{"class":2713},[36,134750,54],{"class":49},[36,134752,134713],{"class":998},[36,134754,55989],{"class":2713},[36,134756,54],{"class":49},[36,134758,134720],{"class":998},[36,134760,134723],{"class":2713},[36,134762,54],{"class":49},[36,134764,134728],{"class":998},[36,134766,52049],{"class":49},[14,134768,134769],{},"此时是这样的为标准流",[2212,134771],{"style":127052,"src":134772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134774,134775],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134777,134778],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134780,134781],{},"让他在中间，用center(background-position)",[14,134783,134784],{},"将需要变的尽可能放到一个盒子中",[14,134786,134787],{},"放大盒子上内部盒子发生变化",[26,134789,134791],{"className":127196,"code":134790,"language":127198,"meta":31,"style":31},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[33,134792,134793,134799,134809,134813,134820,134830,134842,134854],{"__ignoreMap":31},[36,134794,134795,134797],{"class":38,"line":39},[36,134796,128263],{"class":2713},[36,134798,16316],{"class":49},[36,134800,134801,134803,134805,134807],{"class":38,"line":46},[36,134802,133002],{"class":60},[36,134804,52179],{"class":49},[36,134806,55506],{"class":60},[36,134808,2040],{"class":49},[36,134810,134811],{"class":38,"line":78},[36,134812,2315],{"class":49},[36,134814,134815,134818],{"class":38,"line":125},[36,134816,134817],{"class":2713},".child",[36,134819,16316],{"class":49},[36,134821,134822,134824,134826,134828],{"class":38,"line":131},[36,134823,133002],{"class":60},[36,134825,52179],{"class":49},[36,134827,55573],{"class":60},[36,134829,2040],{"class":49},[36,134831,134832,134834,134836,134838,134840],{"class":38,"line":396},[36,134833,133016],{"class":60},[36,134835,52179],{"class":49},[36,134837,1538],{"class":60},[36,134839,1214],{"class":53},[36,134841,2040],{"class":49},[36,134843,134844,134846,134848,134850,134852],{"class":38,"line":407},[36,134845,133033],{"class":60},[36,134847,52179],{"class":49},[36,134849,1538],{"class":60},[36,134851,1214],{"class":53},[36,134853,2040],{"class":49},[36,134855,134856],{"class":38,"line":2061},[36,134857,2315],{"class":49},[14,134859,134860],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[21,134862,134864],{"id":134863},"_122-精灵图","12.2 精灵图",[868,134866,134868],{"id":134867},"_1221-理解","12.2.1 理解",[851,134870,134871,134889],{},[854,134872,134873,134874,133102,134877,134880,134881,134884,134885,134888],{},"目的： ",[1043,134875,134876],{},"为了有效地减少服务器接收和发送请求的次数",[1043,134878,134879],{},"提高"," 页面的 ",[1043,134882,134883],{},"加载速度"," ，出现了 ",[1043,134886,134887],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[854,134890,134891,134892,134894,134895,134897,134898,134900,134901,134903,134904,134906,134907,134909],{},"使用精灵图核心：",[54458,134893],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54458,134896],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54458,134899],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54458,134902],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54458,134905],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54458,134908],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[868,134911,134913],{"id":134912},"_1222-扒图","12.2.2 扒图",[26,134915,134918],{"className":134916,"code":134917,"language":5935},[5933],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[33,134919,134917],{"__ignoreMap":31},[2212,134921],{"style":127052,"src":134922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[2212,134924],{"style":127052,"src":134925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[868,134927,134929],{"id":134928},"_1223-精灵图的实现","12.2.3 精灵图的实现",[2212,134931],{"style":127052,"src":134932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134934,134935],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[2212,134937],{"style":127052,"src":134938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[26,134940,134942],{"className":127196,"code":134941,"language":127198,"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,134943,134944,134949,134956,134968,134980,134999,135016],{"__ignoreMap":31},[36,134945,134946],{"class":38,"line":39},[36,134947,134948],{"class":42},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[36,134950,134951,134954],{"class":38,"line":46},[36,134952,134953],{"class":2713},".icon",[36,134955,16316],{"class":49},[36,134957,134958,134960,134962,134964,134966],{"class":38,"line":78},[36,134959,71310],{"class":60},[36,134961,52179],{"class":49},[36,134963,72],{"class":60},[36,134965,52234],{"class":53},[36,134967,2040],{"class":49},[36,134969,134970,134972,134974,134976,134978],{"class":38,"line":125},[36,134971,71530],{"class":60},[36,134973,52179],{"class":49},[36,134975,72],{"class":60},[36,134977,52234],{"class":53},[36,134979,2040],{"class":49},[36,134981,134982,134984,134986,134988,134990,134993,134995,134997],{"class":38,"line":131},[36,134983,71353],{"class":60},[36,134985,52179],{"class":49},[36,134987,62468],{"class":60},[36,134989,901],{"class":49},[36,134991,134992],{"class":416},"sprites.png",[36,134994,14458],{"class":49},[36,134996,62478],{"class":60},[36,134998,2040],{"class":49},[36,135000,135001,135003,135005,135007,135009,135012,135014],{"class":38,"line":396},[36,135002,129456],{"class":60},[36,135004,52179],{"class":49},[36,135006,52505],{"class":60},[36,135008,52234],{"class":53},[36,135010,135011],{"class":60}," -20",[36,135013,52234],{"class":53},[36,135015,2040],{"class":49},[36,135017,135018],{"class":38,"line":407},[36,135019,2315],{"class":49},[2212,135021],{"style":127052,"src":135022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,135024,135025],{},"在前端中坐标轴的正方向是右和下",[21,135027,135029],{"id":135028},"_123-字体图标","12.3 字体图标",[868,135031,135033],{"id":135032},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,135035,135036],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,135038,135039],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,135041,135042],{},"1.图片文件还是比较大的。",[14,135044,135045],{},"2.图片本身放大和缩小会失真。",[14,135047,135048],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,135050,135051,135052,26485],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[1043,135053,135054],{},"字体图标 iconfont",[14,135056,135057,135060,135061,29130],{},[1043,135058,135059],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[1043,135062,135063],{},"展示的是图标，本质属于字体",[868,135065,135067],{"id":135066},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1886,135069,135070,135075,135078,135081,135084],{},[854,135071,135072,135074],{},[1043,135073,26621],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[854,135076,135077],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[854,135079,135080],{},"兼容性：几乎支持所有的浏览器，请放心使用",[854,135082,135083],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[854,135085,135086],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[868,135088,135090],{"id":135089},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1886,135092,135093],{},[854,135094,135095,135096],{},"icomoon字体库：",[50,135097,135100],{"href":135098,"rel":135099},"http:\u002F\u002Ficomoon.io\u002F",[24609],"http:\u002F\u002Ficomoon.io",[14,135102,135103],{},"进去之后点icomoon app",[2212,135105],{"style":127052,"src":135106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,135108,135109],{},"可以对其编辑：",[2212,135111],{"style":127052,"src":135112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,135114,135115],{},"生成字体：",[2212,135117],{"style":127052,"src":135118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,135120,135121],{},"下载：",[2212,135123],{"style":127052,"src":135124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1886,135126,135127],{},[854,135128,135129,135130],{},"阿里iconfont字体库： ",[50,135131,135132],{"href":135132,"rel":135133},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24609],[868,135135,135137],{"id":135136},"_1234-字体图标的引入","12.3.4 字体图标的引入",[851,135139,135140],{},[854,135141,135142,135143,135146],{},"把下载包里面的 ",[1043,135144,135145],{},"fonts"," 文件夹放入页面根目录下",[2212,135148],{"style":127052,"src":135149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[851,135151,135152],{"start":46},[854,135153,135154],{},"字体文件格式",[1031,135156,135157,135166],{},[1034,135158,135159],{},[1037,135160,135161,135164],{},[1040,135162,135163],{"align":24480},"格式",[1040,135165,24484],{"align":24480},[1078,135167,135168,135178,135188,135198],{},[1037,135169,135170,135175],{},[1083,135171,135172],{"align":24480},[1043,135173,135174],{},".ttf",[1083,135176,135177],{"align":24480},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[1037,135179,135180,135185],{},[1083,135181,135182],{"align":24480},[1043,135183,135184],{},".woff",[1083,135186,135187],{"align":24480},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[1037,135189,135190,135195],{},[1083,135191,135192],{"align":24480},[1043,135193,135194],{},".eot",[1083,135196,135197],{"align":24480},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[1037,135199,135200,135205],{},[1083,135201,135202],{"align":24480},[1043,135203,135204],{},"svg",[1083,135206,135207],{"align":24480},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[851,135209,135210],{"start":78},[854,135211,135212],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[26,135214,135216],{"className":127196,"code":135215,"language":127198,"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,135217,135218,135223,135230,135242,135258,135283,135304,135324,135344,135348,135354,135364,135375],{"__ignoreMap":31},[36,135219,135220],{"class":38,"line":39},[36,135221,135222],{"class":42},"\u002F* 引入字体图标 *\u002F\n",[36,135224,135225,135228],{"class":38,"line":46},[36,135226,135227],{"class":53},"@font-face",[36,135229,16316],{"class":49},[36,135231,135232,135235,135237,135240],{"class":38,"line":78},[36,135233,135234],{"class":60},"  font-family",[36,135236,52179],{"class":49},[36,135238,135239],{"class":998},"'icomoon'",[36,135241,2040],{"class":49},[36,135243,135244,135247,135249,135251,135253,135256],{"class":38,"line":125},[36,135245,135246],{"class":60},"  src",[36,135248,52179],{"class":49},[36,135250,62468],{"class":60},[36,135252,901],{"class":49},[36,135254,135255],{"class":998},"'fonts\u002Ficomoon.eot'",[36,135257,3468],{"class":49},[36,135259,135260,135262,135264,135266,135268,135271,135273,135276,135278,135281],{"class":38,"line":131},[36,135261,135246],{"class":60},[36,135263,52179],{"class":49},[36,135265,62468],{"class":60},[36,135267,901],{"class":49},[36,135269,135270],{"class":998},"'fonts\u002Ficomoon.eot?#iefix'",[36,135272,14458],{"class":49},[36,135274,135275],{"class":60},"format",[36,135277,901],{"class":49},[36,135279,135280],{"class":998},"'embedded-opentype'",[36,135282,38789],{"class":49},[36,135284,135285,135288,135290,135293,135295,135297,135299,135302],{"class":38,"line":396},[36,135286,135287],{"class":60},"       url",[36,135289,901],{"class":49},[36,135291,135292],{"class":998},"'fonts\u002Ficomoon.woff'",[36,135294,14458],{"class":49},[36,135296,135275],{"class":60},[36,135298,901],{"class":49},[36,135300,135301],{"class":998},"'woff'",[36,135303,38789],{"class":49},[36,135305,135306,135308,135310,135313,135315,135317,135319,135322],{"class":38,"line":407},[36,135307,135287],{"class":60},[36,135309,901],{"class":49},[36,135311,135312],{"class":998},"'fonts\u002Ficomoon.ttf'",[36,135314,14458],{"class":49},[36,135316,135275],{"class":60},[36,135318,901],{"class":49},[36,135320,135321],{"class":998},"'truetype'",[36,135323,38789],{"class":49},[36,135325,135326,135328,135330,135333,135335,135337,135339,135342],{"class":38,"line":2061},[36,135327,135287],{"class":60},[36,135329,901],{"class":49},[36,135331,135332],{"class":998},"'fonts\u002Ficomoon.svg#icomoon'",[36,135334,14458],{"class":49},[36,135336,135275],{"class":60},[36,135338,901],{"class":49},[36,135340,135341],{"class":998},"'svg'",[36,135343,3468],{"class":49},[36,135345,135346],{"class":38,"line":2067},[36,135347,2315],{"class":49},[36,135349,135350,135352],{"class":38,"line":2079},[36,135351,134953],{"class":2713},[36,135353,16316],{"class":49},[36,135355,135356,135358,135360,135362],{"class":38,"line":2362},[36,135357,135234],{"class":60},[36,135359,52179],{"class":49},[36,135361,135239],{"class":998},[36,135363,2040],{"class":49},[36,135365,135366,135369,135371,135373],{"class":38,"line":2367},[36,135367,135368],{"class":60},"  font-style",[36,135370,52179],{"class":49},[36,135372,64583],{"class":60},[36,135374,2040],{"class":49},[36,135376,135377],{"class":38,"line":2373},[36,135378,2315],{"class":49},[14,135380,135381],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[2212,135383],{"style":127052,"src":135384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[851,135386,135387],{"start":125},[854,135388,135389],{},"添加字体",[2212,135391],{"style":127052,"src":135392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,135394,135395],{},"复制：",[2212,135397],{"style":127052,"src":135398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,135400,135401],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[851,135403,135404],{"start":131},[854,135405,135406],{},"代码展示：",[26,135408,135409],{"className":127196,"code":135215,"language":127198,"meta":31,"style":31},[33,135410,135411,135415,135421,135431,135445,135467,135485,135503,135521,135525,135531,135541,135551],{"__ignoreMap":31},[36,135412,135413],{"class":38,"line":39},[36,135414,135222],{"class":42},[36,135416,135417,135419],{"class":38,"line":46},[36,135418,135227],{"class":53},[36,135420,16316],{"class":49},[36,135422,135423,135425,135427,135429],{"class":38,"line":78},[36,135424,135234],{"class":60},[36,135426,52179],{"class":49},[36,135428,135239],{"class":998},[36,135430,2040],{"class":49},[36,135432,135433,135435,135437,135439,135441,135443],{"class":38,"line":125},[36,135434,135246],{"class":60},[36,135436,52179],{"class":49},[36,135438,62468],{"class":60},[36,135440,901],{"class":49},[36,135442,135255],{"class":998},[36,135444,3468],{"class":49},[36,135446,135447,135449,135451,135453,135455,135457,135459,135461,135463,135465],{"class":38,"line":131},[36,135448,135246],{"class":60},[36,135450,52179],{"class":49},[36,135452,62468],{"class":60},[36,135454,901],{"class":49},[36,135456,135270],{"class":998},[36,135458,14458],{"class":49},[36,135460,135275],{"class":60},[36,135462,901],{"class":49},[36,135464,135280],{"class":998},[36,135466,38789],{"class":49},[36,135468,135469,135471,135473,135475,135477,135479,135481,135483],{"class":38,"line":396},[36,135470,135287],{"class":60},[36,135472,901],{"class":49},[36,135474,135292],{"class":998},[36,135476,14458],{"class":49},[36,135478,135275],{"class":60},[36,135480,901],{"class":49},[36,135482,135301],{"class":998},[36,135484,38789],{"class":49},[36,135486,135487,135489,135491,135493,135495,135497,135499,135501],{"class":38,"line":407},[36,135488,135287],{"class":60},[36,135490,901],{"class":49},[36,135492,135312],{"class":998},[36,135494,14458],{"class":49},[36,135496,135275],{"class":60},[36,135498,901],{"class":49},[36,135500,135321],{"class":998},[36,135502,38789],{"class":49},[36,135504,135505,135507,135509,135511,135513,135515,135517,135519],{"class":38,"line":2061},[36,135506,135287],{"class":60},[36,135508,901],{"class":49},[36,135510,135332],{"class":998},[36,135512,14458],{"class":49},[36,135514,135275],{"class":60},[36,135516,901],{"class":49},[36,135518,135341],{"class":998},[36,135520,3468],{"class":49},[36,135522,135523],{"class":38,"line":2067},[36,135524,2315],{"class":49},[36,135526,135527,135529],{"class":38,"line":2079},[36,135528,134953],{"class":2713},[36,135530,16316],{"class":49},[36,135532,135533,135535,135537,135539],{"class":38,"line":2362},[36,135534,135234],{"class":60},[36,135536,52179],{"class":49},[36,135538,135239],{"class":998},[36,135540,2040],{"class":49},[36,135542,135543,135545,135547,135549],{"class":38,"line":2367},[36,135544,135368],{"class":60},[36,135546,52179],{"class":49},[36,135548,64583],{"class":60},[36,135550,2040],{"class":49},[36,135552,135553],{"class":38,"line":2373},[36,135554,2315],{"class":49},[2212,135556],{"style":127052,"src":135557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,135559,135560],{},"更加细节展示：",[851,135562,135563],{},[854,135564,135565],{},"html 标签内添加小图标",[2212,135567],{"style":127052,"src":135568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[851,135570,135571],{"start":46},[854,135572,135573],{},"给标签定义字体",[26,135575,135576],{"className":127943,"code":131300,"language":127945,"meta":31,"style":31},[33,135577,135578,135582,135596,135600],{"__ignoreMap":31},[36,135579,135580],{"class":38,"line":39},[36,135581,131307],{"class":42},[36,135583,135584,135586,135588,135590,135592,135594],{"class":38,"line":46},[36,135585,1789],{"class":49},[36,135587,52353],{"class":52042},[36,135589,54228],{"class":2713},[36,135591,54],{"class":49},[36,135593,131320],{"class":998},[36,135595,52049],{"class":49},[36,135597,135598],{"class":38,"line":78},[36,135599,131327],{"class":49},[36,135601,135602,135604,135606],{"class":38,"line":125},[36,135603,52527],{"class":49},[36,135605,52353],{"class":52042},[36,135607,52049],{"class":49},[14,135609,135610],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[2212,135612],{"style":127052,"src":135613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[868,135615,135617],{"id":135616},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,135619,135620],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,135622,135623,135624,135627],{},"把压缩包里面的 ",[1043,135625,135626],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,135629,135630],{},"打开网站，点下方：",[2212,135632],{"style":127052,"src":135633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[2212,135635],{"style":127052,"src":135636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[2212,135638],{"style":127052,"src":135639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,135641,135642],{},"点yes重新加载",[14,135644,135645],{},"然后重复之前的操作就可以实现了",[14,135647,135648],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[868,135650,135652],{"id":135651},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[2212,135654],{"style":127052,"src":135655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[807,135657,135658],{},"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":46,"depth":46,"links":135660},[135661,135667,135672],{"id":134264,"depth":46,"text":134265,"children":135662},[135663,135664,135665,135666],{"id":134276,"depth":78,"text":134277},{"id":134305,"depth":78,"text":134306},{"id":134333,"depth":78,"text":134334},{"id":134391,"depth":78,"text":134392},{"id":134863,"depth":46,"text":134864,"children":135668},[135669,135670,135671],{"id":134867,"depth":78,"text":134868},{"id":134912,"depth":78,"text":134913},{"id":134928,"depth":78,"text":134929},{"id":135028,"depth":46,"text":135029,"children":135673},[135674,135675,135676,135677,135678,135679],{"id":135032,"depth":78,"text":135033},{"id":135066,"depth":78,"text":135067},{"id":135089,"depth":78,"text":135090},{"id":135136,"depth":78,"text":135137},{"id":135616,"depth":78,"text":135617},{"id":135651,"depth":78,"text":135652},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134256,"description":823},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135686,"title":135687,"body":135688,"description":823,"extension":824,"meta":136915,"navigation":193,"path":136916,"seo":136917,"stem":136918,"__hash__":136919},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135689,"toc":136896},[135690,135693,135697,135700,135714,135782,135812,135815,135819,135823,135925,135972,135976,135979,135982,136016,136019,136022,136025,136028,136031,136034,136037,136039,136042,136045,136048,136051,136054,136057,136060,136088,136091,136095,136098,136105,136108,136111,136137,136140,136144,136147,136150,136157,136161,136164,136166,136198,136201,136204,136216,136222,136225,136228,136231,136233,136237,136240,136243,136246,136291,136295,136297,136300,136307,136349,136352,136356,136361,136375,136379,136382,136385,136388,136391,136394,136428,136431,136434,136488,136491,136494,136497,136500,136552,136555,136558,136607,136611,136613,136616,136619,136622,136625,136628,136686,136689,136695,136698,136701,136733,136736,136740,136744,136747,136779,136783,136786,136830,136834,136837,136840,136843,136846,136849,136852,136855,136857,136860,136862,136865,136868,136871,136874,136879,136882,136884,136887,136890,136893],[10,135691,135687],{"id":135692},"_13-界面样式与布局技巧",[21,135694,135696],{"id":135695},"_131-css三角","13.1 css三角",[14,135698,135699],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1886,135701,135702,135705,135708,135711],{},[854,135703,135704],{},"用css 边框可以模拟三角效果",[854,135706,135707],{},"宽度高度为0",[854,135709,135710],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[854,135712,135713],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[26,135715,135717],{"className":127196,"code":135716,"language":127198,"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,135718,135719,135724,135731,135741,135751,135767,135778],{"__ignoreMap":31},[36,135720,135721],{"class":38,"line":39},[36,135722,135723],{"class":42},"\u002F* CSS 实现三角形 *\u002F\n",[36,135725,135726,135729],{"class":38,"line":46},[36,135727,135728],{"class":2713},".triangle",[36,135730,16316],{"class":49},[36,135732,135733,135735,135737,135739],{"class":38,"line":78},[36,135734,71310],{"class":60},[36,135736,52179],{"class":49},[36,135738,643],{"class":60},[36,135740,2040],{"class":49},[36,135742,135743,135745,135747,135749],{"class":38,"line":125},[36,135744,71530],{"class":60},[36,135746,52179],{"class":49},[36,135748,643],{"class":60},[36,135750,2040],{"class":49},[36,135752,135753,135755,135757,135759,135761,135763,135765],{"class":38,"line":131},[36,135754,71638],{"class":60},[36,135756,52179],{"class":49},[36,135758,332],{"class":60},[36,135760,52234],{"class":53},[36,135762,52263],{"class":60},[36,135764,64733],{"class":60},[36,135766,2040],{"class":49},[36,135768,135769,135772,135774,135776],{"class":38,"line":396},[36,135770,135771],{"class":60},"  border-bottom-color",[36,135773,52179],{"class":49},[36,135775,63111],{"class":60},[36,135777,2040],{"class":49},[36,135779,135780],{"class":38,"line":407},[36,135781,2315],{"class":49},[26,135783,135784],{"className":127196,"code":131353,"language":127198,"meta":31,"style":31},[33,135785,135786,135792,135808],{"__ignoreMap":31},[36,135787,135788,135790],{"class":38,"line":39},[36,135789,52353],{"class":52042},[36,135791,16316],{"class":49},[36,135793,135794,135796,135798,135800,135802,135804,135806],{"class":38,"line":46},[36,135795,71638],{"class":60},[36,135797,52179],{"class":49},[36,135799,61],{"class":60},[36,135801,52234],{"class":53},[36,135803,52263],{"class":60},[36,135805,130588],{"class":60},[36,135807,2040],{"class":49},[36,135809,135810],{"class":38,"line":78},[36,135811,2315],{"class":49},[2212,135813],{"style":127052,"src":135814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[21,135816,135818],{"id":135817},"_132-css用户界面样式","13.2 css用户界面样式",[868,135820,135822],{"id":135821},"_1321-鼠标样式","13.2.1 鼠标样式",[26,135824,135826],{"className":127196,"code":135825,"language":127198,"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,135827,135828,135833,135852,135870,135889,135906],{"__ignoreMap":31},[36,135829,135830],{"class":38,"line":39},[36,135831,135832],{"class":42},"\u002F* 鼠标样式 *\u002F\n",[36,135834,135835,135837,135839,135842,135844,135846,135849],{"class":38,"line":46},[36,135836,52353],{"class":52042},[36,135838,80549],{"class":49},[36,135840,135841],{"class":60},"cursor",[36,135843,52179],{"class":49},[36,135845,62772],{"class":60},[36,135847,135848],{"class":49},"; }   ",[36,135850,135851],{"class":42},"\u002F* 手型 *\u002F\n",[36,135853,135854,135856,135858,135860,135862,135865,135867],{"class":38,"line":78},[36,135855,52353],{"class":52042},[36,135857,80549],{"class":49},[36,135859,135841],{"class":60},[36,135861,52179],{"class":49},[36,135863,135864],{"class":60},"default",[36,135866,135848],{"class":49},[36,135868,135869],{"class":42},"\u002F* 默认 *\u002F\n",[36,135871,135872,135874,135876,135878,135880,135883,135886],{"class":38,"line":125},[36,135873,52353],{"class":52042},[36,135875,80549],{"class":49},[36,135877,135841],{"class":60},[36,135879,52179],{"class":49},[36,135881,135882],{"class":60},"move",[36,135884,135885],{"class":49},"; }      ",[36,135887,135888],{"class":42},"\u002F* 移动 *\u002F\n",[36,135890,135891,135893,135895,135897,135899,135901,135903],{"class":38,"line":131},[36,135892,52353],{"class":52042},[36,135894,80549],{"class":49},[36,135896,135841],{"class":60},[36,135898,52179],{"class":49},[36,135900,5935],{"class":60},[36,135902,135885],{"class":49},[36,135904,135905],{"class":42},"\u002F* 文本 *\u002F\n",[36,135907,135908,135910,135912,135914,135916,135919,135922],{"class":38,"line":396},[36,135909,52353],{"class":52042},[36,135911,80549],{"class":49},[36,135913,135841],{"class":60},[36,135915,52179],{"class":49},[36,135917,135918],{"class":60},"not-allowed",[36,135920,135921],{"class":49},"; } ",[36,135923,135924],{"class":42},"\u002F* 禁止 *\u002F\n",[1031,135926,135927,135935],{},[1034,135928,135929],{},[1037,135930,135931,135933],{},[1040,135932,127660],{"align":24480},[1040,135934,28234],{"align":24480},[1078,135936,135937,135944,135951,135958,135965],{},[1037,135938,135939,135941],{},[1083,135940,135864],{"align":24480},[1083,135942,135943],{"align":24480},"小白 默认",[1037,135945,135946,135948],{},[1083,135947,62772],{"align":24480},[1083,135949,135950],{"align":24480},"小手",[1037,135952,135953,135955],{},[1083,135954,135882],{"align":24480},[1083,135956,135957],{"align":24480},"移动",[1037,135959,135960,135962],{},[1083,135961,5935],{"align":24480},[1083,135963,135964],{"align":24480},"文本",[1037,135966,135967,135969],{},[1083,135968,135918],{"align":24480},[1083,135970,135971],{"align":24480},"禁止",[868,135973,135975],{"id":135974},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135977,135978],{},"去除表单轮廓线",[14,135980,135981],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[26,135983,135984],{"className":127196,"code":130560,"language":127198,"meta":31,"style":31},[33,135985,135986,135990,135996,136012],{"__ignoreMap":31},[36,135987,135988],{"class":38,"line":39},[36,135989,130567],{"class":42},[36,135991,135992,135994],{"class":38,"line":46},[36,135993,52353],{"class":52042},[36,135995,16316],{"class":49},[36,135997,135998,136000,136002,136004,136006,136008,136010],{"class":38,"line":78},[36,135999,71638],{"class":60},[36,136001,52179],{"class":49},[36,136003,61],{"class":60},[36,136005,52234],{"class":53},[36,136007,52263],{"class":60},[36,136009,130588],{"class":60},[36,136011,2040],{"class":49},[36,136013,136014],{"class":38,"line":125},[36,136015,2315],{"class":49},[14,136017,136018],{},"文本域：",[2212,136020],{"style":127052,"src":136021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,136023,136024],{},"此时会有一个空白区域",[2212,136026],{"style":127052,"src":136027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,136029,136030],{},"写在同一行就不会出现这个问题",[2212,136032],{"style":127052,"src":136033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,136035,136036],{},"文本域是行内块元素，一定记住！！！",[14,136038,98877],{},[2212,136040],{"style":127052,"src":136041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,136043,136044],{},"文本域尽量放在一行",[14,136046,136047],{},"知识回顾：cols是列，rols是行",[2212,136049],{"style":127052,"src":136050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,136052,136053],{},"它可以进行拖动，显然这是我们不愿意看到的",[2212,136055],{"style":127052,"src":136056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,136058,136059],{},"使用resize进行解决",[26,136061,136063],{"className":127196,"code":136062,"language":127198,"meta":31,"style":31},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[33,136064,136065,136071,136084],{"__ignoreMap":31},[36,136066,136067,136069],{"class":38,"line":39},[36,136068,54563],{"class":52042},[36,136070,16316],{"class":49},[36,136072,136073,136075,136077,136079,136081],{"class":38,"line":46},[36,136074,71540],{"class":60},[36,136076,52179],{"class":49},[36,136078,55479],{"class":60},[36,136080,131059],{"class":49},[36,136082,136083],{"class":42},"\u002F* 取消表单轮廓线 *\u002F\n",[36,136085,136086],{"class":38,"line":78},[36,136087,2315],{"class":49},[14,136089,136090],{},"此时就无法通过右下方实现拖动了",[868,136092,136094],{"id":136093},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,136096,136097],{},"实现一个盒子中的文字和图片对齐",[14,136099,136100,136101,136104],{},"用于设置一个元素的 ",[1043,136102,136103],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,136106,136107],{},"图片和文字默认是基线对齐",[2212,136109],{"style":127052,"src":136110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[26,136112,136113],{"className":127196,"code":136062,"language":127198,"meta":31,"style":31},[33,136114,136115,136121,136133],{"__ignoreMap":31},[36,136116,136117,136119],{"class":38,"line":39},[36,136118,54563],{"class":52042},[36,136120,16316],{"class":49},[36,136122,136123,136125,136127,136129,136131],{"class":38,"line":46},[36,136124,71540],{"class":60},[36,136126,52179],{"class":49},[36,136128,55479],{"class":60},[36,136130,131059],{"class":49},[36,136132,136083],{"class":42},[36,136134,136135],{"class":38,"line":78},[36,136136,2315],{"class":49},[2212,136138],{"style":127052,"src":136139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22742,136141,136143],{"id":136142},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,136145,136146],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[2212,136148],{"style":127052,"src":136149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,136151,136152,136153,136156],{},"此时可以给图片、表单这些行内块元素的 ",[1043,136154,136155],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22742,136158,136160],{"id":136159},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,136162,136163],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,136165,15377],{},[26,136167,136169],{"className":127196,"code":136168,"language":127198,"meta":31,"style":31},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[33,136170,136171,136176,136182,136194],{"__ignoreMap":31},[36,136172,136173],{"class":38,"line":39},[36,136174,136175],{"class":42},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[36,136177,136178,136180],{"class":38,"line":46},[36,136179,2212],{"class":52042},[36,136181,16316],{"class":49},[36,136183,136184,136187,136189,136192],{"class":38,"line":78},[36,136185,136186],{"class":60},"  vertical-align",[36,136188,52179],{"class":49},[36,136190,136191],{"class":60},"middle",[36,136193,2040],{"class":49},[36,136195,136196],{"class":38,"line":125},[36,136197,2315],{"class":49},[2212,136199],{"style":127052,"src":136200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,136202,136203],{},"主要解决方法有两种：",[851,136205,136206],{},[854,136207,136208,136211,136212,136215],{},[1043,136209,136210],{},"给图片"," 添加 ",[1043,136213,136214],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,136217,136218,136219],{},"2.把图片转换为块级元素 ",[1043,136220,136221],{},"display: block",[14,136223,136224],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,136226,136227],{},"img {",[14,136229,136230],{},"vertical-align:middle;",[14,136232,1825],{},[868,136234,136236],{"id":136235},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,136238,136239],{},"效果：",[2212,136241],{"style":127052,"src":136242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,136244,136245],{},"单行文本溢出显示省略号--必须满足三个条件：",[26,136247,136249],{"className":127196,"code":136248,"language":127198,"meta":31,"style":31},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[33,136250,136251,136256,136262,136272,136277,136287],{"__ignoreMap":31},[36,136252,136253],{"class":38,"line":39},[36,136254,136255],{"class":42},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[36,136257,136258,136260],{"class":38,"line":46},[36,136259,2212],{"class":52042},[36,136261,16316],{"class":49},[36,136263,136264,136266,136268,136270],{"class":38,"line":78},[36,136265,136186],{"class":60},[36,136267,52179],{"class":49},[36,136269,136191],{"class":60},[36,136271,2040],{"class":49},[36,136273,136274],{"class":38,"line":125},[36,136275,136276],{"class":42},"  \u002F* 或 *\u002F\n",[36,136278,136279,136281,136283,136285],{"class":38,"line":131},[36,136280,128812],{"class":60},[36,136282,52179],{"class":49},[36,136284,61611],{"class":60},[36,136286,2040],{"class":49},[36,136288,136289],{"class":38,"line":396},[36,136290,2315],{"class":49},[868,136292,136294],{"id":136293},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,136296,136239],{},[2212,136298],{"style":127052,"src":136299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,136301,136302,136303,136306],{},"多行文本溢出显示省略号， ",[1043,136304,136305],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[26,136308,136309],{"className":127196,"code":136248,"language":127198,"meta":31,"style":31},[33,136310,136311,136315,136321,136331,136335,136345],{"__ignoreMap":31},[36,136312,136313],{"class":38,"line":39},[36,136314,136255],{"class":42},[36,136316,136317,136319],{"class":38,"line":46},[36,136318,2212],{"class":52042},[36,136320,16316],{"class":49},[36,136322,136323,136325,136327,136329],{"class":38,"line":78},[36,136324,136186],{"class":60},[36,136326,52179],{"class":49},[36,136328,136191],{"class":60},[36,136330,2040],{"class":49},[36,136332,136333],{"class":38,"line":125},[36,136334,136276],{"class":42},[36,136336,136337,136339,136341,136343],{"class":38,"line":131},[36,136338,128812],{"class":60},[36,136340,52179],{"class":49},[36,136342,61611],{"class":60},[36,136344,2040],{"class":49},[36,136346,136347],{"class":38,"line":396},[36,136348,2315],{"class":49},[14,136350,136351],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[21,136353,136355],{"id":136354},"_133-常见布局技巧","13.3 常见布局技巧",[14,136357,136358],{},[1043,136359,136360],{},"巧妙利用一个技术更快更好的布局：",[851,136362,136363,136366,136369,136372],{},[854,136364,136365],{},"margin负值的运用",[854,136367,136368],{},"文字围绕浮动元素",[854,136370,136371],{},"行内块的巧妙运用",[854,136373,136374],{},"CSS三角强化",[868,136376,136378],{"id":136377},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,136380,136381],{},"应用场景：",[2212,136383],{"style":127052,"src":136384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[2212,136386],{"style":127052,"src":136387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,136389,136390],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,136392,136393],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[26,136395,136396],{"className":127196,"code":130560,"language":127198,"meta":31,"style":31},[33,136397,136398,136402,136408,136424],{"__ignoreMap":31},[36,136399,136400],{"class":38,"line":39},[36,136401,130567],{"class":42},[36,136403,136404,136406],{"class":38,"line":46},[36,136405,52353],{"class":52042},[36,136407,16316],{"class":49},[36,136409,136410,136412,136414,136416,136418,136420,136422],{"class":38,"line":78},[36,136411,71638],{"class":60},[36,136413,52179],{"class":49},[36,136415,61],{"class":60},[36,136417,52234],{"class":53},[36,136419,52263],{"class":60},[36,136421,130588],{"class":60},[36,136423,2040],{"class":49},[36,136425,136426],{"class":38,"line":125},[36,136427,2315],{"class":49},[2212,136429],{"style":127052,"src":136430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,136432,136433],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[26,136435,136437],{"className":127196,"code":136436,"language":127198,"meta":31,"style":31},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[33,136438,136439,136444,136450,136460,136472,136484],{"__ignoreMap":31},[36,136440,136441],{"class":38,"line":39},[36,136442,136443],{"class":42},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[36,136445,136446,136448],{"class":38,"line":46},[36,136447,131044],{"class":2713},[36,136449,16316],{"class":49},[36,136451,136452,136454,136456,136458],{"class":38,"line":78},[36,136453,133002],{"class":60},[36,136455,52179],{"class":49},[36,136457,55506],{"class":60},[36,136459,2040],{"class":49},[36,136461,136462,136464,136466,136468,136470],{"class":38,"line":125},[36,136463,133016],{"class":60},[36,136465,52179],{"class":49},[36,136467,332],{"class":60},[36,136469,52234],{"class":53},[36,136471,2040],{"class":49},[36,136473,136474,136476,136478,136480,136482],{"class":38,"line":131},[36,136475,133033],{"class":60},[36,136477,52179],{"class":49},[36,136479,72],{"class":60},[36,136481,52234],{"class":53},[36,136483,2040],{"class":49},[36,136485,136486],{"class":38,"line":396},[36,136487,2315],{"class":49},[14,136489,136490],{},"加上上述代码会发现：",[2212,136492],{"style":127052,"src":136493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,136495,136496],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,136498,136499],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[26,136501,136502],{"className":127196,"code":136436,"language":127198,"meta":31,"style":31},[33,136503,136504,136508,136514,136524,136536,136548],{"__ignoreMap":31},[36,136505,136506],{"class":38,"line":39},[36,136507,136443],{"class":42},[36,136509,136510,136512],{"class":38,"line":46},[36,136511,131044],{"class":2713},[36,136513,16316],{"class":49},[36,136515,136516,136518,136520,136522],{"class":38,"line":78},[36,136517,133002],{"class":60},[36,136519,52179],{"class":49},[36,136521,55506],{"class":60},[36,136523,2040],{"class":49},[36,136525,136526,136528,136530,136532,136534],{"class":38,"line":125},[36,136527,133016],{"class":60},[36,136529,52179],{"class":49},[36,136531,332],{"class":60},[36,136533,52234],{"class":53},[36,136535,2040],{"class":49},[36,136537,136538,136540,136542,136544,136546],{"class":38,"line":131},[36,136539,133033],{"class":60},[36,136541,52179],{"class":49},[36,136543,72],{"class":60},[36,136545,52234],{"class":53},[36,136547,2040],{"class":49},[36,136549,136550],{"class":38,"line":396},[36,136551,2315],{"class":49},[14,136553,136554],{},"解决方式2：",[14,136556,136557],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[26,136559,136561],{"className":127196,"code":136560,"language":127198,"meta":31,"style":31},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[33,136562,136563,136569,136579,136591,136603],{"__ignoreMap":31},[36,136564,136565,136567],{"class":38,"line":39},[36,136566,52353],{"class":52042},[36,136568,16316],{"class":49},[36,136570,136571,136573,136575,136577],{"class":38,"line":46},[36,136572,133002],{"class":60},[36,136574,52179],{"class":49},[36,136576,55506],{"class":60},[36,136578,2040],{"class":49},[36,136580,136581,136583,136585,136587,136589],{"class":38,"line":78},[36,136582,133016],{"class":60},[36,136584,52179],{"class":49},[36,136586,332],{"class":60},[36,136588,52234],{"class":53},[36,136590,2040],{"class":49},[36,136592,136593,136595,136597,136599,136601],{"class":38,"line":125},[36,136594,133033],{"class":60},[36,136596,52179],{"class":49},[36,136598,72],{"class":60},[36,136600,52234],{"class":53},[36,136602,2040],{"class":49},[36,136604,136605],{"class":38,"line":131},[36,136606,2315],{"class":49},[868,136608,136610],{"id":136609},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,136612,136381],{},[2212,136614],{"style":127052,"src":136615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,136617,136618],{},"实现结构图：",[2212,136620],{"style":127052,"src":136621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,136623,136624],{},"巧妙运用浮动元素不会压住文字的特性",[14,136626,136627],{},"代码显示：",[26,136629,136631],{"className":127196,"code":136630,"language":127198,"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,136632,136633,136639,136649,136653,136658,136662,136668,136682],{"__ignoreMap":31},[36,136634,136635,136637],{"class":38,"line":39},[36,136636,131044],{"class":2713},[36,136638,16316],{"class":49},[36,136640,136641,136643,136645,136647],{"class":38,"line":46},[36,136642,131676],{"class":60},[36,136644,52179],{"class":49},[36,136646,24480],{"class":60},[36,136648,2040],{"class":49},[36,136650,136651],{"class":38,"line":78},[36,136652,2315],{"class":49},[36,136654,136655],{"class":38,"line":125},[36,136656,136657],{"class":49},"```Css\n",[36,136659,136660],{"class":38,"line":131},[36,136661,131039],{"class":42},[36,136663,136664,136666],{"class":38,"line":396},[36,136665,131044],{"class":2713},[36,136667,16316],{"class":49},[36,136669,136670,136672,136674,136676,136678,136680],{"class":38,"line":407},[36,136671,71212],{"class":60},[36,136673,52179],{"class":49},[36,136675,643],{"class":60},[36,136677,52298],{"class":60},[36,136679,131059],{"class":49},[36,136681,131062],{"class":42},[36,136683,136684],{"class":38,"line":2061},[36,136685,2315],{"class":49},[14,136687,136688],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[26,136690,136693],{"className":136691,"code":136692,"language":5935},[5933],"\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,136694,136692],{"__ignoreMap":31},[2212,136696],{"style":127052,"src":136697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136699,136700],{},"最终展示结果：",[26,136702,136703],{"className":127196,"code":131032,"language":127198,"meta":31,"style":31},[33,136704,136705,136709,136715,136729],{"__ignoreMap":31},[36,136706,136707],{"class":38,"line":39},[36,136708,131039],{"class":42},[36,136710,136711,136713],{"class":38,"line":46},[36,136712,131044],{"class":2713},[36,136714,16316],{"class":49},[36,136716,136717,136719,136721,136723,136725,136727],{"class":38,"line":78},[36,136718,71212],{"class":60},[36,136720,52179],{"class":49},[36,136722,643],{"class":60},[36,136724,52298],{"class":60},[36,136726,131059],{"class":49},[36,136728,131062],{"class":42},[36,136730,136731],{"class":38,"line":125},[36,136732,2315],{"class":49},[2212,136734],{"style":127052,"src":136735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[21,136737,136739],{"id":136738},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[868,136741,136743],{"id":136742},"_1341-原理","13.4.1 原理",[2212,136745],{"style":127052,"src":136746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[26,136748,136749],{"className":127196,"code":131032,"language":127198,"meta":31,"style":31},[33,136750,136751,136755,136761,136775],{"__ignoreMap":31},[36,136752,136753],{"class":38,"line":39},[36,136754,131039],{"class":42},[36,136756,136757,136759],{"class":38,"line":46},[36,136758,131044],{"class":2713},[36,136760,16316],{"class":49},[36,136762,136763,136765,136767,136769,136771,136773],{"class":38,"line":78},[36,136764,71212],{"class":60},[36,136766,52179],{"class":49},[36,136768,643],{"class":60},[36,136770,52298],{"class":60},[36,136772,131059],{"class":49},[36,136774,131062],{"class":42},[36,136776,136777],{"class":38,"line":125},[36,136778,2315],{"class":49},[868,136780,136782],{"id":136781},"_1342-实例","13.4.2 实例",[2212,136784],{"style":127052,"src":136785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[26,136787,136788],{"className":127196,"code":131662,"language":127198,"meta":31,"style":31},[33,136789,136790,136796,136806,136810,136816,136826],{"__ignoreMap":31},[36,136791,136792,136794],{"class":38,"line":39},[36,136793,131669],{"class":2713},[36,136795,16316],{"class":49},[36,136797,136798,136800,136802,136804],{"class":38,"line":46},[36,136799,131676],{"class":60},[36,136801,52179],{"class":49},[36,136803,24480],{"class":60},[36,136805,2040],{"class":49},[36,136807,136808],{"class":38,"line":78},[36,136809,2315],{"class":49},[36,136811,136812,136814],{"class":38,"line":125},[36,136813,131691],{"class":2713},[36,136815,16316],{"class":49},[36,136817,136818,136820,136822,136824],{"class":38,"line":131},[36,136819,131676],{"class":60},[36,136821,52179],{"class":49},[36,136823,73264],{"class":60},[36,136825,2040],{"class":49},[36,136827,136828],{"class":38,"line":396},[36,136829,2315],{"class":49},[21,136831,136833],{"id":136832},"_135-css的初始化","13.5 css的初始化",[14,136835,136836],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136838,136839],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136841,136842],{},"每个网页都必须首先进行 CSS初始化。",[14,136844,136845],{},"这里我们以 京东CSS初始化代码为例。",[14,136847,136848],{},"在网页右键查看网页源代码",[14,136850,136851],{},"找到css的link引入语句",[14,136853,136854],{},"然后ctrl+f 输入body",[14,136856,77968],{},[2212,136858],{"style":127052,"src":136859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136861,77991],{},[2212,136863],{"style":127052,"src":136864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136866,136867],{},"③打开了网页上传压缩的代码",[2212,136869],{"style":127052,"src":136870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136872,136873],{},"④从body前可以查看这个网页的初始化代码",[14,136875,136876],{},[1043,136877,136878],{},"Unicode编码字体：",[14,136880,136881],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136883,83949],{},[14,136885,136886],{},"黑体 \\9ED1\\4F53",[14,136888,136889],{},"宋体 \\5B8B\\4F53",[14,136891,136892],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[807,136894,136895],{},"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":46,"depth":46,"links":136897},[136898,136899,136906,136910,136914],{"id":135695,"depth":46,"text":135696},{"id":135817,"depth":46,"text":135818,"children":136900},[136901,136902,136903,136904,136905],{"id":135821,"depth":78,"text":135822},{"id":135974,"depth":78,"text":135975},{"id":136093,"depth":78,"text":136094},{"id":136235,"depth":78,"text":136236},{"id":136293,"depth":78,"text":136294},{"id":136354,"depth":46,"text":136355,"children":136907},[136908,136909],{"id":136377,"depth":78,"text":136378},{"id":136609,"depth":78,"text":136610},{"id":136738,"depth":46,"text":136739,"children":136911},[136912,136913],{"id":136742,"depth":78,"text":136743},{"id":136781,"depth":78,"text":136782},{"id":136832,"depth":46,"text":136833},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135687,"description":823},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136921,"title":136922,"body":136923,"description":823,"extension":824,"meta":138609,"navigation":193,"path":138610,"seo":138611,"stem":138612,"__hash__":138613},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136924,"toc":138598},[136925,136928,136932,136936,136939,136946,136949,136952,136990,136993,136995,137009,137013,137022,137026,137031,137034,137037,137040,137075,137080,137083,137113,137116,137121,137124,137127,137157,137160,137214,137217,137221,137226,137238,137241,137245,137275,137278,137283,137286,137316,137319,137323,137340,137344,137348,137351,137384,137387,137391,137394,137397,137400,137403,137406,137517,137520,137523,137526,137628,137631,137635,137639,137643,137646,137686,137689,137691,137707,137711,137714,137719,137800,137803,137806,137932,137937,137940,137948,137951,137956,138041,138044,138048,138051,138054,138058,138078,138083,138167,138170,138175,138178,138181,138259,138262,138265,138268,138271,138274,138279,138282,138285,138357,138360,138365,138368,138465,138468,138474,138477,138480,138483,138486,138489,138492,138495,138498,138502,138507,138510,138543,138548,138551,138592,138595],[10,136926,136922],{"id":136927},"_14-html5与css3新特性",[21,136929,136931],{"id":136930},"_141-html5的新特性","14.1 HTML5的新特性",[868,136933,136935],{"id":136934},"_1411-基本标签","14.1.1 基本标签",[14,136937,136938],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136940,136941,136942,136945],{},"这些新特性都有兼容性问题，基本是 ",[1043,136943,136944],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136947,136948],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136950,136951],{},"现在使用的是新特性：",[1886,136953,136954,136960,136966,136972,136978,136984],{},[854,136955,136956,136959],{},[33,136957,136958],{},"\u003Cheader>"," 头部标签",[854,136961,136962,136965],{},[33,136963,136964],{},"\u003Cnav>"," 导航标签",[854,136967,136968,136971],{},[33,136969,136970],{},"\u003Carticle>"," 内容标签",[854,136973,136974,136977],{},[33,136975,136976],{},"\u003Csection>"," 定义文档某个区域",[854,136979,136980,136983],{},[33,136981,136982],{},"\u003Caside>"," 侧边栏标签",[854,136985,136986,136989],{},[33,136987,136988],{},"\u003Cfooter>"," 尾部标签",[2212,136991],{"style":127052,"src":136992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136994,929],{},[1886,136996,136997,137000,137003,137006],{},[854,136998,136999],{},"这种语义化标准主要是针对搜索引擎的",[854,137001,137002],{},"这些标签页面中可以经常使用",[854,137004,137005],{},"在IE9中，需要把这些元素转换为块级元素",[854,137007,137008],{},"移动端更喜欢使用这些标签",[868,137010,137012],{"id":137011},"_1412-多媒体标签","14.1.2 多媒体标签",[14,137014,137015,137016,137018,137019,137021],{},"音频 ",[1043,137017,28919],{}," 和视频 ",[1043,137020,28928],{}," 两个标签",[22742,137023,137025],{"id":137024},"_14121-视频标签-video","14.1.2.1 视频标签- video",[851,137027,137028],{},[854,137029,137030],{},"支持格式：",[2212,137032],{"style":127052,"src":137033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,137035,137036],{},"尽量使用MP4，兼容性好",[14,137038,137039],{},"用MP4就可以",[26,137041,137043],{"className":127943,"code":137042,"language":127945,"meta":31,"style":31},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[33,137044,137045],{"__ignoreMap":31},[36,137046,137047,137049,137051,137053,137055,137058,137060,137063,137066,137069,137071,137073],{"class":38,"line":39},[36,137048,1789],{"class":49},[36,137050,28928],{"class":52042},[36,137052,55981],{"class":2713},[36,137054,54],{"class":49},[36,137056,137057],{"class":998},"\"movie.mp4\"",[36,137059,93165],{"class":2713},[36,137061,137062],{"class":2713}," autoplay",[36,137064,137065],{"class":2713}," muted",[36,137067,137068],{"class":2713}," loop",[36,137070,56056],{"class":49},[36,137072,28928],{"class":52042},[36,137074,52049],{"class":49},[851,137076,137077],{"start":46},[854,137078,137079],{},"兼容写法",[14,137081,137082],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[26,137084,137085],{"className":127943,"code":137042,"language":127945,"meta":31,"style":31},[33,137086,137087],{"__ignoreMap":31},[36,137088,137089,137091,137093,137095,137097,137099,137101,137103,137105,137107,137109,137111],{"class":38,"line":39},[36,137090,1789],{"class":49},[36,137092,28928],{"class":52042},[36,137094,55981],{"class":2713},[36,137096,54],{"class":49},[36,137098,137057],{"class":998},[36,137100,93165],{"class":2713},[36,137102,137062],{"class":2713},[36,137104,137065],{"class":2713},[36,137106,137068],{"class":2713},[36,137108,56056],{"class":49},[36,137110,28928],{"class":52042},[36,137112,52049],{"class":49},[14,137114,137115],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[851,137117,137118],{"start":78},[854,137119,137120],{},"video常用属性",[2212,137122],{"style":127052,"src":137123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,137125,137126],{},"poster属性后面是跟的等待加载图片的地址",[26,137128,137129],{"className":127943,"code":134698,"language":127945,"meta":31,"style":31},[33,137130,137131],{"__ignoreMap":31},[36,137132,137133,137135,137137,137139,137141,137143,137145,137147,137149,137151,137153,137155],{"class":38,"line":39},[36,137134,1789],{"class":49},[36,137136,2212],{"class":52042},[36,137138,55981],{"class":2713},[36,137140,54],{"class":49},[36,137142,134713],{"class":998},[36,137144,55989],{"class":2713},[36,137146,54],{"class":49},[36,137148,134720],{"class":998},[36,137150,134723],{"class":2713},[36,137152,54],{"class":49},[36,137154,134728],{"class":998},[36,137156,52049],{"class":49},[14,137158,137159],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[26,137161,137163],{"className":127196,"code":137162,"language":127198,"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,137164,137165,137170,137176,137200,137205,137210],{"__ignoreMap":31},[36,137166,137167],{"class":38,"line":39},[36,137168,137169],{"class":42},"\u002F* 2D 位移 *\u002F\n",[36,137171,137172,137174],{"class":38,"line":46},[36,137173,52353],{"class":52042},[36,137175,16316],{"class":49},[36,137177,137178,137181,137183,137186,137188,137190,137192,137194,137196,137198],{"class":38,"line":78},[36,137179,137180],{"class":60},"  transform",[36,137182,52179],{"class":49},[36,137184,137185],{"class":60},"translate",[36,137187,901],{"class":49},[36,137189,67],{"class":60},[36,137191,52234],{"class":53},[36,137193,154],{"class":49},[36,137195,1538],{"class":60},[36,137197,52234],{"class":53},[36,137199,3468],{"class":49},[36,137201,137202],{"class":38,"line":125},[36,137203,137204],{"class":42},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[36,137206,137207],{"class":38,"line":131},[36,137208,137209],{"class":42},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[36,137211,137212],{"class":38,"line":396},[36,137213,2315],{"class":49},[14,137215,137216],{},"muted:自动静音属性",[22742,137218,137220],{"id":137219},"_14122-音频标签audio","14.1.2.2 音频标签audio",[851,137222,137223],{},[854,137224,137225],{},"基本使用",[14,137227,137228,137229,137234,137235],{},"当前 ",[1043,137230,137231],{},[33,137232,137233],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[1043,137236,137237],{},"mp3格式",[2212,137239],{"style":127052,"src":137240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[851,137242,137243],{"start":46},[854,137244,137079],{},[26,137246,137247],{"className":127943,"code":137042,"language":127945,"meta":31,"style":31},[33,137248,137249],{"__ignoreMap":31},[36,137250,137251,137253,137255,137257,137259,137261,137263,137265,137267,137269,137271,137273],{"class":38,"line":39},[36,137252,1789],{"class":49},[36,137254,28928],{"class":52042},[36,137256,55981],{"class":2713},[36,137258,54],{"class":49},[36,137260,137057],{"class":998},[36,137262,93165],{"class":2713},[36,137264,137062],{"class":2713},[36,137266,137065],{"class":2713},[36,137268,137068],{"class":2713},[36,137270,56056],{"class":49},[36,137272,28928],{"class":52042},[36,137274,52049],{"class":49},[14,137276,137277],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[851,137279,137280],{"start":78},[854,137281,137282],{},"常用属性",[2212,137284],{"style":127052,"src":137285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[26,137287,137288],{"className":127943,"code":137042,"language":127945,"meta":31,"style":31},[33,137289,137290],{"__ignoreMap":31},[36,137291,137292,137294,137296,137298,137300,137302,137304,137306,137308,137310,137312,137314],{"class":38,"line":39},[36,137293,1789],{"class":49},[36,137295,28928],{"class":52042},[36,137297,55981],{"class":2713},[36,137299,54],{"class":49},[36,137301,137057],{"class":998},[36,137303,93165],{"class":2713},[36,137305,137062],{"class":2713},[36,137307,137065],{"class":2713},[36,137309,137068],{"class":2713},[36,137311,56056],{"class":49},[36,137313,28928],{"class":52042},[36,137315,52049],{"class":49},[14,137317,137318],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22742,137320,137322],{"id":137321},"_14123-总结","14.1.2.3 总结",[1886,137324,137325,137328,137331,137334,137337],{},[854,137326,137327],{},"音频标签和视频标签使用方式基本一致",[854,137329,137330],{},"浏览器支持情况不同",[854,137332,137333],{},"谷歌浏览器把音频和视频自动播放禁止了",[854,137335,137336],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[854,137338,137339],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[868,137341,137343],{"id":137342},"_1413-表单元素","14.1.3 表单元素",[22742,137345,137347],{"id":137346},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[2212,137349],{"style":127052,"src":137350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[26,137352,137354],{"className":127943,"code":137353,"language":127945,"meta":31,"style":31},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[33,137355,137356],{"__ignoreMap":31},[36,137357,137358,137360,137362,137364,137366,137368,137370,137372,137375,137377,137379,137382],{"class":38,"line":39},[36,137359,1789],{"class":49},[36,137361,54563],{"class":52042},[36,137363,54566],{"class":2713},[36,137365,54],{"class":49},[36,137367,63441],{"class":998},[36,137369,15664],{"class":2713},[36,137371,54],{"class":49},[36,137373,137374],{"class":998},"\"username\"",[36,137376,61762],{"class":2713},[36,137378,54],{"class":49},[36,137380,137381],{"class":998},"\"请输入用户名\"",[36,137383,52049],{"class":49},[2212,137385],{"style":127052,"src":137386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22742,137388,137390],{"id":137389},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[2212,137392],{"style":127052,"src":137393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,137395,137396],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,137398,137399],{},"快捷操作：",[2212,137401],{"style":127052,"src":137402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,137404,137405],{},"例子1：",[26,137407,137409],{"className":127943,"code":137408,"language":127945,"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,137410,137411,137434,137461,137490,137509],{"__ignoreMap":31},[36,137412,137413,137415,137417,137419,137421,137424,137427,137429,137432],{"class":38,"line":39},[36,137414,1789],{"class":49},[36,137416,67367],{"class":52042},[36,137418,67370],{"class":2713},[36,137420,54],{"class":49},[36,137422,137423],{"class":998},"\"\u002Fsubmit\"",[36,137425,137426],{"class":2713}," method",[36,137428,54],{"class":49},[36,137430,137431],{"class":998},"\"post\"",[36,137433,52049],{"class":49},[36,137435,137436,137438,137440,137442,137444,137446,137448,137450,137452,137454,137456,137459],{"class":38,"line":46},[36,137437,52886],{"class":49},[36,137439,54563],{"class":52042},[36,137441,54566],{"class":2713},[36,137443,54],{"class":49},[36,137445,63441],{"class":998},[36,137447,15664],{"class":2713},[36,137449,54],{"class":49},[36,137451,137374],{"class":998},[36,137453,61762],{"class":2713},[36,137455,54],{"class":49},[36,137457,137458],{"class":998},"\"用户名\"",[36,137460,52049],{"class":49},[36,137462,137463,137465,137467,137469,137471,137474,137476,137478,137481,137483,137485,137488],{"class":38,"line":78},[36,137464,52886],{"class":49},[36,137466,54563],{"class":52042},[36,137468,54566],{"class":2713},[36,137470,54],{"class":49},[36,137472,137473],{"class":998},"\"password\"",[36,137475,15664],{"class":2713},[36,137477,54],{"class":49},[36,137479,137480],{"class":998},"\"pwd\"",[36,137482,61762],{"class":2713},[36,137484,54],{"class":49},[36,137486,137487],{"class":998},"\"密码\"",[36,137489,52049],{"class":49},[36,137491,137492,137494,137496,137498,137500,137502,137505,137507],{"class":38,"line":125},[36,137493,52886],{"class":49},[36,137495,54629],{"class":52042},[36,137497,54566],{"class":2713},[36,137499,54],{"class":49},[36,137501,67390],{"class":998},[36,137503,137504],{"class":49},">提交\u003C\u002F",[36,137506,54629],{"class":52042},[36,137508,52049],{"class":49},[36,137510,137511,137513,137515],{"class":38,"line":131},[36,137512,52527],{"class":49},[36,137514,67367],{"class":52042},[36,137516,52049],{"class":49},[2212,137518],{"style":127052,"src":137519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,137521,137522],{},"value是表单域的内容",[14,137524,137525],{},"例子2：",[26,137527,137528],{"className":127943,"code":137408,"language":127945,"meta":31,"style":31},[33,137529,137530,137550,137576,137602,137620],{"__ignoreMap":31},[36,137531,137532,137534,137536,137538,137540,137542,137544,137546,137548],{"class":38,"line":39},[36,137533,1789],{"class":49},[36,137535,67367],{"class":52042},[36,137537,67370],{"class":2713},[36,137539,54],{"class":49},[36,137541,137423],{"class":998},[36,137543,137426],{"class":2713},[36,137545,54],{"class":49},[36,137547,137431],{"class":998},[36,137549,52049],{"class":49},[36,137551,137552,137554,137556,137558,137560,137562,137564,137566,137568,137570,137572,137574],{"class":38,"line":46},[36,137553,52886],{"class":49},[36,137555,54563],{"class":52042},[36,137557,54566],{"class":2713},[36,137559,54],{"class":49},[36,137561,63441],{"class":998},[36,137563,15664],{"class":2713},[36,137565,54],{"class":49},[36,137567,137374],{"class":998},[36,137569,61762],{"class":2713},[36,137571,54],{"class":49},[36,137573,137458],{"class":998},[36,137575,52049],{"class":49},[36,137577,137578,137580,137582,137584,137586,137588,137590,137592,137594,137596,137598,137600],{"class":38,"line":78},[36,137579,52886],{"class":49},[36,137581,54563],{"class":52042},[36,137583,54566],{"class":2713},[36,137585,54],{"class":49},[36,137587,137473],{"class":998},[36,137589,15664],{"class":2713},[36,137591,54],{"class":49},[36,137593,137480],{"class":998},[36,137595,61762],{"class":2713},[36,137597,54],{"class":49},[36,137599,137487],{"class":998},[36,137601,52049],{"class":49},[36,137603,137604,137606,137608,137610,137612,137614,137616,137618],{"class":38,"line":125},[36,137605,52886],{"class":49},[36,137607,54629],{"class":52042},[36,137609,54566],{"class":2713},[36,137611,54],{"class":49},[36,137613,67390],{"class":998},[36,137615,137504],{"class":49},[36,137617,54629],{"class":52042},[36,137619,52049],{"class":49},[36,137621,137622,137624,137626],{"class":38,"line":131},[36,137623,52527],{"class":49},[36,137625,67367],{"class":52042},[36,137627,52049],{"class":49},[2212,137629],{"style":127052,"src":137630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[21,137632,137634],{"id":137633},"_142-css新特性","14.2 CSS新特性",[868,137636,137638],{"id":137637},"_1421-新增选择器","14.2.1 新增选择器",[22742,137640,137642],{"id":137641},"_14211-属性选择器","14.2.1.1 属性选择器",[2212,137644],{"style":127052,"src":137645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[26,137647,137649],{"className":127196,"code":137648,"language":127198,"meta":31,"style":31},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[33,137650,137651,137666,137682],{"__ignoreMap":31},[36,137652,137653,137655,137657,137659,137661,137663],{"class":38,"line":39},[36,137654,54563],{"class":52042},[36,137656,1769],{"class":49},[36,137658,103751],{"class":2713},[36,137660,54],{"class":53},[36,137662,63441],{"class":998},[36,137664,137665],{"class":49},"] {\n",[36,137667,137668,137670,137672,137674,137676,137678,137680],{"class":38,"line":46},[36,137669,71638],{"class":60},[36,137671,52179],{"class":49},[36,137673,61],{"class":60},[36,137675,52234],{"class":53},[36,137677,52263],{"class":60},[36,137679,130776],{"class":60},[36,137681,2040],{"class":49},[36,137683,137684],{"class":38,"line":78},[36,137685,2315],{"class":49},[2212,137687],{"style":127052,"src":137688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137690,929],{},[1886,137692,137693,137696,137699,137702],{},[854,137694,137695],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[854,137697,137698],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[854,137700,137701],{},"属性选择器也可以选择出来自定义的属性",[854,137703,137704,137706],{},[1043,137705,9772],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22742,137708,137710],{"id":137709},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[2212,137712],{"style":127052,"src":137713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[851,137715,137716],{},[854,137717,137718],{},"fist-child",[26,137720,137722],{"className":127196,"code":137721,"language":127198,"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,137723,137724,137729,137744,137764,137782],{"__ignoreMap":31},[36,137725,137726],{"class":38,"line":39},[36,137727,137728],{"class":42},"\u002F* 属性选择器 *\u002F\n",[36,137730,137731,137733,137735,137737,137739,137741],{"class":38,"line":46},[36,137732,54563],{"class":52042},[36,137734,1769],{"class":49},[36,137736,103751],{"class":2713},[36,137738,54],{"class":53},[36,137740,63441],{"class":998},[36,137742,137743],{"class":49},"] { }\n",[36,137745,137746,137748,137750,137752,137755,137758,137761],{"class":38,"line":78},[36,137747,54563],{"class":52042},[36,137749,1769],{"class":49},[36,137751,15438],{"class":2713},[36,137753,137754],{"class":53},"^=",[36,137756,137757],{"class":998},"\"icon\"",[36,137759,137760],{"class":49},"] { }  ",[36,137762,137763],{"class":42},"\u002F* 以 icon 开头 *\u002F\n",[36,137765,137766,137768,137770,137772,137775,137777,137779],{"class":38,"line":125},[36,137767,54563],{"class":52042},[36,137769,1769],{"class":49},[36,137771,15438],{"class":2713},[36,137773,137774],{"class":53},"$=",[36,137776,137757],{"class":998},[36,137778,137760],{"class":49},[36,137780,137781],{"class":42},"\u002F* 以 icon 结尾 *\u002F\n",[36,137783,137784,137786,137788,137790,137793,137795,137797],{"class":38,"line":131},[36,137785,54563],{"class":52042},[36,137787,1769],{"class":49},[36,137789,15438],{"class":2713},[36,137791,137792],{"class":53},"*=",[36,137794,137757],{"class":998},[36,137796,137760],{"class":49},[36,137798,137799],{"class":42},"\u002F* 包含 icon *\u002F\n",[14,137801,137802],{},"ul的第一个儿子文本为红色",[14,137804,137805],{},"一定要在冒号前加空格，不然就是选中所有的了",[26,137807,137809],{"className":127196,"code":137808,"language":127198,"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,137810,137811,137817,137827,137831,137835,137840,137853,137866,137882,137899,137916],{"__ignoreMap":31},[36,137812,137813,137815],{"class":38,"line":39},[36,137814,127487],{"class":2713},[36,137816,16316],{"class":49},[36,137818,137819,137821,137823,137825],{"class":38,"line":46},[36,137820,71647],{"class":60},[36,137822,52179],{"class":49},[36,137824,58163],{"class":60},[36,137826,2040],{"class":49},[36,137828,137829],{"class":38,"line":78},[36,137830,2315],{"class":49},[36,137832,137833],{"class":38,"line":125},[36,137834,136657],{"class":49},[36,137836,137837],{"class":38,"line":131},[36,137838,137839],{"class":42},"\u002F* 结构伪类选择器 *\u002F\n",[36,137841,137842,137844,137847,137850],{"class":38,"line":396},[36,137843,854],{"class":52042},[36,137845,137846],{"class":2713},":first-child",[36,137848,137849],{"class":49}," { }           ",[36,137851,137852],{"class":42},"\u002F* 第一个 *\u002F\n",[36,137854,137855,137857,137860,137863],{"class":38,"line":407},[36,137856,854],{"class":52042},[36,137858,137859],{"class":2713},":last-child",[36,137861,137862],{"class":49}," { }            ",[36,137864,137865],{"class":42},"\u002F* 最后一个 *\u002F\n",[36,137867,137868,137870,137872,137874,137876,137879],{"class":38,"line":2061},[36,137869,854],{"class":52042},[36,137871,130110],{"class":2713},[36,137873,901],{"class":49},[36,137875,181],{"class":60},[36,137877,137878],{"class":49},") { }          ",[36,137880,137881],{"class":42},"\u002F* 第2个 *\u002F\n",[36,137883,137884,137886,137888,137890,137893,137896],{"class":38,"line":2067},[36,137885,854],{"class":52042},[36,137887,130110],{"class":2713},[36,137889,901],{"class":49},[36,137891,137892],{"class":60},"2n",[36,137894,137895],{"class":49},") { }         ",[36,137897,137898],{"class":42},"\u002F* 偶数 *\u002F\n",[36,137900,137901,137903,137905,137907,137910,137913],{"class":38,"line":2079},[36,137902,854],{"class":52042},[36,137904,130110],{"class":2713},[36,137906,901],{"class":49},[36,137908,137909],{"class":60},"2n+1",[36,137911,137912],{"class":49},") { }       ",[36,137914,137915],{"class":42},"\u002F* 奇数 *\u002F\n",[36,137917,137918,137920,137922,137924,137927,137929],{"class":38,"line":2362},[36,137919,854],{"class":52042},[36,137921,130110],{"class":2713},[36,137923,901],{"class":49},[36,137925,137926],{"class":60},"-n+3",[36,137928,137912],{"class":49},[36,137930,137931],{"class":42},"\u002F* 前3个 *\u002F\n",[52353,137933,137936],{"className":137934},[137935],"example","\n  示例内容\n",[14,137938,137939],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1886,137941,137942],{},[854,137943,137944,137947],{},[33,137945,137946],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137949,137950],{},"也就是说它选择的是熊大",[851,137952,137953],{"start":396},[854,137954,137955],{},"权重",[26,137957,137959],{"className":127196,"code":137958,"language":127198,"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,137960,137961,137965,137975,137985,137999,138013,138027],{"__ignoreMap":31},[36,137962,137963],{"class":38,"line":39},[36,137964,137839],{"class":42},[36,137966,137967,137969,137971,137973],{"class":38,"line":46},[36,137968,854],{"class":52042},[36,137970,137846],{"class":2713},[36,137972,137849],{"class":49},[36,137974,137852],{"class":42},[36,137976,137977,137979,137981,137983],{"class":38,"line":78},[36,137978,854],{"class":52042},[36,137980,137859],{"class":2713},[36,137982,137862],{"class":49},[36,137984,137865],{"class":42},[36,137986,137987,137989,137991,137993,137995,137997],{"class":38,"line":125},[36,137988,854],{"class":52042},[36,137990,130110],{"class":2713},[36,137992,901],{"class":49},[36,137994,181],{"class":60},[36,137996,137878],{"class":49},[36,137998,137881],{"class":42},[36,138000,138001,138003,138005,138007,138009,138011],{"class":38,"line":131},[36,138002,854],{"class":52042},[36,138004,130110],{"class":2713},[36,138006,901],{"class":49},[36,138008,137892],{"class":60},[36,138010,137895],{"class":49},[36,138012,137898],{"class":42},[36,138014,138015,138017,138019,138021,138023,138025],{"class":38,"line":396},[36,138016,854],{"class":52042},[36,138018,130110],{"class":2713},[36,138020,901],{"class":49},[36,138022,137909],{"class":60},[36,138024,137912],{"class":49},[36,138026,137915],{"class":42},[36,138028,138029,138031,138033,138035,138037,138039],{"class":38,"line":407},[36,138030,854],{"class":52042},[36,138032,130110],{"class":2713},[36,138034,901],{"class":49},[36,138036,137926],{"class":60},[36,138038,137912],{"class":49},[36,138040,137931],{"class":42},[14,138042,138043],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22742,138045,138047],{"id":138046},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,138049,138050],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[2212,138052],{"style":127052,"src":138053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[851,138055,138056],{},[854,138057,929],{},[1886,138059,138060,138063,138066,138069,138072,138075],{},[854,138061,138062],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[854,138064,138065],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[854,138067,138068],{},"语法： element::before {}",[854,138070,138071],{},"before 和 after 必须有 content 属性",[854,138073,138074],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[854,138076,138077],{},"伪元素选择器和标签选择器一样，权重为 1",[851,138079,138080],{"start":46},[854,138081,138082],{},"实例",[26,138084,138085],{"className":127196,"code":137958,"language":127198,"meta":31,"style":31},[33,138086,138087,138091,138101,138111,138125,138139,138153],{"__ignoreMap":31},[36,138088,138089],{"class":38,"line":39},[36,138090,137839],{"class":42},[36,138092,138093,138095,138097,138099],{"class":38,"line":46},[36,138094,854],{"class":52042},[36,138096,137846],{"class":2713},[36,138098,137849],{"class":49},[36,138100,137852],{"class":42},[36,138102,138103,138105,138107,138109],{"class":38,"line":78},[36,138104,854],{"class":52042},[36,138106,137859],{"class":2713},[36,138108,137862],{"class":49},[36,138110,137865],{"class":42},[36,138112,138113,138115,138117,138119,138121,138123],{"class":38,"line":125},[36,138114,854],{"class":52042},[36,138116,130110],{"class":2713},[36,138118,901],{"class":49},[36,138120,181],{"class":60},[36,138122,137878],{"class":49},[36,138124,137881],{"class":42},[36,138126,138127,138129,138131,138133,138135,138137],{"class":38,"line":131},[36,138128,854],{"class":52042},[36,138130,130110],{"class":2713},[36,138132,901],{"class":49},[36,138134,137892],{"class":60},[36,138136,137895],{"class":49},[36,138138,137898],{"class":42},[36,138140,138141,138143,138145,138147,138149,138151],{"class":38,"line":396},[36,138142,854],{"class":52042},[36,138144,130110],{"class":2713},[36,138146,901],{"class":49},[36,138148,137909],{"class":60},[36,138150,137912],{"class":49},[36,138152,137915],{"class":42},[36,138154,138155,138157,138159,138161,138163,138165],{"class":38,"line":407},[36,138156,854],{"class":52042},[36,138158,130110],{"class":2713},[36,138160,901],{"class":49},[36,138162,137926],{"class":60},[36,138164,137912],{"class":49},[36,138166,137931],{"class":42},[2212,138168],{"style":127052,"src":138169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[851,138171,138172],{"start":78},[854,138173,138174],{},"使用场景1",[2212,138176],{"style":127052,"src":138177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,138179,138180],{},"不需要再加盒子来整红色那部分了",[26,138182,138184],{"className":127196,"code":138183,"language":127198,"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,138185,138186,138191,138200,138211,138221,138225,138234,138245,138255],{"__ignoreMap":31},[36,138187,138188],{"class":38,"line":39},[36,138189,138190],{"class":42},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[36,138192,138193,138195,138198],{"class":38,"line":46},[36,138194,52353],{"class":52042},[36,138196,138197],{"class":2713},"::before",[36,138199,16316],{"class":49},[36,138201,138202,138205,138207,138209],{"class":38,"line":78},[36,138203,138204],{"class":60},"  content",[36,138206,52179],{"class":49},[36,138208,8399],{"class":998},[36,138210,2040],{"class":49},[36,138212,138213,138215,138217,138219],{"class":38,"line":125},[36,138214,128812],{"class":60},[36,138216,52179],{"class":49},[36,138218,61611],{"class":60},[36,138220,2040],{"class":49},[36,138222,138223],{"class":38,"line":131},[36,138224,2315],{"class":49},[36,138226,138227,138229,138232],{"class":38,"line":396},[36,138228,52353],{"class":52042},[36,138230,138231],{"class":2713},"::after",[36,138233,16316],{"class":49},[36,138235,138236,138238,138240,138243],{"class":38,"line":407},[36,138237,138204],{"class":60},[36,138239,52179],{"class":49},[36,138241,138242],{"class":998},"\"→\"",[36,138244,2040],{"class":49},[36,138246,138247,138249,138251,138253],{"class":38,"line":2061},[36,138248,71647],{"class":60},[36,138250,52179],{"class":49},[36,138252,62812],{"class":60},[36,138254,2040],{"class":49},[36,138256,138257],{"class":38,"line":2067},[36,138258,2315],{"class":49},[2212,138260],{"style":127052,"src":138261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,138263,138264],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[2212,138266],{"style":127052,"src":138267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,138269,138270],{},"但是在引用时需要先转义一下",[14,138272,138273],{},"content='\\e930'",[851,138275,138276],{"start":125},[854,138277,138278],{},"使用场景2",[14,138280,138281],{},"仿土豆效果",[14,138283,138284],{},"通过使用伪元素选择器可以减少body中盒子的数量",[26,138286,138287],{"className":127196,"code":138183,"language":127198,"meta":31,"style":31},[33,138288,138289,138293,138301,138311,138321,138325,138333,138343,138353],{"__ignoreMap":31},[36,138290,138291],{"class":38,"line":39},[36,138292,138190],{"class":42},[36,138294,138295,138297,138299],{"class":38,"line":46},[36,138296,52353],{"class":52042},[36,138298,138197],{"class":2713},[36,138300,16316],{"class":49},[36,138302,138303,138305,138307,138309],{"class":38,"line":78},[36,138304,138204],{"class":60},[36,138306,52179],{"class":49},[36,138308,8399],{"class":998},[36,138310,2040],{"class":49},[36,138312,138313,138315,138317,138319],{"class":38,"line":125},[36,138314,128812],{"class":60},[36,138316,52179],{"class":49},[36,138318,61611],{"class":60},[36,138320,2040],{"class":49},[36,138322,138323],{"class":38,"line":131},[36,138324,2315],{"class":49},[36,138326,138327,138329,138331],{"class":38,"line":396},[36,138328,52353],{"class":52042},[36,138330,138231],{"class":2713},[36,138332,16316],{"class":49},[36,138334,138335,138337,138339,138341],{"class":38,"line":407},[36,138336,138204],{"class":60},[36,138338,52179],{"class":49},[36,138340,138242],{"class":998},[36,138342,2040],{"class":49},[36,138344,138345,138347,138349,138351],{"class":38,"line":2061},[36,138346,71647],{"class":60},[36,138348,52179],{"class":49},[36,138350,62812],{"class":60},[36,138352,2040],{"class":49},[36,138354,138355],{"class":38,"line":2067},[36,138356,2315],{"class":49},[2212,138358],{"style":127052,"src":138359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[851,138361,138362],{"start":131},[854,138363,138364],{},"使用场景3",[14,138366,138367],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[26,138369,138371],{"className":127196,"code":138370,"language":127198,"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,138372,138373,138379,138389,138393,138397,138401,138409,138419,138429,138433,138441,138451,138461],{"__ignoreMap":31},[36,138374,138375,138377],{"class":38,"line":39},[36,138376,131044],{"class":2713},[36,138378,16316],{"class":49},[36,138380,138381,138383,138385,138387],{"class":38,"line":46},[36,138382,131676],{"class":60},[36,138384,52179],{"class":49},[36,138386,24480],{"class":60},[36,138388,2040],{"class":49},[36,138390,138391],{"class":38,"line":78},[36,138392,2315],{"class":49},[36,138394,138395],{"class":38,"line":125},[36,138396,136657],{"class":49},[36,138398,138399],{"class":38,"line":131},[36,138400,138190],{"class":42},[36,138402,138403,138405,138407],{"class":38,"line":396},[36,138404,52353],{"class":52042},[36,138406,138197],{"class":2713},[36,138408,16316],{"class":49},[36,138410,138411,138413,138415,138417],{"class":38,"line":407},[36,138412,138204],{"class":60},[36,138414,52179],{"class":49},[36,138416,8399],{"class":998},[36,138418,2040],{"class":49},[36,138420,138421,138423,138425,138427],{"class":38,"line":2061},[36,138422,128812],{"class":60},[36,138424,52179],{"class":49},[36,138426,61611],{"class":60},[36,138428,2040],{"class":49},[36,138430,138431],{"class":38,"line":2067},[36,138432,2315],{"class":49},[36,138434,138435,138437,138439],{"class":38,"line":2079},[36,138436,52353],{"class":52042},[36,138438,138231],{"class":2713},[36,138440,16316],{"class":49},[36,138442,138443,138445,138447,138449],{"class":38,"line":2362},[36,138444,138204],{"class":60},[36,138446,52179],{"class":49},[36,138448,138242],{"class":998},[36,138450,2040],{"class":49},[36,138452,138453,138455,138457,138459],{"class":38,"line":2367},[36,138454,71647],{"class":60},[36,138456,52179],{"class":49},[36,138458,62812],{"class":60},[36,138460,2040],{"class":49},[36,138462,138463],{"class":38,"line":2373},[36,138464,2315],{"class":49},[14,138466,138467],{},"div {\nmargin: 0 auto;\n}",[26,138469,138472],{"className":138470,"code":138471,"language":5935},[5933],"\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,138473,138471],{"__ignoreMap":31},[14,138475,138476],{},"如果想让多个元素都发生变化",[14,138478,138479],{},"不能如下操作：",[14,138481,138482],{},"transition: width 2s ease 0.5s;",[14,138484,138485],{},"transition: height 2s ease 0.5s;不对！！！",[14,138487,138488],{},"上方会样式冲突，导致不显示任何过渡效果",[14,138490,138491],{},"使用如下：加逗号隔开",[14,138493,138494],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,138496,138497],{},"transition all 2s ease;",[868,138499,138501],{"id":138500},"_1426-过渡练习","14.2.6 过渡练习",[851,138503,138504],{},[854,138505,138506],{},"进度条",[2212,138508],{"style":127052,"src":138509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[26,138511,138513],{"className":127196,"code":138512,"language":127198,"meta":31,"style":31},"div {\n  transition: all 0.3s ease;\n}\n",[33,138514,138515,138521,138539],{"__ignoreMap":31},[36,138516,138517,138519],{"class":38,"line":39},[36,138518,52353],{"class":52042},[36,138520,16316],{"class":49},[36,138522,138523,138526,138528,138530,138533,138535,138537],{"class":38,"line":46},[36,138524,138525],{"class":60},"  transition",[36,138527,52179],{"class":49},[36,138529,28866],{"class":60},[36,138531,138532],{"class":60}," 0.3",[36,138534,1577],{"class":53},[36,138536,79422],{"class":60},[36,138538,2040],{"class":49},[36,138540,138541],{"class":38,"line":78},[36,138542,2315],{"class":49},[851,138544,138545],{"start":46},[854,138546,138547],{},"小米logo",[14,138549,138550],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[26,138552,138554],{"className":127196,"code":138553,"language":127198,"meta":31,"style":31},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[33,138555,138556,138561,138567,138583,138588],{"__ignoreMap":31},[36,138557,138558],{"class":38,"line":39},[36,138559,138560],{"class":42},"\u002F* CSS3 过渡 *\u002F\n",[36,138562,138563,138565],{"class":38,"line":46},[36,138564,52353],{"class":52042},[36,138566,16316],{"class":49},[36,138568,138569,138571,138573,138575,138577,138579,138581],{"class":38,"line":78},[36,138570,138525],{"class":60},[36,138572,52179],{"class":49},[36,138574,28866],{"class":60},[36,138576,138532],{"class":60},[36,138578,1577],{"class":53},[36,138580,79422],{"class":60},[36,138582,2040],{"class":49},[36,138584,138585],{"class":38,"line":125},[36,138586,138587],{"class":42},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[36,138589,138590],{"class":38,"line":131},[36,138591,2315],{"class":49},[14,138593,138594],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[807,138596,138597],{},"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":46,"depth":46,"links":138599},[138600,138605],{"id":136930,"depth":46,"text":136931,"children":138601},[138602,138603,138604],{"id":136934,"depth":78,"text":136935},{"id":137011,"depth":78,"text":137012},{"id":137342,"depth":78,"text":137343},{"id":137633,"depth":46,"text":137634,"children":138606},[138607,138608],{"id":137637,"depth":78,"text":137638},{"id":138500,"depth":78,"text":138501},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136922,"description":823},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138615,"title":138616,"body":138617,"description":823,"extension":824,"meta":140361,"navigation":193,"path":140362,"seo":140363,"stem":140364,"__hash__":140365},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138618,"toc":140342},[138619,138622,138626,138629,138635,138641,138645,138647,138650,138653,138656,138659,138662,138665,138668,138672,138676,138679,138682,138685,138689,138692,138695,138700,138703,138706,138709,138713,138716,138725,138728,138731,138735,138738,138741,138746,138753,138767,138775,138782,138787,138790,138793,138796,138803,138807,138813,138819,138822,138825,138830,138836,138838,138846,138851,138854,138860,138862,138867,138872,138875,138877,138882,138885,138890,138895,138929,138933,138937,138940,138944,138947,139033,139036,139073,139076,139112,139116,139121,139134,139188,139190,139218,139220,139248,139254,139268,139270,139314,139316,139360,139363,139370,139381,139383,139410,139412,139438,139445,139461,139463,139557,139559,139653,139660,139663,139668,139674,139748,139751,139753,139789,139791,139827,139830,139837,139856,139859,139862,139864,139889,139891,139915,139918,139921,139951,139955,139958,140021,140023,140089,140091,140155,140158,140190,140192,140218,140220,140246,140249,140280,140282,140308,140310,140336,140339],[10,138620,138616],{"id":138621},"_15-品优购项目上篇-搭建与公共模块",[21,138623,138625],{"id":138624},"_151-项目规划","15.1 项目规划",[2212,138627],{"style":127052,"src":138628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,138630,138631,138634],{},[1043,138632,138633],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,138636,138637,138640],{},[1043,138638,138639],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[21,138642,138644],{"id":138643},"_152-项目介绍","15.2 项目介绍",[14,138646,138633],{},[2212,138648],{"style":127052,"src":138649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,138651,138652],{},"主页：",[2212,138654],{"style":127052,"src":138655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,138657,138658],{},"列表页：",[2212,138660],{"style":127052,"src":138661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,138663,138664],{},"注册页：",[2212,138666],{"style":127052,"src":138667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[21,138669,138671],{"id":138670},"_153-项目搭建工作","15.3 项目搭建工作",[868,138673,138675],{"id":138674},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[2212,138677],{"style":127052,"src":138678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138680,138681],{},"经常更换的图片要放到upload文件夹中",[14,138683,138684],{},"不经常换的放到images文件夹中",[868,138686,138688],{"id":138687},"_1532-创建文件如下","15.3.2 创建文件如下",[2212,138690],{"style":127052,"src":138691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[2212,138693],{"style":127052,"src":138694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138696,138697],{},[1043,138698,138699],{},"初始化样式：",[14,138701,138702],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138704,138705],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138707,138708],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[868,138710,138712],{"id":138711},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138714,138715],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138717,138718,138719,138724],{},"这里最典型的应用就是 ",[1043,138720,138721],{},[33,138722,138723],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[2212,138726],{"style":127052,"src":138727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138729,138730],{},"通过link方法来引入",[868,138732,138734],{"id":138733},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[2212,138736],{"style":127052,"src":138737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138739,138740],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[851,138742,138743],{},[854,138744,138745],{},"制作favicon图标",[14,138747,138748,138749,138752],{},"①把品优购图标切成 ",[33,138750,138751],{},"png"," 图片",[14,138754,138755,138756,138758,138759,138762,138763],{},"②把 ",[33,138757,138751],{}," 图片转换为 ",[33,138760,138761],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[50,138764,138765],{"href":138765,"rel":138766},"http:\u002F\u002Fwww.bitbug.net\u002F",[24609],[851,138768,138769,138772],{"start":46},[854,138770,138771],{},"favicon图标放到网站根目录下",[854,138773,138774],{},"HTML页面引入favicon",[14,138776,138777,138778,138781],{},"在html 页面里面的 ",[33,138779,138780],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138783,138784],{},[33,138785,138786],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138788,138789],{},"复制这行代码或者在生成这个的网站进行复制",[2212,138791],{"style":127052,"src":138792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138794,138795],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138797,138798,138799],{},"例如:",[50,138800,138801],{"href":138801,"rel":138802},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24609],[868,138804,138806],{"id":138805},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138808,138809,138812],{},[1043,138810,138811],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138814,138815,138818],{},[1043,138816,138817],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138820,138821],{},"页面必须有三个标签用来符合 SEO 优化",[2212,138823],{"style":127052,"src":138824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[851,138826,138827],{},[854,138828,138829],{},"title网站标题",[14,138831,138832,138835],{},[1043,138833,138834],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138837,69532],{},[1886,138839,138840,138843],{},[854,138841,138842],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[854,138844,138845],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[851,138847,138848],{"start":46},[854,138849,138850],{},"description网站描述",[14,138852,138853],{},"简要说明我们网站主要是做什么的",[14,138855,138856,138859],{},[1043,138857,138858],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138861,69532],{},[14,138863,138864],{},[33,138865,138866],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[851,138868,138869],{"start":78},[854,138870,138871],{},"keywords关键词",[14,138873,138874],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138876,69532],{},[14,138878,138879],{},[33,138880,138881],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138883,138884],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138886,138887],{},[1043,138888,138889],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[851,138891,138892],{"start":125},[854,138893,138894],{},"代码总结",[26,138896,138897],{"className":127943,"code":131300,"language":127945,"meta":31,"style":31},[33,138898,138899,138903,138917,138921],{"__ignoreMap":31},[36,138900,138901],{"class":38,"line":39},[36,138902,131307],{"class":42},[36,138904,138905,138907,138909,138911,138913,138915],{"class":38,"line":46},[36,138906,1789],{"class":49},[36,138908,52353],{"class":52042},[36,138910,54228],{"class":2713},[36,138912,54],{"class":49},[36,138914,131320],{"class":998},[36,138916,52049],{"class":49},[36,138918,138919],{"class":38,"line":78},[36,138920,131327],{"class":49},[36,138922,138923,138925,138927],{"class":38,"line":125},[36,138924,52527],{"class":49},[36,138926,52353],{"class":52042},[36,138928,52049],{"class":49},[21,138930,138932],{"id":138931},"_154-项目公共部分制作","15.4 项目公共部分制作",[868,138934,138936],{"id":138935},"_1541-常用模块类命名","15.4.1 常用模块类命名",[2212,138938],{"style":127052,"src":138939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[868,138941,138943],{"id":138942},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138945,138946],{},"布局思路：",[1886,138948,138949,138952,138955,138977,139010],{},[854,138950,138951],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[854,138953,138954],{},"里面包含版心的盒子",[854,138956,138957,138958],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1886,138959,138960,138968,138974],{},[854,138961,138962,138963,22244,138965,138967],{},"1 号盒子 里面包含一个",[33,138964,1886],{},[33,138966,1886],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[854,138969,138970,138971,138973],{},"里面的内容是水平排列，所以需要给",[33,138972,854],{},"设置浮动",[854,138975,138976],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[854,138978,138979,138980],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1886,138981,138982,138996,139001],{},[854,138983,138984,138985,22244,138987,138989,138990,138992,138993,138995],{},"2 号盒子 里面包含一个",[33,138986,1886],{},[33,138988,1886],{},"包裹",[33,138991,854],{},"，中间的",[33,138994,1800],{},"可以用样式去设置，也可以用字符 |",[854,138997,138998,138999,138973],{},"里面内容水平排列，给",[33,139000,854],{},[854,139002,139003,139004,139006,139007,139009],{},"找到里面所有偶数的 ",[33,139005,854],{}," 设置样式（偶数的 ",[33,139008,854],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[854,139011,139012,139013],{},"需要用到字体图标",[1886,139014,139015,139021,139024,139027,139030],{},[854,139016,139017,139018],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[33,139019,139020],{},"arrow-icon",[854,139022,139023],{},"先要引入字体图片的资源",[854,139025,139026],{},"在样式里面利用 font-face 来进行声明",[854,139028,139029],{},"在伪元素的 content属性设置 图标的编码",[854,139031,139032],{},"给伪元素设置font-family属性",[14,139034,139035],{},"结构实例代码：",[26,139037,139039],{"className":127196,"code":139038,"language":127198,"meta":31,"style":31},"div::before {\n  content: \"\";\n  display: block;\n}\n",[33,139040,139041,139049,139059,139069],{"__ignoreMap":31},[36,139042,139043,139045,139047],{"class":38,"line":39},[36,139044,52353],{"class":52042},[36,139046,138197],{"class":2713},[36,139048,16316],{"class":49},[36,139050,139051,139053,139055,139057],{"class":38,"line":46},[36,139052,138204],{"class":60},[36,139054,52179],{"class":49},[36,139056,8399],{"class":998},[36,139058,2040],{"class":49},[36,139060,139061,139063,139065,139067],{"class":38,"line":78},[36,139062,128812],{"class":60},[36,139064,52179],{"class":49},[36,139066,61611],{"class":60},[36,139068,2040],{"class":49},[36,139070,139071],{"class":38,"line":125},[36,139072,2315],{"class":49},[14,139074,139075],{},"样式实例代码：",[26,139077,139078],{"className":127196,"code":139038,"language":127198,"meta":31,"style":31},[33,139079,139080,139088,139098,139108],{"__ignoreMap":31},[36,139081,139082,139084,139086],{"class":38,"line":39},[36,139083,52353],{"class":52042},[36,139085,138197],{"class":2713},[36,139087,16316],{"class":49},[36,139089,139090,139092,139094,139096],{"class":38,"line":46},[36,139091,138204],{"class":60},[36,139093,52179],{"class":49},[36,139095,8399],{"class":998},[36,139097,2040],{"class":49},[36,139099,139100,139102,139104,139106],{"class":38,"line":78},[36,139101,128812],{"class":60},[36,139103,52179],{"class":49},[36,139105,61611],{"class":60},[36,139107,2040],{"class":49},[36,139109,139110],{"class":38,"line":125},[36,139111,2315],{"class":49},[868,139113,139115],{"id":139114},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1886,139117,139118],{},[854,139119,139120],{},"header 盒子必须要有高度",[14,139122,139123,139124,139126,139127],{},"1 号盒子是 ",[33,139125,132208],{}," 标志定位，在正常开发过程中， ",[1043,139128,139129,139130,139133],{},"logo的布局其实是有讲究的，需要进行 ",[33,139131,139132],{},"logoSEO","的优化 （★★★）",[1886,139135,139136,139144,139152,139179],{},[854,139137,139138,139140,139141,139143],{},[33,139139,132208],{}," 里面首先放一个 ",[33,139142,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[854,139145,139146,139148,139149,139151],{},[33,139147,10],{}," 里面再放一个链接，可以返回首页的，把 ",[33,139150,132208],{}," 的背景图片给链接即可",[854,139153,139154,139155],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1886,139156,139157,139172],{},[854,139158,139159,139160,139163,139164,139167,139168,139171],{},"方法1：",[33,139161,139162],{},"text-indent"," 移到盒子外面（",[33,139165,139166],{},"text-indent: -9999px",") ，然后 ",[33,139169,139170],{},"overflow:hidden"," ，淘宝的做法",[854,139173,139174,139175,139178],{},"方法2：直接给 ",[33,139176,139177],{},"font-size: 0;"," 就看不到文字了，京东的做法",[854,139180,139181,139182,139184,139185,139187],{},"最后给链接一个 ",[33,139183,52149],{}," 属性，这样鼠标放到 ",[33,139186,132208],{}," 上就可以看到提示文字了",[14,139189,139035],{},[26,139191,139192],{"className":127943,"code":132429,"language":127945,"meta":31,"style":31},[33,139193,139194],{"__ignoreMap":31},[36,139195,139196,139198,139200,139202,139204,139206,139208,139210,139212,139214,139216],{"class":38,"line":39},[36,139197,1789],{"class":49},[36,139199,50],{"class":52042},[36,139201,61799],{"class":2713},[36,139203,54],{"class":49},[36,139205,132444],{"class":998},[36,139207,132447],{"class":2713},[36,139209,54],{"class":49},[36,139211,132452],{"class":998},[36,139213,132455],{"class":49},[36,139215,50],{"class":52042},[36,139217,52049],{"class":49},[14,139219,139075],{},[26,139221,139222],{"className":127943,"code":132429,"language":127945,"meta":31,"style":31},[33,139223,139224],{"__ignoreMap":31},[36,139225,139226,139228,139230,139232,139234,139236,139238,139240,139242,139244,139246],{"class":38,"line":39},[36,139227,1789],{"class":49},[36,139229,50],{"class":52042},[36,139231,61799],{"class":2713},[36,139233,54],{"class":49},[36,139235,132444],{"class":998},[36,139237,132447],{"class":2713},[36,139239,54],{"class":49},[36,139241,132452],{"class":998},[36,139243,132455],{"class":49},[36,139245,50],{"class":52042},[36,139247,52049],{"class":49},[14,139249,139250,139251,139253],{},"2 号盒子是 ",[33,139252,132221],{}," 搜索模块定位",[1886,139255,139256,139259,139262,139265],{},[854,139257,139258],{},"search盒子利用定位的方式放在对应的位置",[854,139260,139261],{},"search盒子设置绝对定位，header盒子设置相对定位",[854,139263,139264],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[854,139266,139267],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,139269,139035],{},[26,139271,139272],{"className":127196,"code":132516,"language":127198,"meta":31,"style":31},[33,139273,139274,139296,139300,139310],{"__ignoreMap":31},[36,139275,139276,139278,139280,139282,139284,139286,139288,139290,139292,139294],{"class":38,"line":39},[36,139277,52353],{"class":52042},[36,139279,154],{"class":49},[36,139281,14],{"class":52042},[36,139283,154],{"class":49},[36,139285,10],{"class":52042},[36,139287,154],{"class":49},[36,139289,1886],{"class":52042},[36,139291,154],{"class":49},[36,139293,854],{"class":52042},[36,139295,16316],{"class":49},[36,139297,139298],{"class":38,"line":46},[36,139299,132545],{"class":42},[36,139301,139302,139304,139306,139308],{"class":38,"line":78},[36,139303,128812],{"class":60},[36,139305,52179],{"class":49},[36,139307,61611],{"class":60},[36,139309,2040],{"class":49},[36,139311,139312],{"class":38,"line":125},[36,139313,2315],{"class":49},[14,139315,139075],{},[26,139317,139318],{"className":127196,"code":132516,"language":127198,"meta":31,"style":31},[33,139319,139320,139342,139346,139356],{"__ignoreMap":31},[36,139321,139322,139324,139326,139328,139330,139332,139334,139336,139338,139340],{"class":38,"line":39},[36,139323,52353],{"class":52042},[36,139325,154],{"class":49},[36,139327,14],{"class":52042},[36,139329,154],{"class":49},[36,139331,10],{"class":52042},[36,139333,154],{"class":49},[36,139335,1886],{"class":52042},[36,139337,154],{"class":49},[36,139339,854],{"class":52042},[36,139341,16316],{"class":49},[36,139343,139344],{"class":38,"line":46},[36,139345,132545],{"class":42},[36,139347,139348,139350,139352,139354],{"class":38,"line":78},[36,139349,128812],{"class":60},[36,139351,52179],{"class":49},[36,139353,61611],{"class":60},[36,139355,2040],{"class":49},[36,139357,139358],{"class":38,"line":125},[36,139359,2315],{"class":49},[14,139361,139362],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,139364,139365,139366,139369],{},"3 号盒子是 ",[33,139367,139368],{},"hotwords"," 热词模块定位",[1886,139371,139372,139375,139378],{},[854,139373,139374],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[854,139376,139377],{},"给里面所有的a标签设置 左右10px的外边距",[854,139379,139380],{},"给第一个a标签设置文字变红色（#c81623）",[14,139382,139035],{},[26,139384,139386],{"className":127196,"code":139385,"language":127198,"meta":31,"style":31},"div {\n  margin: 0 auto;\n}\n",[33,139387,139388,139394,139406],{"__ignoreMap":31},[36,139389,139390,139392],{"class":38,"line":39},[36,139391,52353],{"class":52042},[36,139393,16316],{"class":49},[36,139395,139396,139398,139400,139402,139404],{"class":38,"line":46},[36,139397,71212],{"class":60},[36,139399,52179],{"class":49},[36,139401,643],{"class":60},[36,139403,52298],{"class":60},[36,139405,2040],{"class":49},[36,139407,139408],{"class":38,"line":78},[36,139409,2315],{"class":49},[14,139411,139075],{},[26,139413,139414],{"className":127196,"code":139385,"language":127198,"meta":31,"style":31},[33,139415,139416,139422,139434],{"__ignoreMap":31},[36,139417,139418,139420],{"class":38,"line":39},[36,139419,52353],{"class":52042},[36,139421,16316],{"class":49},[36,139423,139424,139426,139428,139430,139432],{"class":38,"line":46},[36,139425,71212],{"class":60},[36,139427,52179],{"class":49},[36,139429,643],{"class":60},[36,139431,52298],{"class":60},[36,139433,2040],{"class":49},[36,139435,139436],{"class":38,"line":78},[36,139437,2315],{"class":49},[14,139439,139440,139441,139444],{},"4 号盒子是 ",[33,139442,139443],{},"shopcar"," 购物车模块",[1886,139446,139447,139452,139455,139458],{},[854,139448,123979,139449,139451],{},[33,139450,139443],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[854,139453,139454],{},"count 统计部分用绝对定位做",[854,139456,139457],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[854,139459,139460],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,139462,139035],{},[26,139464,139465],{"className":127196,"code":132628,"language":127198,"meta":31,"style":31},[33,139466,139467,139471,139485,139489,139503,139507,139521,139525,139539,139543],{"__ignoreMap":31},[36,139468,139469],{"class":38,"line":39},[36,139470,132635],{"class":42},[36,139472,139473,139475,139477,139479,139481,139483],{"class":38,"line":46},[36,139474,132640],{"class":2713},[36,139476,80549],{"class":49},[36,139478,129556],{"class":60},[36,139480,52179],{"class":49},[36,139482,132649],{"class":60},[36,139484,130126],{"class":49},[36,139486,139487],{"class":38,"line":78},[36,139488,132656],{"class":42},[36,139490,139491,139493,139495,139497,139499,139501],{"class":38,"line":125},[36,139492,132661],{"class":2713},[36,139494,80549],{"class":49},[36,139496,129556],{"class":60},[36,139498,52179],{"class":49},[36,139500,55506],{"class":60},[36,139502,130126],{"class":49},[36,139504,139505],{"class":38,"line":131},[36,139506,132676],{"class":42},[36,139508,139509,139511,139513,139515,139517,139519],{"class":38,"line":396},[36,139510,132681],{"class":2713},[36,139512,80549],{"class":49},[36,139514,129556],{"class":60},[36,139516,52179],{"class":49},[36,139518,55573],{"class":60},[36,139520,130126],{"class":49},[36,139522,139523],{"class":38,"line":407},[36,139524,132696],{"class":42},[36,139526,139527,139529,139531,139533,139535,139537],{"class":38,"line":2061},[36,139528,132701],{"class":2713},[36,139530,80549],{"class":49},[36,139532,129556],{"class":60},[36,139534,52179],{"class":49},[36,139536,86975],{"class":60},[36,139538,130126],{"class":49},[36,139540,139541],{"class":38,"line":2067},[36,139542,132716],{"class":42},[36,139544,139545,139547,139549,139551,139553,139555],{"class":38,"line":2079},[36,139546,132721],{"class":2713},[36,139548,80549],{"class":49},[36,139550,129556],{"class":60},[36,139552,52179],{"class":49},[36,139554,132730],{"class":60},[36,139556,130126],{"class":49},[14,139558,139075],{},[26,139560,139561],{"className":127196,"code":132628,"language":127198,"meta":31,"style":31},[33,139562,139563,139567,139581,139585,139599,139603,139617,139621,139635,139639],{"__ignoreMap":31},[36,139564,139565],{"class":38,"line":39},[36,139566,132635],{"class":42},[36,139568,139569,139571,139573,139575,139577,139579],{"class":38,"line":46},[36,139570,132640],{"class":2713},[36,139572,80549],{"class":49},[36,139574,129556],{"class":60},[36,139576,52179],{"class":49},[36,139578,132649],{"class":60},[36,139580,130126],{"class":49},[36,139582,139583],{"class":38,"line":78},[36,139584,132656],{"class":42},[36,139586,139587,139589,139591,139593,139595,139597],{"class":38,"line":125},[36,139588,132661],{"class":2713},[36,139590,80549],{"class":49},[36,139592,129556],{"class":60},[36,139594,52179],{"class":49},[36,139596,55506],{"class":60},[36,139598,130126],{"class":49},[36,139600,139601],{"class":38,"line":131},[36,139602,132676],{"class":42},[36,139604,139605,139607,139609,139611,139613,139615],{"class":38,"line":396},[36,139606,132681],{"class":2713},[36,139608,80549],{"class":49},[36,139610,129556],{"class":60},[36,139612,52179],{"class":49},[36,139614,55573],{"class":60},[36,139616,130126],{"class":49},[36,139618,139619],{"class":38,"line":407},[36,139620,132696],{"class":42},[36,139622,139623,139625,139627,139629,139631,139633],{"class":38,"line":2061},[36,139624,132701],{"class":2713},[36,139626,80549],{"class":49},[36,139628,129556],{"class":60},[36,139630,52179],{"class":49},[36,139632,86975],{"class":60},[36,139634,130126],{"class":49},[36,139636,139637],{"class":38,"line":2067},[36,139638,132716],{"class":42},[36,139640,139641,139643,139645,139647,139649,139651],{"class":38,"line":2079},[36,139642,132721],{"class":2713},[36,139644,80549],{"class":49},[36,139646,129556],{"class":60},[36,139648,52179],{"class":49},[36,139650,132730],{"class":60},[36,139652,130126],{"class":49},[868,139654,139656,139657,139659],{"id":139655},"_1544-nav导航模块制作","15.4.4 ",[33,139658,54455],{},"导航模块制作",[2212,139661],{"style":127052,"src":139662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,139664,139665,139667],{},[33,139666,54455],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139669,139670,139671],{},"1 号盒子左侧浮动，",[33,139672,139673],{},"dropdown",[1886,139675,139676,139686,139694,139700,139708,139718,139726,139737],{},[854,139677,139678,139679,101662,139682,139685],{},"1号盒子有讲究，根据相关性 里面包含 ",[33,139680,139681],{},".dt",[33,139683,139684],{},".dd"," 两个盒子",[854,139687,139688,139690,139691,139693],{},[33,139689,139681],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[33,139692,139684],{}," 挤到下面去了",[854,139695,139696,139697,139699],{},"给 ",[33,139698,139684],{}," 盒子设置宽度 和 高度，以及背景颜色",[854,139701,139696,139702,139704,139705,120881],{},[33,139703,139684],{}," 盒子里面定义 无序列表 （",[33,139706,139707],{},"ul > li > a",[854,139709,139710,139711,139713,139714,139717],{},"每个 ",[33,139712,854],{}," 都有一个高度（",[33,139715,139716],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[854,139719,139696,139720,139722,139723,120881],{},[33,139721,854],{}," 里面的a设置文字大小（",[33,139724,139725],{},"14px",[854,139727,139696,139728,139730,139731,139733,139734,139736],{},[33,139729,854],{}," 设置 ",[33,139732,128357],{},"，当鼠标移入的时候，让",[33,139735,854],{},"的背景变成白色，让里面的文字变成红色",[854,139738,139739,139741,139742,139744,139745,139747],{},[33,139740,854],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[33,139743,854],{},"的右侧，那么给",[33,139746,854],{},"设置相对定位",[14,139749,139750],{},"一定要注意相关性",[14,139752,139035],{},[26,139754,139755],{"className":127196,"code":139038,"language":127198,"meta":31,"style":31},[33,139756,139757,139765,139775,139785],{"__ignoreMap":31},[36,139758,139759,139761,139763],{"class":38,"line":39},[36,139760,52353],{"class":52042},[36,139762,138197],{"class":2713},[36,139764,16316],{"class":49},[36,139766,139767,139769,139771,139773],{"class":38,"line":46},[36,139768,138204],{"class":60},[36,139770,52179],{"class":49},[36,139772,8399],{"class":998},[36,139774,2040],{"class":49},[36,139776,139777,139779,139781,139783],{"class":38,"line":78},[36,139778,128812],{"class":60},[36,139780,52179],{"class":49},[36,139782,61611],{"class":60},[36,139784,2040],{"class":49},[36,139786,139787],{"class":38,"line":125},[36,139788,2315],{"class":49},[14,139790,139075],{},[26,139792,139793],{"className":127196,"code":139038,"language":127198,"meta":31,"style":31},[33,139794,139795,139803,139813,139823],{"__ignoreMap":31},[36,139796,139797,139799,139801],{"class":38,"line":39},[36,139798,52353],{"class":52042},[36,139800,138197],{"class":2713},[36,139802,16316],{"class":49},[36,139804,139805,139807,139809,139811],{"class":38,"line":46},[36,139806,138204],{"class":60},[36,139808,52179],{"class":49},[36,139810,8399],{"class":998},[36,139812,2040],{"class":49},[36,139814,139815,139817,139819,139821],{"class":38,"line":78},[36,139816,128812],{"class":60},[36,139818,52179],{"class":49},[36,139820,61611],{"class":60},[36,139822,2040],{"class":49},[36,139824,139825],{"class":38,"line":125},[36,139826,2315],{"class":49},[14,139828,139829],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139831,139832,139833,139836],{},"2 号盒子左侧浮动，",[33,139834,139835],{},"navitems"," 导航栏组",[1886,139838,139839,139844,139853],{},[854,139840,139841,139842],{},"里面结构是 ",[33,139843,139707],{},[854,139845,139846,139847,139849,139850,139852],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[33,139848,50],{},"左右的",[33,139851,31625],{},"把两侧撑开",[854,139854,139855],{},"让文字垂直居中（行高等于高度）",[2212,139857],{"style":127052,"src":139858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139860,139861],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139863,139035],{},[26,139865,139867],{"className":127196,"code":139866,"language":127198,"meta":31,"style":31},".box {\n  float: left;\n}\n",[33,139868,139869,139875,139885],{"__ignoreMap":31},[36,139870,139871,139873],{"class":38,"line":39},[36,139872,131044],{"class":2713},[36,139874,16316],{"class":49},[36,139876,139877,139879,139881,139883],{"class":38,"line":46},[36,139878,131676],{"class":60},[36,139880,52179],{"class":49},[36,139882,24480],{"class":60},[36,139884,2040],{"class":49},[36,139886,139887],{"class":38,"line":78},[36,139888,2315],{"class":49},[14,139890,139075],{},[26,139892,139893],{"className":127196,"code":139866,"language":127198,"meta":31,"style":31},[33,139894,139895,139901,139911],{"__ignoreMap":31},[36,139896,139897,139899],{"class":38,"line":39},[36,139898,131044],{"class":2713},[36,139900,16316],{"class":49},[36,139902,139903,139905,139907,139909],{"class":38,"line":46},[36,139904,131676],{"class":60},[36,139906,52179],{"class":49},[36,139908,24480],{"class":60},[36,139910,2040],{"class":49},[36,139912,139913],{"class":38,"line":78},[36,139914,2315],{"class":49},[14,139916,139917],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[2212,139919],{"style":127052,"src":139920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[26,139922,139923],{"className":127196,"code":131353,"language":127198,"meta":31,"style":31},[33,139924,139925,139931,139947],{"__ignoreMap":31},[36,139926,139927,139929],{"class":38,"line":39},[36,139928,52353],{"class":52042},[36,139930,16316],{"class":49},[36,139932,139933,139935,139937,139939,139941,139943,139945],{"class":38,"line":46},[36,139934,71638],{"class":60},[36,139936,52179],{"class":49},[36,139938,61],{"class":60},[36,139940,52234],{"class":53},[36,139942,52263],{"class":60},[36,139944,130588],{"class":60},[36,139946,2040],{"class":49},[36,139948,139949],{"class":38,"line":78},[36,139950,2315],{"class":49},[868,139952,139954],{"id":139953},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[2212,139956],{"style":127052,"src":139957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1886,139959,139960,139965,139970],{},[854,139961,139962,139964],{},[33,139963,132399],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[854,139966,139967,139969],{},[33,139968,132399],{}," 里面有一个大的版心",[854,139971,139972,139973,139976,139977],{},"版心里面包含 1 号盒子，",[33,139974,139975],{},"mod_service"," 是服务模块，mod 是模块的意思",[1886,139978,139979,139984,139997,140013,140018],{},[854,139980,139696,139981,139983],{},[33,139982,139975],{}," 设置高度（80px）和下边框",[854,139985,139986,139987,139990,139991,139993,139994,139996],{},"在里面定义 ",[33,139988,139989],{},"ul > li"," ,每个",[33,139992,854],{}," 宽度是300px 高度是 50px，给每个",[33,139995,854],{},"设置35px的左内边距",[854,139998,139999,140000,140002,140003,140005,140006,140008,140009,19154,140011,120881],{},"在每个",[33,140001,854],{},"里面，放一个 ",[33,140004,23654],{},"（里面放图标），一个",[33,140007,52353],{},"（里面放",[33,140010,52353],{},[33,140012,14],{},[854,140014,139696,140015,140017],{},[33,140016,23654],{},"设置浮动，让h5与这个div左右排列",[854,140019,140020],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,140022,139035],{},[26,140024,140026],{"className":127196,"code":140025,"language":127198,"meta":31,"style":31},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[33,140027,140028,140034,140046,140058,140085],{"__ignoreMap":31},[36,140029,140030,140032],{"class":38,"line":39},[36,140031,134953],{"class":2713},[36,140033,16316],{"class":49},[36,140035,140036,140038,140040,140042,140044],{"class":38,"line":46},[36,140037,71310],{"class":60},[36,140039,52179],{"class":49},[36,140041,72],{"class":60},[36,140043,52234],{"class":53},[36,140045,2040],{"class":49},[36,140047,140048,140050,140052,140054,140056],{"class":38,"line":78},[36,140049,71530],{"class":60},[36,140051,52179],{"class":49},[36,140053,72],{"class":60},[36,140055,52234],{"class":53},[36,140057,2040],{"class":49},[36,140059,140060,140062,140064,140066,140068,140070,140072,140074,140077,140079,140081,140083],{"class":38,"line":125},[36,140061,71353],{"class":60},[36,140063,52179],{"class":49},[36,140065,62468],{"class":60},[36,140067,901],{"class":49},[36,140069,134992],{"class":416},[36,140071,14458],{"class":49},[36,140073,62478],{"class":60},[36,140075,140076],{"class":60}," -10",[36,140078,52234],{"class":53},[36,140080,135011],{"class":60},[36,140082,52234],{"class":53},[36,140084,2040],{"class":49},[36,140086,140087],{"class":38,"line":131},[36,140088,2315],{"class":49},[14,140090,139075],{},[26,140092,140093],{"className":127196,"code":140025,"language":127198,"meta":31,"style":31},[33,140094,140095,140101,140113,140125,140151],{"__ignoreMap":31},[36,140096,140097,140099],{"class":38,"line":39},[36,140098,134953],{"class":2713},[36,140100,16316],{"class":49},[36,140102,140103,140105,140107,140109,140111],{"class":38,"line":46},[36,140104,71310],{"class":60},[36,140106,52179],{"class":49},[36,140108,72],{"class":60},[36,140110,52234],{"class":53},[36,140112,2040],{"class":49},[36,140114,140115,140117,140119,140121,140123],{"class":38,"line":78},[36,140116,71530],{"class":60},[36,140118,52179],{"class":49},[36,140120,72],{"class":60},[36,140122,52234],{"class":53},[36,140124,2040],{"class":49},[36,140126,140127,140129,140131,140133,140135,140137,140139,140141,140143,140145,140147,140149],{"class":38,"line":125},[36,140128,71353],{"class":60},[36,140130,52179],{"class":49},[36,140132,62468],{"class":60},[36,140134,901],{"class":49},[36,140136,134992],{"class":416},[36,140138,14458],{"class":49},[36,140140,62478],{"class":60},[36,140142,140076],{"class":60},[36,140144,52234],{"class":53},[36,140146,135011],{"class":60},[36,140148,52234],{"class":53},[36,140150,2040],{"class":49},[36,140152,140153],{"class":38,"line":131},[36,140154,2315],{"class":49},[14,140156,140157],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1886,140159,140160,140163,140169,140175,140187],{},[854,140161,140162],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[854,140164,140165,140166,120881],{},"里面的布局利用 自定义列表来实现（",[33,140167,140168],{},"dl > dt + dd",[854,140170,139696,140171,140174],{},[33,140172,140173],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[854,140176,139696,140177,140180,140181,19154,140183,140186],{},[33,140178,140179],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[33,140182,140179],{},[33,140184,140185],{},"dd","之间有些距离",[854,140188,140189],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,140191,139035],{},[26,140193,140194],{"className":127196,"code":139385,"language":127198,"meta":31,"style":31},[33,140195,140196,140202,140214],{"__ignoreMap":31},[36,140197,140198,140200],{"class":38,"line":39},[36,140199,52353],{"class":52042},[36,140201,16316],{"class":49},[36,140203,140204,140206,140208,140210,140212],{"class":38,"line":46},[36,140205,71212],{"class":60},[36,140207,52179],{"class":49},[36,140209,643],{"class":60},[36,140211,52298],{"class":60},[36,140213,2040],{"class":49},[36,140215,140216],{"class":38,"line":78},[36,140217,2315],{"class":49},[14,140219,139075],{},[26,140221,140222],{"className":127196,"code":139385,"language":127198,"meta":31,"style":31},[33,140223,140224,140230,140242],{"__ignoreMap":31},[36,140225,140226,140228],{"class":38,"line":39},[36,140227,52353],{"class":52042},[36,140229,16316],{"class":49},[36,140231,140232,140234,140236,140238,140240],{"class":38,"line":46},[36,140233,71212],{"class":60},[36,140235,52179],{"class":49},[36,140237,643],{"class":60},[36,140239,52298],{"class":60},[36,140241,2040],{"class":49},[36,140243,140244],{"class":38,"line":78},[36,140245,2315],{"class":49},[14,140247,140248],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1886,140250,140251,140260,140263,140274],{},[854,140252,140253,140254,140256,140257,140259],{},"分为上下两块，上面是 ",[33,140255,132416],{}," 友情链接，下面是 ",[33,140258,132409],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[854,140261,140262],{},"把内容分别复制到相应模块中",[854,140264,139696,140265,140267,140268,140270,140271,140273],{},[33,140266,132416],{}," 设置 15px 的下外边距，给",[33,140269,132416],{}," 里面 的 ",[33,140272,50],{}," 标签设置 左右 3px 的外边距",[854,140275,140276,140277,140279],{},"给",[33,140278,132409],{}," 设置 20px 的行高",[14,140281,139035],{},[26,140283,140284],{"className":127196,"code":139385,"language":127198,"meta":31,"style":31},[33,140285,140286,140292,140304],{"__ignoreMap":31},[36,140287,140288,140290],{"class":38,"line":39},[36,140289,52353],{"class":52042},[36,140291,16316],{"class":49},[36,140293,140294,140296,140298,140300,140302],{"class":38,"line":46},[36,140295,71212],{"class":60},[36,140297,52179],{"class":49},[36,140299,643],{"class":60},[36,140301,52298],{"class":60},[36,140303,2040],{"class":49},[36,140305,140306],{"class":38,"line":78},[36,140307,2315],{"class":49},[14,140309,139075],{},[26,140311,140312],{"className":127196,"code":139385,"language":127198,"meta":31,"style":31},[33,140313,140314,140320,140332],{"__ignoreMap":31},[36,140315,140316,140318],{"class":38,"line":39},[36,140317,52353],{"class":52042},[36,140319,16316],{"class":49},[36,140321,140322,140324,140326,140328,140330],{"class":38,"line":46},[36,140323,71212],{"class":60},[36,140325,52179],{"class":49},[36,140327,643],{"class":60},[36,140329,52298],{"class":60},[36,140331,2040],{"class":49},[36,140333,140334],{"class":38,"line":78},[36,140335,2315],{"class":49},[14,140337,140338],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[807,140340,140341],{},"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":46,"depth":46,"links":140343},[140344,140345,140346,140353],{"id":138624,"depth":46,"text":138625},{"id":138643,"depth":46,"text":138644},{"id":138670,"depth":46,"text":138671,"children":140347},[140348,140349,140350,140351,140352],{"id":138674,"depth":78,"text":138675},{"id":138687,"depth":78,"text":138688},{"id":138711,"depth":78,"text":138712},{"id":138733,"depth":78,"text":138734},{"id":138805,"depth":78,"text":138806},{"id":138931,"depth":46,"text":138932,"children":140354},[140355,140356,140357,140358,140360],{"id":138935,"depth":78,"text":138936},{"id":138942,"depth":78,"text":138943},{"id":139114,"depth":78,"text":139115},{"id":139655,"depth":78,"text":140359},"15.4.4 nav导航模块制作",{"id":139953,"depth":78,"text":139954},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138616,"description":823},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140367,"title":140368,"body":140369,"description":823,"extension":824,"meta":142771,"navigation":193,"path":142772,"seo":142773,"stem":142774,"__hash__":142775},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140370,"toc":142748},[140371,140374,140378,140382,140394,140397,140400,140403,140414,140416,140440,140442,140466,140471,140474,140476,140512,140514,140550,140553,140558,140561,140564,140567,140597,140604,140607,140617,140619,140653,140656,140690,140696,140713,140715,140751,140753,140789,140794,140819,140821,140847,140849,140873,140880,140883,140947,140949,140991,140993,141033,141040,141045,141047,141077,141079,141109,141113,141116,141123,141135,141137,141163,141165,141189,141192,141194,141218,141224,141234,141236,141266,141268,141298,141305,141346,141348,141384,141386,141422,141426,141429,141432,141435,141441,141446,141449,141472,141475,141499,141502,141526,141531,141534,141537,141540,141543,141546,141620,141622,141652,141654,141684,141687,141690,141722,141726,141730,141744,141753,141756,141761,141763,141857,141859,141953,141976,141978,142002,142004,142028,142035,142038,142048,142050,142074,142079,142087,142089,142119,142124,142164,142166,142192,142194,142220,142224,142227,142232,142235,142239,142247,142254,142262,142264,142294,142296,142326,142334,142337,142340,142342,142372,142374,142404,142407,142412,142414,142438,142440,142464,142467,142552,142554,142578,142580,142604,142608,142610,142634,142636,142670,142674,142688,142691,142696,142699,142704,142707,142737,142745],[10,140372,140368],{"id":140373},"_16-品优购项目下篇-主体与页面开发",[21,140375,140377],{"id":140376},"_161-项目主体模块制作","16.1 项目主体模块制作",[868,140379,140381],{"id":140380},"_1611-首页制作","16.1.1 首页制作",[14,140383,140384,140386,140387,140389,140390,140393],{},[1043,140385,102702],{}," 主体模块是 ",[1043,140388,74800],{}," 里面专有的，注意需要新的样式文件 ",[1043,140391,140392],{},"index.css，"," 就不要写在common.css中了",[2212,140395],{"style":127052,"src":140396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[2212,140398],{"style":127052,"src":140399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,140401,140402],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1886,140404,140405,140408,140411],{},[854,140406,140407],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[854,140409,140410],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[854,140412,140413],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,140415,139035],{},[26,140417,140418],{"className":127196,"code":139866,"language":127198,"meta":31,"style":31},[33,140419,140420,140426,140436],{"__ignoreMap":31},[36,140421,140422,140424],{"class":38,"line":39},[36,140423,131044],{"class":2713},[36,140425,16316],{"class":49},[36,140427,140428,140430,140432,140434],{"class":38,"line":46},[36,140429,131676],{"class":60},[36,140431,52179],{"class":49},[36,140433,24480],{"class":60},[36,140435,2040],{"class":49},[36,140437,140438],{"class":38,"line":78},[36,140439,2315],{"class":49},[14,140441,139075],{},[26,140443,140444],{"className":127196,"code":139866,"language":127198,"meta":31,"style":31},[33,140445,140446,140452,140462],{"__ignoreMap":31},[36,140447,140448,140450],{"class":38,"line":39},[36,140449,131044],{"class":2713},[36,140451,16316],{"class":49},[36,140453,140454,140456,140458,140460],{"class":38,"line":46},[36,140455,131676],{"class":60},[36,140457,52179],{"class":49},[36,140459,24480],{"class":60},[36,140461,2040],{"class":49},[36,140463,140464],{"class":38,"line":78},[36,140465,2315],{"class":49},[851,140467,140468],{},[854,140469,140470],{},"左侧focus模块制作",[2212,140472],{"style":127052,"src":140473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,140475,139035],{},[26,140477,140478],{"className":127196,"code":128519,"language":127198,"meta":31,"style":31},[33,140479,140480,140488,140498,140508],{"__ignoreMap":31},[36,140481,140482,140484,140486],{"class":38,"line":39},[36,140483,54563],{"class":52042},[36,140485,62642],{"class":2713},[36,140487,16316],{"class":49},[36,140489,140490,140492,140494,140496],{"class":38,"line":46},[36,140491,128534],{"class":60},[36,140493,52179],{"class":49},[36,140495,55631],{"class":60},[36,140497,2040],{"class":49},[36,140499,140500,140502,140504,140506],{"class":38,"line":78},[36,140501,71540],{"class":60},[36,140503,52179],{"class":49},[36,140505,55479],{"class":60},[36,140507,2040],{"class":49},[36,140509,140510],{"class":38,"line":125},[36,140511,2315],{"class":49},[14,140513,139075],{},[26,140515,140516],{"className":127196,"code":128519,"language":127198,"meta":31,"style":31},[33,140517,140518,140526,140536,140546],{"__ignoreMap":31},[36,140519,140520,140522,140524],{"class":38,"line":39},[36,140521,54563],{"class":52042},[36,140523,62642],{"class":2713},[36,140525,16316],{"class":49},[36,140527,140528,140530,140532,140534],{"class":38,"line":46},[36,140529,128534],{"class":60},[36,140531,52179],{"class":49},[36,140533,55631],{"class":60},[36,140535,2040],{"class":49},[36,140537,140538,140540,140542,140544],{"class":38,"line":78},[36,140539,71540],{"class":60},[36,140541,52179],{"class":49},[36,140543,55479],{"class":60},[36,140545,2040],{"class":49},[36,140547,140548],{"class":38,"line":125},[36,140549,2315],{"class":49},[14,140551,140552],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[851,140554,140555],{"start":46},[854,140556,140557],{},"右侧newsflash模块制作",[2212,140559],{"style":127052,"src":140560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,140562,140563],{},"右侧的模块 分为上中下三个盒子",[14,140565,140566],{},"结构代码：",[26,140568,140569],{"className":127943,"code":134698,"language":127945,"meta":31,"style":31},[33,140570,140571],{"__ignoreMap":31},[36,140572,140573,140575,140577,140579,140581,140583,140585,140587,140589,140591,140593,140595],{"class":38,"line":39},[36,140574,1789],{"class":49},[36,140576,2212],{"class":52042},[36,140578,55981],{"class":2713},[36,140580,54],{"class":49},[36,140582,134713],{"class":998},[36,140584,55989],{"class":2713},[36,140586,54],{"class":49},[36,140588,134720],{"class":998},[36,140590,134723],{"class":2713},[36,140592,54],{"class":49},[36,140594,134728],{"class":998},[36,140596,52049],{"class":49},[14,140598,140599,140600,140603],{},"1 号盒子为 ",[33,140601,140602],{},"news"," 新闻模块 高度为 165px",[2212,140605],{"style":127052,"src":140606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,140608,140609,140610,140613,140614],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[33,140611,140612],{},"news-hd","，下面是 ",[33,140615,140616],{},"news-bd",[14,140618,140566],{},[26,140620,140621],{"className":127943,"code":131300,"language":127945,"meta":31,"style":31},[33,140622,140623,140627,140641,140645],{"__ignoreMap":31},[36,140624,140625],{"class":38,"line":39},[36,140626,131307],{"class":42},[36,140628,140629,140631,140633,140635,140637,140639],{"class":38,"line":46},[36,140630,1789],{"class":49},[36,140632,52353],{"class":52042},[36,140634,54228],{"class":2713},[36,140636,54],{"class":49},[36,140638,131320],{"class":998},[36,140640,52049],{"class":49},[36,140642,140643],{"class":38,"line":78},[36,140644,131327],{"class":49},[36,140646,140647,140649,140651],{"class":38,"line":125},[36,140648,52527],{"class":49},[36,140650,52353],{"class":52042},[36,140652,52049],{"class":49},[14,140654,140655],{},"样式代码：",[26,140657,140658],{"className":127943,"code":131300,"language":127945,"meta":31,"style":31},[33,140659,140660,140664,140678,140682],{"__ignoreMap":31},[36,140661,140662],{"class":38,"line":39},[36,140663,131307],{"class":42},[36,140665,140666,140668,140670,140672,140674,140676],{"class":38,"line":46},[36,140667,1789],{"class":49},[36,140669,52353],{"class":52042},[36,140671,54228],{"class":2713},[36,140673,54],{"class":49},[36,140675,131320],{"class":998},[36,140677,52049],{"class":49},[36,140679,140680],{"class":38,"line":78},[36,140681,131327],{"class":49},[36,140683,140684,140686,140688],{"class":38,"line":125},[36,140685,52527],{"class":49},[36,140687,52353],{"class":52042},[36,140689,52049],{"class":49},[14,140691,140692,140693,140695],{},"上面是",[33,140694,140612],{},"，设置高度是 33px，设置下边框",[1886,140697,140698,140704],{},[854,140699,140700,140701,140703],{},"里面放一个",[33,140702,23654],{}," 标题",[854,140705,140706,140707,140709,140710,140712],{},"放一个a",[33,140708,103337],{},"，内容是 更多，然后让 ",[33,140711,50],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140714,140566],{},[26,140716,140717],{"className":127196,"code":139038,"language":127198,"meta":31,"style":31},[33,140718,140719,140727,140737,140747],{"__ignoreMap":31},[36,140720,140721,140723,140725],{"class":38,"line":39},[36,140722,52353],{"class":52042},[36,140724,138197],{"class":2713},[36,140726,16316],{"class":49},[36,140728,140729,140731,140733,140735],{"class":38,"line":46},[36,140730,138204],{"class":60},[36,140732,52179],{"class":49},[36,140734,8399],{"class":998},[36,140736,2040],{"class":49},[36,140738,140739,140741,140743,140745],{"class":38,"line":78},[36,140740,128812],{"class":60},[36,140742,52179],{"class":49},[36,140744,61611],{"class":60},[36,140746,2040],{"class":49},[36,140748,140749],{"class":38,"line":125},[36,140750,2315],{"class":49},[14,140752,140655],{},[26,140754,140755],{"className":127196,"code":139038,"language":127198,"meta":31,"style":31},[33,140756,140757,140765,140775,140785],{"__ignoreMap":31},[36,140758,140759,140761,140763],{"class":38,"line":39},[36,140760,52353],{"class":52042},[36,140762,138197],{"class":2713},[36,140764,16316],{"class":49},[36,140766,140767,140769,140771,140773],{"class":38,"line":46},[36,140768,138204],{"class":60},[36,140770,52179],{"class":49},[36,140772,8399],{"class":998},[36,140774,2040],{"class":49},[36,140776,140777,140779,140781,140783],{"class":38,"line":78},[36,140778,128812],{"class":60},[36,140780,52179],{"class":49},[36,140782,61611],{"class":60},[36,140784,2040],{"class":49},[36,140786,140787],{"class":38,"line":125},[36,140788,2315],{"class":49},[14,140790,140791,140792],{},"下面是",[33,140793,140616],{},[1886,140795,140796,140804],{},[854,140797,140798,140799,101662,140801,140803],{},"里面包含 ",[33,140800,1886],{},[33,140802,854],{}," 还有链接",[854,140805,140276,140806,140808,140809,140811,140812,140815,140816],{},[33,140807,854],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[33,140810,131862],{}," 2.设置 ",[33,140813,140814],{},"white-space: nowrap;"," 3. 设置 ",[33,140817,140818],{},"text-overflow: ellipsis;",[14,140820,140566],{},[26,140822,140824],{"className":127196,"code":140823,"language":127198,"meta":31,"style":31},"div {\n  overflow: hidden;\n}\n",[33,140825,140826,140832,140843],{"__ignoreMap":31},[36,140827,140828,140830],{"class":38,"line":39},[36,140829,52353],{"class":52042},[36,140831,16316],{"class":49},[36,140833,140834,140837,140839,140841],{"class":38,"line":46},[36,140835,140836],{"class":60},"  overflow",[36,140838,52179],{"class":49},[36,140840,62456],{"class":60},[36,140842,2040],{"class":49},[36,140844,140845],{"class":38,"line":78},[36,140846,2315],{"class":49},[14,140848,140655],{},[26,140850,140851],{"className":127196,"code":140823,"language":127198,"meta":31,"style":31},[33,140852,140853,140859,140869],{"__ignoreMap":31},[36,140854,140855,140857],{"class":38,"line":39},[36,140856,52353],{"class":52042},[36,140858,16316],{"class":49},[36,140860,140861,140863,140865,140867],{"class":38,"line":46},[36,140862,140836],{"class":60},[36,140864,52179],{"class":49},[36,140866,62456],{"class":60},[36,140868,2040],{"class":49},[36,140870,140871],{"class":38,"line":78},[36,140872,2315],{"class":49},[14,140874,140875,140876,140879],{},"2 号盒子为 ",[33,140877,140878],{},"lifeservice"," 生活服务模块 高度为 209px",[2212,140881],{"style":127052,"src":140882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1886,140884,140885,140888,140898,140922,140933],{},[854,140886,140887],{},"设置边框（左右下边框）",[854,140889,140890,140891,140894,140895,140897],{},"里面的内容 是 ",[33,140892,140893],{},"ul > 12*li","，给",[33,140896,854],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[854,140899,140900,140901],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1886,140902,140903,140908,140917],{},[854,140904,140905,140907],{},[33,140906,140878],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[854,140909,140910,140911,140913,140914,140916],{},"可以让 ",[33,140912,140878],{}," 里面的 ",[33,140915,1886],{}," 宽度为 252，就可以装的下 4 个 小 li",[854,140918,140919,140921],{},[33,140920,140878],{}," 盒子 overflow 隐藏多余的部分就可以了",[854,140923,117111,140924,140926,140927,140929,140930,140932],{},[33,140925,854],{}," 里面放一个 ",[33,140928,1326],{},"（里面放图标），下面的文本用 ",[33,140931,14],{}," 标签包裹",[854,140934,139696,140935,140937,140938,140940,140941,139730,140943,140946],{},[33,140936,1326],{}," 设置 24px宽和28px的高（注意 ",[33,140939,1326],{}," 是行内元素， 转成行内块），给 ",[33,140942,854],{},[33,140944,140945],{},"text-align:center"," 让里面内容居中显示",[14,140948,140566],{},[26,140950,140952],{"className":127196,"code":140951,"language":127198,"meta":31,"style":31},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[33,140953,140954,140972,140977,140987],{"__ignoreMap":31},[36,140955,140956,140958,140960,140962,140964,140966,140968,140970],{"class":38,"line":39},[36,140957,36],{"class":52042},[36,140959,154],{"class":49},[36,140961,50],{"class":52042},[36,140963,154],{"class":49},[36,140965,24297],{"class":52042},[36,140967,154],{"class":49},[36,140969,1043],{"class":52042},[36,140971,16316],{"class":49},[36,140973,140974],{"class":38,"line":46},[36,140975,140976],{"class":42},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[36,140978,140979,140981,140983,140985],{"class":38,"line":78},[36,140980,128812],{"class":60},[36,140982,52179],{"class":49},[36,140984,128874],{"class":60},[36,140986,2040],{"class":49},[36,140988,140989],{"class":38,"line":125},[36,140990,2315],{"class":49},[14,140992,140655],{},[26,140994,140995],{"className":127196,"code":140951,"language":127198,"meta":31,"style":31},[33,140996,140997,141015,141019,141029],{"__ignoreMap":31},[36,140998,140999,141001,141003,141005,141007,141009,141011,141013],{"class":38,"line":39},[36,141000,36],{"class":52042},[36,141002,154],{"class":49},[36,141004,50],{"class":52042},[36,141006,154],{"class":49},[36,141008,24297],{"class":52042},[36,141010,154],{"class":49},[36,141012,1043],{"class":52042},[36,141014,16316],{"class":49},[36,141016,141017],{"class":38,"line":46},[36,141018,140976],{"class":42},[36,141020,141021,141023,141025,141027],{"class":38,"line":78},[36,141022,128812],{"class":60},[36,141024,52179],{"class":49},[36,141026,128874],{"class":60},[36,141028,2040],{"class":49},[36,141030,141031],{"class":38,"line":125},[36,141032,2315],{"class":49},[14,141034,141035,141036,141039],{},"3 号盒子为 ",[33,141037,141038],{},"bargain"," 特价商品",[1886,141041,141042],{},[854,141043,141044],{},"这个比较简单，直接插入一张图片即可",[14,141046,140566],{},[26,141048,141049],{"className":127943,"code":134698,"language":127945,"meta":31,"style":31},[33,141050,141051],{"__ignoreMap":31},[36,141052,141053,141055,141057,141059,141061,141063,141065,141067,141069,141071,141073,141075],{"class":38,"line":39},[36,141054,1789],{"class":49},[36,141056,2212],{"class":52042},[36,141058,55981],{"class":2713},[36,141060,54],{"class":49},[36,141062,134713],{"class":998},[36,141064,55989],{"class":2713},[36,141066,54],{"class":49},[36,141068,134720],{"class":998},[36,141070,134723],{"class":2713},[36,141072,54],{"class":49},[36,141074,134728],{"class":998},[36,141076,52049],{"class":49},[14,141078,140655],{},[26,141080,141081],{"className":127943,"code":134698,"language":127945,"meta":31,"style":31},[33,141082,141083],{"__ignoreMap":31},[36,141084,141085,141087,141089,141091,141093,141095,141097,141099,141101,141103,141105,141107],{"class":38,"line":39},[36,141086,1789],{"class":49},[36,141088,2212],{"class":52042},[36,141090,55981],{"class":2713},[36,141092,54],{"class":49},[36,141094,134713],{"class":998},[36,141096,55989],{"class":2713},[36,141098,54],{"class":49},[36,141100,134720],{"class":998},[36,141102,134723],{"class":2713},[36,141104,54],{"class":49},[36,141106,134728],{"class":998},[36,141108,52049],{"class":49},[868,141110,141112],{"id":141111},"_1612-推荐模块制作","16.1.2 推荐模块制作",[2212,141114],{"style":127052,"src":141115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,141117,141118,141119,141122],{},"大盒子 ",[33,141120,141121],{},"recom"," 推荐模块 recommend",[1886,141124,141125],{},[854,141126,141127,141128,141130,141131,141134],{},"给这个 ",[33,141129,141121],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[33,141132,141133],{},"#ebebeb","），设置距离上边 12px",[14,141136,140566],{},[26,141138,141140],{"className":127196,"code":141139,"language":127198,"meta":31,"style":31},"div {\n  background-color: #f0f0f0;\n}\n",[33,141141,141142,141148,141159],{"__ignoreMap":31},[36,141143,141144,141146],{"class":38,"line":39},[36,141145,52353],{"class":52042},[36,141147,16316],{"class":49},[36,141149,141150,141152,141154,141157],{"class":38,"line":46},[36,141151,71620],{"class":60},[36,141153,52179],{"class":49},[36,141155,141156],{"class":60},"#f0f0f0",[36,141158,2040],{"class":49},[36,141160,141161],{"class":38,"line":78},[36,141162,2315],{"class":49},[14,141164,140655],{},[26,141166,141167],{"className":127196,"code":141139,"language":127198,"meta":31,"style":31},[33,141168,141169,141175,141185],{"__ignoreMap":31},[36,141170,141171,141173],{"class":38,"line":39},[36,141172,52353],{"class":52042},[36,141174,16316],{"class":49},[36,141176,141177,141179,141181,141183],{"class":38,"line":46},[36,141178,71620],{"class":60},[36,141180,52179],{"class":49},[36,141182,141156],{"class":60},[36,141184,2040],{"class":49},[36,141186,141187],{"class":38,"line":78},[36,141188,2315],{"class":49},[14,141190,141191],{},"里面包含 2 个盒子， 浮动即可",[14,141193,140566],{},[26,141195,141196],{"className":127196,"code":139866,"language":127198,"meta":31,"style":31},[33,141197,141198,141204,141214],{"__ignoreMap":31},[36,141199,141200,141202],{"class":38,"line":39},[36,141201,131044],{"class":2713},[36,141203,16316],{"class":49},[36,141205,141206,141208,141210,141212],{"class":38,"line":46},[36,141207,131676],{"class":60},[36,141209,52179],{"class":49},[36,141211,24480],{"class":60},[36,141213,2040],{"class":49},[36,141215,141216],{"class":38,"line":78},[36,141217,2315],{"class":49},[14,141219,141220,141221],{},"1 号盒子 ",[33,141222,141223],{},"recom_hd",[1886,141225,141226,141229],{},[854,141227,141228],{},"设置宽度205px，高度163px",[854,141230,140700,141231,141233],{},[33,141232,2212],{},"标签，插入图片即可",[14,141235,140566],{},[26,141237,141238],{"className":127943,"code":134698,"language":127945,"meta":31,"style":31},[33,141239,141240],{"__ignoreMap":31},[36,141241,141242,141244,141246,141248,141250,141252,141254,141256,141258,141260,141262,141264],{"class":38,"line":39},[36,141243,1789],{"class":49},[36,141245,2212],{"class":52042},[36,141247,55981],{"class":2713},[36,141249,54],{"class":49},[36,141251,134713],{"class":998},[36,141253,55989],{"class":2713},[36,141255,54],{"class":49},[36,141257,134720],{"class":998},[36,141259,134723],{"class":2713},[36,141261,54],{"class":49},[36,141263,134728],{"class":998},[36,141265,52049],{"class":49},[14,141267,140655],{},[26,141269,141270],{"className":127943,"code":134698,"language":127945,"meta":31,"style":31},[33,141271,141272],{"__ignoreMap":31},[36,141273,141274,141276,141278,141280,141282,141284,141286,141288,141290,141292,141294,141296],{"class":38,"line":39},[36,141275,1789],{"class":49},[36,141277,2212],{"class":52042},[36,141279,55981],{"class":2713},[36,141281,54],{"class":49},[36,141283,134713],{"class":998},[36,141285,55989],{"class":2713},[36,141287,54],{"class":49},[36,141289,134720],{"class":998},[36,141291,134723],{"class":2713},[36,141293,54],{"class":49},[36,141295,134728],{"class":998},[36,141297,52049],{"class":49},[14,141299,141300,141301,141304],{},"2 号盒子 ",[33,141302,141303],{},"recom_bd"," ，注意里面的小竖线",[1886,141306,141307,141318,141321,141326,141331],{},[854,141308,141309,141310,141312,141313,141315,141316],{},"右侧结构里面放 ",[33,141311,1886],{}," 包含 4个 ",[33,141314,854],{},"，每个li里面包含一个",[33,141317,2212],{},[854,141319,141320],{},"直接利用切片工具把里面的内容当成一张图片",[854,141322,139696,141323,141325],{},[33,141324,854],{}," 设置浮动",[854,141327,139696,141328,141330],{},[33,141329,2212],{}," 设置宽高，宽度 248px，高度 163px",[854,141332,141333,141334,140894,141337,141339,141340,141342,141343],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[33,141335,141336],{},"top 10px",[33,141338,854],{},"设置相对定位（注意，最后一个",[33,141341,854],{},"不用设置伪元素），可以利用 ",[33,141344,141345],{},"nth-child(-n+3){...}",[14,141347,140566],{},[26,141349,141350],{"className":127196,"code":139038,"language":127198,"meta":31,"style":31},[33,141351,141352,141360,141370,141380],{"__ignoreMap":31},[36,141353,141354,141356,141358],{"class":38,"line":39},[36,141355,52353],{"class":52042},[36,141357,138197],{"class":2713},[36,141359,16316],{"class":49},[36,141361,141362,141364,141366,141368],{"class":38,"line":46},[36,141363,138204],{"class":60},[36,141365,52179],{"class":49},[36,141367,8399],{"class":998},[36,141369,2040],{"class":49},[36,141371,141372,141374,141376,141378],{"class":38,"line":78},[36,141373,128812],{"class":60},[36,141375,52179],{"class":49},[36,141377,61611],{"class":60},[36,141379,2040],{"class":49},[36,141381,141382],{"class":38,"line":125},[36,141383,2315],{"class":49},[14,141385,140655],{},[26,141387,141388],{"className":127196,"code":139038,"language":127198,"meta":31,"style":31},[33,141389,141390,141398,141408,141418],{"__ignoreMap":31},[36,141391,141392,141394,141396],{"class":38,"line":39},[36,141393,52353],{"class":52042},[36,141395,138197],{"class":2713},[36,141397,16316],{"class":49},[36,141399,141400,141402,141404,141406],{"class":38,"line":46},[36,141401,138204],{"class":60},[36,141403,52179],{"class":49},[36,141405,8399],{"class":998},[36,141407,2040],{"class":49},[36,141409,141410,141412,141414,141416],{"class":38,"line":78},[36,141411,128812],{"class":60},[36,141413,52179],{"class":49},[36,141415,61611],{"class":60},[36,141417,2040],{"class":49},[36,141419,141420],{"class":38,"line":125},[36,141421,2315],{"class":49},[868,141423,141425],{"id":141424},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[2212,141427],{"style":127052,"src":141428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,141430,141431],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,141433,141434],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,141436,141437,141440],{},[33,141438,141439],{},"box_hd"," 制作",[14,141442,141220,141443,141445],{},[33,141444,141439],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[2212,141447],{"style":127052,"src":141448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1886,141450,141451,141456,141461,141464],{},[854,141452,141453,141455],{},[33,141454,141439],{}," 给 30px 的高度，2个像素的下边框",[854,141457,141458,141459],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[33,141460,139707],{},[854,141462,141463],{},"左侧盒左浮动，右侧盒子右浮动",[854,141465,141466,141468,141469,141471],{},[33,141467,50],{},"标签之间的距离用左右的",[33,141470,31625],{},"撑开即可",[14,141473,141474],{},"结构代码",[26,141476,141477],{"className":127196,"code":139866,"language":127198,"meta":31,"style":31},[33,141478,141479,141485,141495],{"__ignoreMap":31},[36,141480,141481,141483],{"class":38,"line":39},[36,141482,131044],{"class":2713},[36,141484,16316],{"class":49},[36,141486,141487,141489,141491,141493],{"class":38,"line":46},[36,141488,131676],{"class":60},[36,141490,52179],{"class":49},[36,141492,24480],{"class":60},[36,141494,2040],{"class":49},[36,141496,141497],{"class":38,"line":78},[36,141498,2315],{"class":49},[14,141500,141501],{},"样式代码",[26,141503,141504],{"className":127196,"code":139866,"language":127198,"meta":31,"style":31},[33,141505,141506,141512,141522],{"__ignoreMap":31},[36,141507,141508,141510],{"class":38,"line":39},[36,141509,131044],{"class":2713},[36,141511,16316],{"class":49},[36,141513,141514,141516,141518,141520],{"class":38,"line":46},[36,141515,131676],{"class":60},[36,141517,52179],{"class":49},[36,141519,24480],{"class":60},[36,141521,2040],{"class":49},[36,141523,141524],{"class":38,"line":78},[36,141525,2315],{"class":49},[14,141527,141528,141440],{},[33,141529,141530],{},"box_bd",[14,141532,141533],{},"2 号盒子 box_bd，不要给高度",[2212,141535],{"style":127052,"src":141536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,141538,141539],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,141541,141542],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,141544,141545],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1886,141547,141548,141560,141576],{},[854,141549,141550,141552,141553,141556,141557,141559],{},[33,141551,141530],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[33,141554,141555],{},"tab_content","，在",[33,141558,141555],{}," 里面包裹tab选项卡对应的内容",[854,141561,141562,141563,141566,141567,141569,141570,141572,141573,141575],{},"内容被一个大盒子包裹（",[33,141564,141565],{},"tab_list_item","），里面是 ",[33,141568,1886],{}," 包裹 5个 ",[33,141571,854],{},"，每个",[33,141574,854],{},"设置对应的宽度，然后设置浮动",[854,141577,141578,141579,141581,141582,141584,141585],{},"而这5个",[33,141580,854],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[33,141583,854],{},"设置",[1886,141586,141587,141605,141608],{},[854,141588,141589,141590,141592,141593,141595,141596,141598,141599,141601,141602,141604],{},"第一个小 ",[33,141591,854],{}," 分为上下结构，上面是 ",[33,141594,1886],{}," 包裹 ",[33,141597,854],{}," ，",[33,141600,854],{},"里面包裹 ",[33,141603,50],{},"，下面插入一张图片",[854,141606,141607],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[854,141609,141610,141611,141613,141614,141616,141617,141619],{},"后面的小 ",[33,141612,854],{}," 里面先放一个",[33,141615,50],{},"标签，然后在",[33,141618,50],{},"标签里面插入图片即可",[14,141621,141474],{},[26,141623,141624],{"className":127943,"code":134698,"language":127945,"meta":31,"style":31},[33,141625,141626],{"__ignoreMap":31},[36,141627,141628,141630,141632,141634,141636,141638,141640,141642,141644,141646,141648,141650],{"class":38,"line":39},[36,141629,1789],{"class":49},[36,141631,2212],{"class":52042},[36,141633,55981],{"class":2713},[36,141635,54],{"class":49},[36,141637,134713],{"class":998},[36,141639,55989],{"class":2713},[36,141641,54],{"class":49},[36,141643,134720],{"class":998},[36,141645,134723],{"class":2713},[36,141647,54],{"class":49},[36,141649,134728],{"class":998},[36,141651,52049],{"class":49},[14,141653,141501],{},[26,141655,141656],{"className":127943,"code":134698,"language":127945,"meta":31,"style":31},[33,141657,141658],{"__ignoreMap":31},[36,141659,141660,141662,141664,141666,141668,141670,141672,141674,141676,141678,141680,141682],{"class":38,"line":39},[36,141661,1789],{"class":49},[36,141663,2212],{"class":52042},[36,141665,55981],{"class":2713},[36,141667,54],{"class":49},[36,141669,134713],{"class":998},[36,141671,55989],{"class":2713},[36,141673,54],{"class":49},[36,141675,134720],{"class":998},[36,141677,134723],{"class":2713},[36,141679,54],{"class":49},[36,141681,134728],{"class":998},[36,141683,52049],{"class":49},[14,141685,141686],{},"tab栏切换需求！！！！！！介绍：",[2212,141688],{"style":127052,"src":141689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1886,141691,141692,141700,141706,141709],{},[854,141693,141694,141697,141698],{},[33,141695,141696],{},"tab","栏的布局是 ",[33,141699,139707],{},[854,141701,141702,141703,141705],{},"有多少个",[33,141704,141696],{},"选项卡，那么对应就有多少个内容",[854,141707,141708],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[854,141710,141711,141712,141715,141716,141718,141719,141721],{},"等后面我们学习了",[33,141713,141714],{},"js","之后，我们就会配合",[33,141717,141714],{},"来实现，",[33,141720,141696],{},"栏的切换",[21,141723,141725],{"id":141724},"_162-列表制作","16.2 列表制作",[868,141727,141729],{"id":141728},"_1621-准备工作","16.2.1 准备工作",[1886,141731,141732,141735,141738,141741],{},[854,141733,141734],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[854,141736,141737],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[854,141739,141740],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[854,141742,141743],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[868,141745,141747,141748,101662,141750,141752],{"id":141746},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[33,141749,132201],{},[33,141751,54455],{}," 修改",[2212,141754],{"style":127052,"src":141755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1886,141757,141758],{},[854,141759,141760],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141762,140566],{},[26,141764,141765],{"className":127196,"code":132628,"language":127198,"meta":31,"style":31},[33,141766,141767,141771,141785,141789,141803,141807,141821,141825,141839,141843],{"__ignoreMap":31},[36,141768,141769],{"class":38,"line":39},[36,141770,132635],{"class":42},[36,141772,141773,141775,141777,141779,141781,141783],{"class":38,"line":46},[36,141774,132640],{"class":2713},[36,141776,80549],{"class":49},[36,141778,129556],{"class":60},[36,141780,52179],{"class":49},[36,141782,132649],{"class":60},[36,141784,130126],{"class":49},[36,141786,141787],{"class":38,"line":78},[36,141788,132656],{"class":42},[36,141790,141791,141793,141795,141797,141799,141801],{"class":38,"line":125},[36,141792,132661],{"class":2713},[36,141794,80549],{"class":49},[36,141796,129556],{"class":60},[36,141798,52179],{"class":49},[36,141800,55506],{"class":60},[36,141802,130126],{"class":49},[36,141804,141805],{"class":38,"line":131},[36,141806,132676],{"class":42},[36,141808,141809,141811,141813,141815,141817,141819],{"class":38,"line":396},[36,141810,132681],{"class":2713},[36,141812,80549],{"class":49},[36,141814,129556],{"class":60},[36,141816,52179],{"class":49},[36,141818,55573],{"class":60},[36,141820,130126],{"class":49},[36,141822,141823],{"class":38,"line":407},[36,141824,132696],{"class":42},[36,141826,141827,141829,141831,141833,141835,141837],{"class":38,"line":2061},[36,141828,132701],{"class":2713},[36,141830,80549],{"class":49},[36,141832,129556],{"class":60},[36,141834,52179],{"class":49},[36,141836,86975],{"class":60},[36,141838,130126],{"class":49},[36,141840,141841],{"class":38,"line":2067},[36,141842,132716],{"class":42},[36,141844,141845,141847,141849,141851,141853,141855],{"class":38,"line":2079},[36,141846,132721],{"class":2713},[36,141848,80549],{"class":49},[36,141850,129556],{"class":60},[36,141852,52179],{"class":49},[36,141854,132730],{"class":60},[36,141856,130126],{"class":49},[14,141858,140655],{},[26,141860,141861],{"className":127196,"code":132628,"language":127198,"meta":31,"style":31},[33,141862,141863,141867,141881,141885,141899,141903,141917,141921,141935,141939],{"__ignoreMap":31},[36,141864,141865],{"class":38,"line":39},[36,141866,132635],{"class":42},[36,141868,141869,141871,141873,141875,141877,141879],{"class":38,"line":46},[36,141870,132640],{"class":2713},[36,141872,80549],{"class":49},[36,141874,129556],{"class":60},[36,141876,52179],{"class":49},[36,141878,132649],{"class":60},[36,141880,130126],{"class":49},[36,141882,141883],{"class":38,"line":78},[36,141884,132656],{"class":42},[36,141886,141887,141889,141891,141893,141895,141897],{"class":38,"line":125},[36,141888,132661],{"class":2713},[36,141890,80549],{"class":49},[36,141892,129556],{"class":60},[36,141894,52179],{"class":49},[36,141896,55506],{"class":60},[36,141898,130126],{"class":49},[36,141900,141901],{"class":38,"line":131},[36,141902,132676],{"class":42},[36,141904,141905,141907,141909,141911,141913,141915],{"class":38,"line":396},[36,141906,132681],{"class":2713},[36,141908,80549],{"class":49},[36,141910,129556],{"class":60},[36,141912,52179],{"class":49},[36,141914,55573],{"class":60},[36,141916,130126],{"class":49},[36,141918,141919],{"class":38,"line":407},[36,141920,132696],{"class":42},[36,141922,141923,141925,141927,141929,141931,141933],{"class":38,"line":2061},[36,141924,132701],{"class":2713},[36,141926,80549],{"class":49},[36,141928,129556],{"class":60},[36,141930,52179],{"class":49},[36,141932,86975],{"class":60},[36,141934,130126],{"class":49},[36,141936,141937],{"class":38,"line":2067},[36,141938,132716],{"class":42},[36,141940,141941,141943,141945,141947,141949,141951],{"class":38,"line":2079},[36,141942,132721],{"class":2713},[36,141944,80549],{"class":49},[36,141946,129556],{"class":60},[36,141948,52179],{"class":49},[36,141950,132730],{"class":60},[36,141952,130126],{"class":49},[1886,141954,141955,141966],{},[854,141956,141957,141958,141961,141962,101662,141964],{},"1 号盒子左侧浮动 ",[33,141959,141960],{},"sk_list"," 里面包含 ",[33,141963,1886],{},[33,141965,854],{},[854,141967,141968,141969,141961,141972,101662,141974],{},"2 号盒子左侧浮动 ",[33,141970,141971],{},"sk_con",[33,141973,1886],{},[33,141975,854],{},[14,141977,140566],{},[26,141979,141980],{"className":127196,"code":139866,"language":127198,"meta":31,"style":31},[33,141981,141982,141988,141998],{"__ignoreMap":31},[36,141983,141984,141986],{"class":38,"line":39},[36,141985,131044],{"class":2713},[36,141987,16316],{"class":49},[36,141989,141990,141992,141994,141996],{"class":38,"line":46},[36,141991,131676],{"class":60},[36,141993,52179],{"class":49},[36,141995,24480],{"class":60},[36,141997,2040],{"class":49},[36,141999,142000],{"class":38,"line":78},[36,142001,2315],{"class":49},[14,142003,140655],{},[26,142005,142006],{"className":127196,"code":139866,"language":127198,"meta":31,"style":31},[33,142007,142008,142014,142024],{"__ignoreMap":31},[36,142009,142010,142012],{"class":38,"line":39},[36,142011,131044],{"class":2713},[36,142013,16316],{"class":49},[36,142015,142016,142018,142020,142022],{"class":38,"line":46},[36,142017,131676],{"class":60},[36,142019,52179],{"class":49},[36,142021,24480],{"class":60},[36,142023,2040],{"class":49},[36,142025,142026],{"class":38,"line":78},[36,142027,2315],{"class":49},[868,142029,142031,142032],{"id":142030},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[33,142033,142034],{},"sk_container",[2212,142036],{"style":127052,"src":142037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1886,142039,142040,142045],{},[854,142041,141220,142042,142044],{},[33,142043,142034],{}," 给宽度 1200，不要给高度",[854,142046,142047],{},"一定不要忘记清除浮动",[14,142049,140566],{},[26,142051,142052],{"className":127196,"code":139866,"language":127198,"meta":31,"style":31},[33,142053,142054,142060,142070],{"__ignoreMap":31},[36,142055,142056,142058],{"class":38,"line":39},[36,142057,131044],{"class":2713},[36,142059,16316],{"class":49},[36,142061,142062,142064,142066,142068],{"class":38,"line":46},[36,142063,131676],{"class":60},[36,142065,52179],{"class":49},[36,142067,24480],{"class":60},[36,142069,2040],{"class":49},[36,142071,142072],{"class":38,"line":78},[36,142073,2315],{"class":49},[851,142075,142076],{},[854,142077,142078],{},"sk_hd制作",[1886,142080,142081],{},[854,142082,141300,142083,142086],{},[33,142084,142085],{},"sk_hd"," ，插入图片即可",[14,142088,140566],{},[26,142090,142091],{"className":127943,"code":134698,"language":127945,"meta":31,"style":31},[33,142092,142093],{"__ignoreMap":31},[36,142094,142095,142097,142099,142101,142103,142105,142107,142109,142111,142113,142115,142117],{"class":38,"line":39},[36,142096,1789],{"class":49},[36,142098,2212],{"class":52042},[36,142100,55981],{"class":2713},[36,142102,54],{"class":49},[36,142104,134713],{"class":998},[36,142106,55989],{"class":2713},[36,142108,54],{"class":49},[36,142110,134720],{"class":998},[36,142112,134723],{"class":2713},[36,142114,54],{"class":49},[36,142116,134728],{"class":998},[36,142118,52049],{"class":49},[851,142120,142121],{"start":46},[854,142122,142123],{},"sk_bd制作",[1886,142125,142126],{},[854,142127,142128,142129,142132,142133,101662,142135,142137],{},"3 号盒子 ",[33,142130,142131],{},"sk_bd"," ，里面包含很多的 ",[33,142134,1886],{},[33,142136,854],{},[1886,142138,142139,142148],{},[854,142140,142141,142142,142144,142145,142147],{},"当鼠标移入到 ",[33,142143,854],{}," 上面的时候显示红色的边框，在这里先给 ",[33,142146,854],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[854,142149,142150,142151,142153,142154,142156,142157,142160,142161,142163],{},"由于给每个 ",[33,142152,854],{}," 都设置了外边距，导致一行的最后一个 ",[33,142155,854],{}," 掉了下来，在这里我们利用 ",[33,142158,142159],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[33,142162,854],{},"，去掉外边距就好了",[14,142165,140566],{},[26,142167,142168],{"className":127196,"code":139385,"language":127198,"meta":31,"style":31},[33,142169,142170,142176,142188],{"__ignoreMap":31},[36,142171,142172,142174],{"class":38,"line":39},[36,142173,52353],{"class":52042},[36,142175,16316],{"class":49},[36,142177,142178,142180,142182,142184,142186],{"class":38,"line":46},[36,142179,71212],{"class":60},[36,142181,52179],{"class":49},[36,142183,643],{"class":60},[36,142185,52298],{"class":60},[36,142187,2040],{"class":49},[36,142189,142190],{"class":38,"line":78},[36,142191,2315],{"class":49},[14,142193,140655],{},[26,142195,142196],{"className":127196,"code":139385,"language":127198,"meta":31,"style":31},[33,142197,142198,142204,142216],{"__ignoreMap":31},[36,142199,142200,142202],{"class":38,"line":39},[36,142201,52353],{"class":52042},[36,142203,16316],{"class":49},[36,142205,142206,142208,142210,142212,142214],{"class":38,"line":46},[36,142207,71212],{"class":60},[36,142209,52179],{"class":49},[36,142211,643],{"class":60},[36,142213,52298],{"class":60},[36,142215,2040],{"class":49},[36,142217,142218],{"class":38,"line":78},[36,142219,2315],{"class":49},[21,142221,142223],{"id":142222},"_163-注册页面制作","16.3 注册页面制作",[2212,142225],{"style":127052,"src":142226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,142228,142229,142231],{},[1043,142230,9772],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[2212,142233],{"style":127052,"src":142234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[868,142236,142238],{"id":142237},"_1631-准备工作","16.3.1 准备工作",[1886,142240,142241,142244],{},[854,142242,142243],{},"创建register.html，引入 base.css，引入favicon图标",[854,142245,142246],{},"创建register.css ，在html页面进行引入",[868,142248,142250,142251,142253],{"id":142249},"_1632-header-头部实现","16.3.2 ",[33,142252,132201],{}," 头部实现",[1886,142255,142256,142259],{},[854,142257,142258],{},"整个内容用 版心 进行包裹",[854,142260,142261],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,142263,140566],{},[26,142265,142266],{"className":127943,"code":134698,"language":127945,"meta":31,"style":31},[33,142267,142268],{"__ignoreMap":31},[36,142269,142270,142272,142274,142276,142278,142280,142282,142284,142286,142288,142290,142292],{"class":38,"line":39},[36,142271,1789],{"class":49},[36,142273,2212],{"class":52042},[36,142275,55981],{"class":2713},[36,142277,54],{"class":49},[36,142279,134713],{"class":998},[36,142281,55989],{"class":2713},[36,142283,54],{"class":49},[36,142285,134720],{"class":998},[36,142287,134723],{"class":2713},[36,142289,54],{"class":49},[36,142291,134728],{"class":998},[36,142293,52049],{"class":49},[14,142295,140655],{},[26,142297,142298],{"className":127943,"code":134698,"language":127945,"meta":31,"style":31},[33,142299,142300],{"__ignoreMap":31},[36,142301,142302,142304,142306,142308,142310,142312,142314,142316,142318,142320,142322,142324],{"class":38,"line":39},[36,142303,1789],{"class":49},[36,142305,2212],{"class":52042},[36,142307,55981],{"class":2713},[36,142309,54],{"class":49},[36,142311,134713],{"class":998},[36,142313,55989],{"class":2713},[36,142315,54],{"class":49},[36,142317,134720],{"class":998},[36,142319,134723],{"class":2713},[36,142321,54],{"class":49},[36,142323,134728],{"class":998},[36,142325,52049],{"class":49},[868,142327,142329,142330,142333],{"id":142328},"_1633-registerarea-主体模块实现","16.3.3 ",[33,142331,142332],{},"registerarea"," 主体模块实现",[2212,142335],{"style":127052,"src":142336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,142338,142339],{},"整个大盒子 高度为 522px，设置4个边框",[14,142341,140566],{},[26,142343,142344],{"className":127196,"code":131353,"language":127198,"meta":31,"style":31},[33,142345,142346,142352,142368],{"__ignoreMap":31},[36,142347,142348,142350],{"class":38,"line":39},[36,142349,52353],{"class":52042},[36,142351,16316],{"class":49},[36,142353,142354,142356,142358,142360,142362,142364,142366],{"class":38,"line":46},[36,142355,71638],{"class":60},[36,142357,52179],{"class":49},[36,142359,61],{"class":60},[36,142361,52234],{"class":53},[36,142363,52263],{"class":60},[36,142365,130588],{"class":60},[36,142367,2040],{"class":49},[36,142369,142370],{"class":38,"line":78},[36,142371,2315],{"class":49},[14,142373,140655],{},[26,142375,142376],{"className":127196,"code":131353,"language":127198,"meta":31,"style":31},[33,142377,142378,142384,142400],{"__ignoreMap":31},[36,142379,142380,142382],{"class":38,"line":39},[36,142381,52353],{"class":52042},[36,142383,16316],{"class":49},[36,142385,142386,142388,142390,142392,142394,142396,142398],{"class":38,"line":46},[36,142387,71638],{"class":60},[36,142389,52179],{"class":49},[36,142391,61],{"class":60},[36,142393,52234],{"class":53},[36,142395,52263],{"class":60},[36,142397,130588],{"class":60},[36,142399,2040],{"class":49},[36,142401,142402],{"class":38,"line":78},[36,142403,2315],{"class":49},[14,142405,142406],{},"1号盒子 是一个 h3 标签，放标题",[1886,142408,142409],{},[854,142410,142411],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,142413,140566],{},[26,142415,142416],{"className":127196,"code":139866,"language":127198,"meta":31,"style":31},[33,142417,142418,142424,142434],{"__ignoreMap":31},[36,142419,142420,142422],{"class":38,"line":39},[36,142421,131044],{"class":2713},[36,142423,16316],{"class":49},[36,142425,142426,142428,142430,142432],{"class":38,"line":46},[36,142427,131676],{"class":60},[36,142429,52179],{"class":49},[36,142431,24480],{"class":60},[36,142433,2040],{"class":49},[36,142435,142436],{"class":38,"line":78},[36,142437,2315],{"class":49},[14,142439,140655],{},[26,142441,142442],{"className":127196,"code":139866,"language":127198,"meta":31,"style":31},[33,142443,142444,142450,142460],{"__ignoreMap":31},[36,142445,142446,142448],{"class":38,"line":39},[36,142447,131044],{"class":2713},[36,142449,16316],{"class":49},[36,142451,142452,142454,142456,142458],{"class":38,"line":46},[36,142453,131676],{"class":60},[36,142455,52179],{"class":49},[36,142457,24480],{"class":60},[36,142459,2040],{"class":49},[36,142461,142462],{"class":38,"line":78},[36,142463,2315],{"class":49},[14,142465,142466],{},"2号盒子 里面放注册的内容",[1886,142468,142469,142472,142481,142495,142508,142511,142514,142532,142546],{},[854,142470,142471],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[854,142473,142474,142475,142477,142478,142480],{},"里面的内容利用 ",[33,142476,1886],{}," 包含 ",[33,142479,854],{}," 来实现的（不需要用表格）",[854,142482,139710,142483,142485,142486,142488,142489,142491,142492,142494],{},[33,142484,854],{}," 里面，左侧放 ",[33,142487,34350],{}," 标签， 中间放",[33,142490,54563],{}," 标签， 右侧放 ",[33,142493,36],{}," 提示信息",[854,142496,142497,142498,142500,142501,142503,142504,142507],{},"左侧 ",[33,142499,34350],{},"里面的文字都是右对齐，我们可以给",[33,142502,34350],{},"设置一个宽度（88px），然后利用",[33,142505,142506],{},"text-align"," 来设置右对齐",[854,142509,142510],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[854,142512,142513],{},"右侧 span修饰一下文字颜色",[854,142515,142516,142517],{},"提示信息的样式优化",[1886,142518,142519,142522,142525],{},[854,142520,142521],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[854,142523,142524],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[854,142526,142527,142528,142531],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[33,142529,142530],{},"vertical-algin"," 来设置 图片与文字对齐方式",[854,142533,142534,142535],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1886,142536,142537,142543],{},[854,142538,142539,142540,142542],{},"设置 ",[33,142541,24297],{}," 的 左右 12px 的内边距，设置一下文字颜色",[854,142544,142545],{},"分别设置 背景颜色",[854,142547,142548,142549,142551],{},"同意协议 和 完成注册 都是用 ",[33,142550,854],{}," 进行包裹",[14,142553,140566],{},[26,142555,142556],{"className":127196,"code":141139,"language":127198,"meta":31,"style":31},[33,142557,142558,142564,142574],{"__ignoreMap":31},[36,142559,142560,142562],{"class":38,"line":39},[36,142561,52353],{"class":52042},[36,142563,16316],{"class":49},[36,142565,142566,142568,142570,142572],{"class":38,"line":46},[36,142567,71620],{"class":60},[36,142569,52179],{"class":49},[36,142571,141156],{"class":60},[36,142573,2040],{"class":49},[36,142575,142576],{"class":38,"line":78},[36,142577,2315],{"class":49},[14,142579,140655],{},[26,142581,142582],{"className":127196,"code":141139,"language":127198,"meta":31,"style":31},[33,142583,142584,142590,142600],{"__ignoreMap":31},[36,142585,142586,142588],{"class":38,"line":39},[36,142587,52353],{"class":52042},[36,142589,16316],{"class":49},[36,142591,142592,142594,142596,142598],{"class":38,"line":46},[36,142593,71620],{"class":60},[36,142595,52179],{"class":49},[36,142597,141156],{"class":60},[36,142599,2040],{"class":49},[36,142601,142602],{"class":38,"line":78},[36,142603,2315],{"class":49},[868,142605,142607],{"id":142606},"_1634-底部实现","16.3.4 底部实现",[14,142609,140566],{},[26,142611,142612],{"className":127196,"code":141139,"language":127198,"meta":31,"style":31},[33,142613,142614,142620,142630],{"__ignoreMap":31},[36,142615,142616,142618],{"class":38,"line":39},[36,142617,52353],{"class":52042},[36,142619,16316],{"class":49},[36,142621,142622,142624,142626,142628],{"class":38,"line":46},[36,142623,71620],{"class":60},[36,142625,52179],{"class":49},[36,142627,141156],{"class":60},[36,142629,2040],{"class":49},[36,142631,142632],{"class":38,"line":78},[36,142633,2315],{"class":49},[14,142635,140655],{},[26,142637,142638],{"className":127943,"code":131300,"language":127945,"meta":31,"style":31},[33,142639,142640,142644,142658,142662],{"__ignoreMap":31},[36,142641,142642],{"class":38,"line":39},[36,142643,131307],{"class":42},[36,142645,142646,142648,142650,142652,142654,142656],{"class":38,"line":46},[36,142647,1789],{"class":49},[36,142649,52353],{"class":52042},[36,142651,54228],{"class":2713},[36,142653,54],{"class":49},[36,142655,131320],{"class":998},[36,142657,52049],{"class":49},[36,142659,142660],{"class":38,"line":78},[36,142661,131327],{"class":49},[36,142663,142664,142666,142668],{"class":38,"line":125},[36,142665,52527],{"class":49},[36,142667,52353],{"class":52042},[36,142669,52049],{"class":49},[21,142671,142673],{"id":142672},"_164-项目总结","16.4 项目总结",[851,142675,142676,142679,142682,142685],{},[854,142677,142678],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[854,142680,142681],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[854,142683,142684],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[854,142686,142687],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[2212,142689],{"style":127052,"src":142690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[851,142692,142693],{"start":131},[854,142694,142695],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[2212,142697],{"style":127052,"src":142698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[851,142700,142701],{"start":396},[854,142702,142703],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[2212,142705],{"style":127052,"src":142706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[26,142708,142709],{"className":127943,"code":137353,"language":127945,"meta":31,"style":31},[33,142710,142711],{"__ignoreMap":31},[36,142712,142713,142715,142717,142719,142721,142723,142725,142727,142729,142731,142733,142735],{"class":38,"line":39},[36,142714,1789],{"class":49},[36,142716,54563],{"class":52042},[36,142718,54566],{"class":2713},[36,142720,54],{"class":49},[36,142722,63441],{"class":998},[36,142724,15664],{"class":2713},[36,142726,54],{"class":49},[36,142728,137374],{"class":998},[36,142730,61762],{"class":2713},[36,142732,54],{"class":49},[36,142734,137381],{"class":998},[36,142736,52049],{"class":49},[851,142738,142739,142742],{"start":407},[854,142740,142741],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[854,142743,142744],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[807,142746,142747],{},"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":46,"depth":46,"links":142749},[142750,142755,142762,142770],{"id":140376,"depth":46,"text":140377,"children":142751},[142752,142753,142754],{"id":140380,"depth":78,"text":140381},{"id":141111,"depth":78,"text":141112},{"id":141424,"depth":78,"text":141425},{"id":141724,"depth":46,"text":141725,"children":142756},[142757,142758,142760],{"id":141728,"depth":78,"text":141729},{"id":141746,"depth":78,"text":142759},"16.2.2 列表页 header 和 nav 修改",{"id":142030,"depth":78,"text":142761},"16.2.3 列表页主体 sk_container",{"id":142222,"depth":46,"text":142223,"children":142763},[142764,142765,142767,142769],{"id":142237,"depth":78,"text":142238},{"id":142249,"depth":78,"text":142766},"16.3.2 header 头部实现",{"id":142328,"depth":78,"text":142768},"16.3.3 registerarea 主体模块实现",{"id":142606,"depth":78,"text":142607},{"id":142672,"depth":46,"text":142673},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140368,"description":823},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142777,"title":142778,"body":142779,"description":823,"extension":824,"meta":142887,"navigation":193,"path":142888,"seo":142889,"stem":142890,"__hash__":142891},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142780,"toc":142882},[142781,142784,142788,142791,142794,142803,142812,142816,142821,142828,142846,142849,142852,142855,142858,142861,142864,142867,142870,142873,142876,142879],[10,142782,142778],{"id":142783},"_17-web服务器与网站发布",[21,142785,142787],{"id":142786},"_171-web服务器","17.1 Web服务器",[14,142789,142790],{},"把自己网站上传到服务器上，可以让其他人访问",[2212,142792],{"style":127052,"src":142793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142795,142796,142799,142800],{},[1043,142797,142798],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[1043,142801,142802],{},"Web 服务器等",[14,142804,142805,142806,101662,142809,26485],{},"根据服务器在网络中所在的位置不同，又可分为 ",[1043,142807,142808],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[1043,142810,142811],{},"远程服务器",[868,142813,142815],{"id":142814},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142817,142818],{},[1043,142819,142820],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142822,142823,142824],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[50,142825,142826],{"href":142826,"rel":142827},"http:\u002F\u002Ffree.3v.do\u002F",[24609],[1886,142829,142830,142833,142836,142843],{},[854,142831,142832],{},"去免费空间网站注册账号。",[854,142834,142835],{},"记录下主机名、用户名、密码、域名。",[854,142837,142838,142839,142842],{},"利用 ",[33,142840,142841],{},"utftp"," 软件 上传网站到远程服务器",[854,142844,142845],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142847,142848],{},"使用软件上传，对上传软件文件进行解压",[2212,142850],{"style":127052,"src":142851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[2212,142853],{"style":127052,"src":142854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142856,142857],{},"输入刚刚申请的服务器账号信息：",[2212,142859],{"style":127052,"src":142860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[2212,142862],{"style":127052,"src":142863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[2212,142865],{"style":127052,"src":142866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[2212,142868],{"style":127052,"src":142869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142871,142872],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[2212,142874],{"style":127052,"src":142875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142877,142878],{},"浏览器输入域名即可访问",[14,142880,142881],{},"首页一定必须是index",{"title":31,"searchDepth":46,"depth":46,"links":142883},[142884],{"id":142786,"depth":46,"text":142787,"children":142885},[142886],{"id":142814,"depth":78,"text":142815},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142778,"description":823},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142893,"title":142894,"body":142895,"description":823,"extension":824,"meta":143822,"navigation":193,"path":143823,"seo":143824,"stem":143825,"__hash__":143826},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142896,"toc":143805},[142897,142900,142904,142907,142910,142921,142924,142928,142932,142937,142940,142943,142946,142949,142953,142979,142983,142987,142990,142993,142997,143030,143034,143037,143040,143104,143108,143112,143115,143118,143121,143125,143170,143174,143177,143207,143211,143215,143218,143221,143225,143228,143297,143300,143408,143410,143416,143420,143423,143426,143522,143525,143529,143553,143557,143560,143564,143567,143571,143574,143577,143580,143583,143587,143590,143593,143597,143601,143604,143607,143610,143613,143617,143620,143624,143627,143630,143675,143679,143683,143686,143689,143692,143724,143728,143731,143765,143769,143772,143802],[10,142898,142894],{"id":142899},"_18-2d动画与3d转换",[21,142901,142903],{"id":142902},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142905,142906],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142908,142909],{},"转换（transform）你可以简单理解为变形",[1886,142911,142912,142915,142918],{},[854,142913,142914],{},"移动：translate",[854,142916,142917],{},"旋转：rotate",[854,142919,142920],{},"缩放：scale",[2212,142922],{"style":127052,"src":142923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[868,142925,142927],{"id":142926},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22742,142929,142931],{"id":142930},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142933,142934,142935],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[1043,142936,133855],{},[2212,142938],{"style":127052,"src":142939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142941,142942],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142944,142945],{},"对于行内元素无效",[14,142947,142948],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22742,142950,142952],{"id":142951},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[26,142954,142955],{"className":127196,"code":139385,"language":127198,"meta":31,"style":31},[33,142956,142957,142963,142975],{"__ignoreMap":31},[36,142958,142959,142961],{"class":38,"line":39},[36,142960,52353],{"class":52042},[36,142962,16316],{"class":49},[36,142964,142965,142967,142969,142971,142973],{"class":38,"line":46},[36,142966,71212],{"class":60},[36,142968,52179],{"class":49},[36,142970,643],{"class":60},[36,142972,52298],{"class":60},[36,142974,2040],{"class":49},[36,142976,142977],{"class":38,"line":78},[36,142978,2315],{"class":49},[868,142980,142982],{"id":142981},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22742,142984,142986],{"id":142985},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142988,142989],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[2212,142991],{"style":127052,"src":142992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22742,142994,142996],{"id":142995},"_18122-旋转效果","18.1.2.2 旋转效果",[26,142998,143000],{"className":127196,"code":142999,"language":127198,"meta":31,"style":31},"div {\n  transform: rotate(45deg);\n}\n",[33,143001,143002,143008,143026],{"__ignoreMap":31},[36,143003,143004,143006],{"class":38,"line":39},[36,143005,52353],{"class":52042},[36,143007,16316],{"class":49},[36,143009,143010,143012,143014,143017,143019,143021,143024],{"class":38,"line":46},[36,143011,137180],{"class":60},[36,143013,52179],{"class":49},[36,143015,143016],{"class":60},"rotate",[36,143018,901],{"class":49},[36,143020,1411],{"class":60},[36,143022,143023],{"class":53},"deg",[36,143025,3468],{"class":49},[36,143027,143028],{"class":38,"line":78},[36,143029,2315],{"class":49},[22742,143031,143033],{"id":143032},"_18123-三角做法","18.1.2.3 三角做法",[14,143035,143036],{},"该下标当经过最外层大盒子时会实现向上反转",[2212,143038],{"style":127052,"src":143039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[26,143041,143042],{"className":127196,"code":135716,"language":127198,"meta":31,"style":31},[33,143043,143044,143048,143054,143064,143074,143090,143100],{"__ignoreMap":31},[36,143045,143046],{"class":38,"line":39},[36,143047,135723],{"class":42},[36,143049,143050,143052],{"class":38,"line":46},[36,143051,135728],{"class":2713},[36,143053,16316],{"class":49},[36,143055,143056,143058,143060,143062],{"class":38,"line":78},[36,143057,71310],{"class":60},[36,143059,52179],{"class":49},[36,143061,643],{"class":60},[36,143063,2040],{"class":49},[36,143065,143066,143068,143070,143072],{"class":38,"line":125},[36,143067,71530],{"class":60},[36,143069,52179],{"class":49},[36,143071,643],{"class":60},[36,143073,2040],{"class":49},[36,143075,143076,143078,143080,143082,143084,143086,143088],{"class":38,"line":131},[36,143077,71638],{"class":60},[36,143079,52179],{"class":49},[36,143081,332],{"class":60},[36,143083,52234],{"class":53},[36,143085,52263],{"class":60},[36,143087,64733],{"class":60},[36,143089,2040],{"class":49},[36,143091,143092,143094,143096,143098],{"class":38,"line":396},[36,143093,135771],{"class":60},[36,143095,52179],{"class":49},[36,143097,63111],{"class":60},[36,143099,2040],{"class":49},[36,143101,143102],{"class":38,"line":407},[36,143103,2315],{"class":49},[868,143105,143107],{"id":143106},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22742,143109,143111],{"id":143110},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,143113,143114],{},"设置中心点",[2212,143116],{"style":127052,"src":143117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,143119,143120],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22742,143122,143124],{"id":143123},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[26,143126,143128],{"className":127196,"code":143127,"language":127198,"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,143129,143130,143135,143141,143156,143161,143166],{"__ignoreMap":31},[36,143131,143132],{"class":38,"line":39},[36,143133,143134],{"class":42},"\u002F* 转换中心点 *\u002F\n",[36,143136,143137,143139],{"class":38,"line":46},[36,143138,52353],{"class":52042},[36,143140,16316],{"class":49},[36,143142,143143,143146,143148,143150,143152,143154],{"class":38,"line":78},[36,143144,143145],{"class":60},"  transform-origin",[36,143147,52179],{"class":49},[36,143149,52334],{"class":60},[36,143151,17888],{"class":60},[36,143153,131059],{"class":49},[36,143155,135869],{"class":42},[36,143157,143158],{"class":38,"line":125},[36,143159,143160],{"class":42},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[36,143162,143163],{"class":38,"line":131},[36,143164,143165],{"class":42},"  \u002F* transform-origin: left top; *\u002F\n",[36,143167,143168],{"class":38,"line":396},[36,143169,2315],{"class":49},[22742,143171,143173],{"id":143172},"_18133-旋转案例","18.1.3.3 旋转案例",[2212,143175],{"style":127052,"src":143176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[26,143178,143179],{"className":127196,"code":142999,"language":127198,"meta":31,"style":31},[33,143180,143181,143187,143203],{"__ignoreMap":31},[36,143182,143183,143185],{"class":38,"line":39},[36,143184,52353],{"class":52042},[36,143186,16316],{"class":49},[36,143188,143189,143191,143193,143195,143197,143199,143201],{"class":38,"line":46},[36,143190,137180],{"class":60},[36,143192,52179],{"class":49},[36,143194,143016],{"class":60},[36,143196,901],{"class":49},[36,143198,1411],{"class":60},[36,143200,143023],{"class":53},[36,143202,3468],{"class":49},[36,143204,143205],{"class":38,"line":78},[36,143206,2315],{"class":49},[868,143208,143210],{"id":143209},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22742,143212,143214],{"id":143213},"_18141-scale介绍","18.1.4.1 scale介绍",[14,143216,143217],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[2212,143219],{"style":127052,"src":143220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22742,143222,143224],{"id":143223},"_18142-分页按钮","18.1.4.2 分页按钮",[2212,143226],{"style":127052,"src":143227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[26,143229,143231],{"className":127196,"code":143230,"language":127198,"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,143232,143233,143239,143255,143259,143263,143268,143274,143288,143293],{"__ignoreMap":31},[36,143234,143235,143237],{"class":38,"line":39},[36,143236,52353],{"class":52042},[36,143238,16316],{"class":49},[36,143240,143241,143243,143245,143248,143250,143253],{"class":38,"line":46},[36,143242,137180],{"class":60},[36,143244,52179],{"class":49},[36,143246,143247],{"class":60},"scale",[36,143249,901],{"class":49},[36,143251,143252],{"class":60},"1.2",[36,143254,3468],{"class":49},[36,143256,143257],{"class":38,"line":78},[36,143258,2315],{"class":49},[36,143260,143261],{"class":38,"line":125},[36,143262,136657],{"class":49},[36,143264,143265],{"class":38,"line":131},[36,143266,143267],{"class":42},"\u002F* 2D 缩放 *\u002F\n",[36,143269,143270,143272],{"class":38,"line":396},[36,143271,52353],{"class":52042},[36,143273,16316],{"class":49},[36,143275,143276,143278,143280,143282,143284,143286],{"class":38,"line":407},[36,143277,137180],{"class":60},[36,143279,52179],{"class":49},[36,143281,143247],{"class":60},[36,143283,901],{"class":49},[36,143285,143252],{"class":60},[36,143287,3468],{"class":49},[36,143289,143290],{"class":38,"line":2061},[36,143291,143292],{"class":42},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[36,143294,143295],{"class":38,"line":2067},[36,143296,2315],{"class":49},[14,143298,143299],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[26,143301,143303],{"className":127196,"code":143302,"language":127198,"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,143304,143305,143310,143320,143341,143362,143366,143371,143377,143404],{"__ignoreMap":31},[36,143306,143307],{"class":38,"line":39},[36,143308,143309],{"class":42},"\u002F* 定义动画 *\u002F\n",[36,143311,143312,143315,143318],{"class":38,"line":46},[36,143313,143314],{"class":53},"@keyframes",[36,143316,143317],{"class":416}," move",[36,143319,16316],{"class":49},[36,143321,143322,143325,143327,143329,143331,143334,143336,143338],{"class":38,"line":78},[36,143323,143324],{"class":2713},"  0%",[36,143326,80549],{"class":49},[36,143328,48876],{"class":60},[36,143330,52179],{"class":49},[36,143332,143333],{"class":60},"translateX",[36,143335,901],{"class":49},[36,143337,643],{"class":60},[36,143339,143340],{"class":49},"); }\n",[36,143342,143343,143346,143348,143350,143352,143354,143356,143358,143360],{"class":38,"line":125},[36,143344,143345],{"class":2713},"  100%",[36,143347,80549],{"class":49},[36,143349,48876],{"class":60},[36,143351,52179],{"class":49},[36,143353,143333],{"class":60},[36,143355,901],{"class":49},[36,143357,67],{"class":60},[36,143359,52234],{"class":53},[36,143361,143340],{"class":49},[36,143363,143364],{"class":38,"line":131},[36,143365,2315],{"class":49},[36,143367,143368],{"class":38,"line":396},[36,143369,143370],{"class":42},"\u002F* 调用动画 *\u002F\n",[36,143372,143373,143375],{"class":38,"line":407},[36,143374,52353],{"class":52042},[36,143376,16316],{"class":49},[36,143378,143379,143382,143384,143386,143388,143390,143392,143394,143396,143399,143402],{"class":38,"line":2061},[36,143380,143381],{"class":60},"  animation",[36,143383,52179],{"class":49},[36,143385,135882],{"class":60},[36,143387,25863],{"class":60},[36,143389,1577],{"class":53},[36,143391,79422],{"class":60},[36,143393,4842],{"class":60},[36,143395,1577],{"class":53},[36,143397,143398],{"class":60}," infinite",[36,143400,143401],{"class":60}," alternate",[36,143403,2040],{"class":49},[36,143405,143406],{"class":38,"line":2067},[36,143407,2315],{"class":49},[14,143409,143299],{},[26,143411,143414],{"className":143412,"code":143413,"language":5935},[5933],"\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,143415,143413],{"__ignoreMap":31},[22742,143417,143419],{"id":143418},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,143421,143422],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[2212,143424],{"style":127052,"src":143425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[26,143427,143428],{"className":127196,"code":143302,"language":127198,"meta":31,"style":31},[33,143429,143430,143434,143442,143460,143480,143484,143488,143494,143518],{"__ignoreMap":31},[36,143431,143432],{"class":38,"line":39},[36,143433,143309],{"class":42},[36,143435,143436,143438,143440],{"class":38,"line":46},[36,143437,143314],{"class":53},[36,143439,143317],{"class":416},[36,143441,16316],{"class":49},[36,143443,143444,143446,143448,143450,143452,143454,143456,143458],{"class":38,"line":78},[36,143445,143324],{"class":2713},[36,143447,80549],{"class":49},[36,143449,48876],{"class":60},[36,143451,52179],{"class":49},[36,143453,143333],{"class":60},[36,143455,901],{"class":49},[36,143457,643],{"class":60},[36,143459,143340],{"class":49},[36,143461,143462,143464,143466,143468,143470,143472,143474,143476,143478],{"class":38,"line":125},[36,143463,143345],{"class":2713},[36,143465,80549],{"class":49},[36,143467,48876],{"class":60},[36,143469,52179],{"class":49},[36,143471,143333],{"class":60},[36,143473,901],{"class":49},[36,143475,67],{"class":60},[36,143477,52234],{"class":53},[36,143479,143340],{"class":49},[36,143481,143482],{"class":38,"line":131},[36,143483,2315],{"class":49},[36,143485,143486],{"class":38,"line":396},[36,143487,143370],{"class":42},[36,143489,143490,143492],{"class":38,"line":407},[36,143491,52353],{"class":52042},[36,143493,16316],{"class":49},[36,143495,143496,143498,143500,143502,143504,143506,143508,143510,143512,143514,143516],{"class":38,"line":2061},[36,143497,143381],{"class":60},[36,143499,52179],{"class":49},[36,143501,135882],{"class":60},[36,143503,25863],{"class":60},[36,143505,1577],{"class":53},[36,143507,79422],{"class":60},[36,143509,4842],{"class":60},[36,143511,1577],{"class":53},[36,143513,143398],{"class":60},[36,143515,143401],{"class":60},[36,143517,2040],{"class":49},[36,143519,143520],{"class":38,"line":2067},[36,143521,2315],{"class":49},[14,143523,143524],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[868,143526,143528],{"id":143527},"_1823-知识点回顾","18.2.3 知识点回顾",[26,143530,143531],{"className":127196,"code":129365,"language":127198,"meta":31,"style":31},[33,143532,143533,143539,143549],{"__ignoreMap":31},[36,143534,143535,143537],{"class":38,"line":39},[36,143536,52353],{"class":52042},[36,143538,16316],{"class":49},[36,143540,143541,143543,143545,143547],{"class":38,"line":46},[36,143542,129378],{"class":60},[36,143544,52179],{"class":49},[36,143546,62478],{"class":60},[36,143548,2040],{"class":49},[36,143550,143551],{"class":38,"line":78},[36,143552,2315],{"class":49},[21,143554,143556],{"id":143555},"_183-3d-转换","18.3 3D 转换",[14,143558,143559],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[868,143561,143563],{"id":143562},"_1831-坐标轴认识","18.3.1 坐标轴认识",[2212,143565],{"style":127052,"src":143566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[868,143568,143570],{"id":143569},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[2212,143572],{"style":127052,"src":143573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,143575,143576],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,143578,143579],{},"translate3d的效果需要搭配透视perspective来使用",[2212,143581],{"style":127052,"src":143582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[868,143584,143586],{"id":143585},"_1833-透视-perspective","18.3.3 透视 perspective",[2212,143588],{"style":127052,"src":143589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,143591,143592],{},"透视写在父盒子上，单位为像素",[868,143594,143596],{"id":143595},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22742,143598,143600],{"id":143599},"_18341-分开解释","18.3.4.1 分开解释",[2212,143602],{"style":127052,"src":143603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[2212,143605],{"style":127052,"src":143606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[2212,143608],{"style":127052,"src":143609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,143611,143612],{},"总结来说就是左手原则",[22742,143614,143616],{"id":143615},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[2212,143618],{"style":127052,"src":143619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[868,143621,143623],{"id":143622},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[2212,143625],{"style":127052,"src":143626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[2212,143628],{"style":127052,"src":143629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[26,143631,143633],{"className":127196,"code":143632,"language":127198,"meta":31,"style":31},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[33,143634,143635,143641,143654,143671],{"__ignoreMap":31},[36,143636,143637,143639],{"class":38,"line":39},[36,143638,52353],{"class":52042},[36,143640,16316],{"class":49},[36,143642,143643,143646,143648,143650,143652],{"class":38,"line":46},[36,143644,143645],{"class":60},"  perspective",[36,143647,52179],{"class":49},[36,143649,65816],{"class":60},[36,143651,52234],{"class":53},[36,143653,2040],{"class":49},[36,143655,143656,143658,143660,143663,143665,143667,143669],{"class":38,"line":78},[36,143657,137180],{"class":60},[36,143659,52179],{"class":49},[36,143661,143662],{"class":60},"rotateX",[36,143664,901],{"class":49},[36,143666,1411],{"class":60},[36,143668,143023],{"class":53},[36,143670,3468],{"class":49},[36,143672,143673],{"class":38,"line":125},[36,143674,2315],{"class":49},[868,143676,143678],{"id":143677},"_1836-案例","18.3.6 案例",[22742,143680,143682],{"id":143681},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[2212,143684],{"style":127052,"src":143685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[2212,143687],{"style":127052,"src":143688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[2212,143690],{"style":127052,"src":143691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[26,143693,143695],{"className":127196,"code":143694,"language":127198,"meta":31,"style":31},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[33,143696,143697,143702,143708,143720],{"__ignoreMap":31},[36,143698,143699],{"class":38,"line":39},[36,143700,143701],{"class":42},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[36,143703,143704,143706],{"class":38,"line":46},[36,143705,134193],{"class":2713},[36,143707,16316],{"class":49},[36,143709,143710,143712,143714,143716,143718],{"class":38,"line":78},[36,143711,143645],{"class":60},[36,143713,52179],{"class":49},[36,143715,65816],{"class":60},[36,143717,52234],{"class":53},[36,143719,2040],{"class":49},[36,143721,143722],{"class":38,"line":125},[36,143723,2315],{"class":49},[22742,143725,143727],{"id":143726},"_18362-3d导航栏","18.3.6.2 3D导航栏",[2212,143729],{"style":127052,"src":143730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[26,143732,143733],{"className":127943,"code":131300,"language":127945,"meta":31,"style":31},[33,143734,143735,143739,143753,143757],{"__ignoreMap":31},[36,143736,143737],{"class":38,"line":39},[36,143738,131307],{"class":42},[36,143740,143741,143743,143745,143747,143749,143751],{"class":38,"line":46},[36,143742,1789],{"class":49},[36,143744,52353],{"class":52042},[36,143746,54228],{"class":2713},[36,143748,54],{"class":49},[36,143750,131320],{"class":998},[36,143752,52049],{"class":49},[36,143754,143755],{"class":38,"line":78},[36,143756,131327],{"class":49},[36,143758,143759,143761,143763],{"class":38,"line":125},[36,143760,52527],{"class":49},[36,143762,52353],{"class":52042},[36,143764,52049],{"class":49},[22742,143766,143768],{"id":143767},"_18363-旋转木马","18.3.6.3 旋转木马",[2212,143770],{"style":127052,"src":143771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[26,143773,143774],{"className":127196,"code":142999,"language":127198,"meta":31,"style":31},[33,143775,143776,143782,143798],{"__ignoreMap":31},[36,143777,143778,143780],{"class":38,"line":39},[36,143779,52353],{"class":52042},[36,143781,16316],{"class":49},[36,143783,143784,143786,143788,143790,143792,143794,143796],{"class":38,"line":46},[36,143785,137180],{"class":60},[36,143787,52179],{"class":49},[36,143789,143016],{"class":60},[36,143791,901],{"class":49},[36,143793,1411],{"class":60},[36,143795,143023],{"class":53},[36,143797,3468],{"class":49},[36,143799,143800],{"class":38,"line":78},[36,143801,2315],{"class":49},[807,143803,143804],{},"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":46,"depth":46,"links":143806},[143807,143814],{"id":142902,"depth":46,"text":142903,"children":143808},[143809,143810,143811,143812,143813],{"id":142926,"depth":78,"text":142927},{"id":142981,"depth":78,"text":142982},{"id":143106,"depth":78,"text":143107},{"id":143209,"depth":78,"text":143210},{"id":143527,"depth":78,"text":143528},{"id":143555,"depth":46,"text":143556,"children":143815},[143816,143817,143818,143819,143820,143821],{"id":143562,"depth":78,"text":143563},{"id":143569,"depth":78,"text":143570},{"id":143585,"depth":78,"text":143586},{"id":143595,"depth":78,"text":143596},{"id":143622,"depth":78,"text":143623},{"id":143677,"depth":78,"text":143678},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142894,"description":823},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143828,"title":143829,"body":143830,"description":823,"extension":824,"meta":144033,"navigation":193,"path":144034,"seo":144035,"stem":144036,"__hash__":144037},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143831,"toc":144022},[143832,143835,143839,143842,143845,143849,143852,143855,143858,143862,143865,143869,143872,143876,143879,143883,143897,143901,143926,143929,143932,143949,143953,143957,143960,143963,143967,143970,143973,143991,143995,143998,144012,144016,144019],[10,143833,143829],{"id":143834},"_19-移动端基础-前缀现状与视口",[21,143836,143838],{"id":143837},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[2212,143840],{"style":127052,"src":143841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143843,143844],{},"意思就是加个前缀，增加兼容性",[21,143846,143848],{"id":143847},"_192-移动端现状认识","19.2 移动端现状认识",[2212,143850],{"style":127052,"src":143851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143853,143854],{},"调试方法：",[2212,143856],{"style":127052,"src":143857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[21,143859,143861],{"id":143860},"_193-视口","19.3 视口",[14,143863,143864],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[868,143866,143868],{"id":143867},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[2212,143870],{"style":127052,"src":143871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[868,143873,143875],{"id":143874},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[2212,143877],{"style":127052,"src":143878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[868,143880,143882],{"id":143881},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1886,143884,143885,143888,143891,143894],{},[854,143886,143887],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[854,143889,143890],{},"理想视口，对设备来讲，是最理想的视口尺寸",[854,143892,143893],{},"需要手动添写meta视口标签通知浏览器操作",[854,143895,143896],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[868,143898,143900],{"id":143899},"_1934-meta视口标签","19.3.4 meta视口标签",[26,143902,143904],{"className":127943,"code":143903,"language":127945,"meta":31,"style":31},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[33,143905,143906],{"__ignoreMap":31},[36,143907,143908,143910,143912,143914,143916,143918,143920,143922,143924],{"class":38,"line":39},[36,143909,1789],{"class":49},[36,143911,52086],{"class":52042},[36,143913,15664],{"class":2713},[36,143915,54],{"class":49},[36,143917,52133],{"class":998},[36,143919,52113],{"class":2713},[36,143921,54],{"class":49},[36,143923,52140],{"class":998},[36,143925,52049],{"class":49},[2212,143927],{"style":127052,"src":143928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143930,143931],{},"标准视口设置：",[851,143933,143934,143937,143940,143943,143946],{},[854,143935,143936],{},"视口宽度和设备保持一致",[854,143938,143939],{},"视口的默认缩放比例1.0",[854,143941,143942],{},"不允许用户自行缩放",[854,143944,143945],{},"最大允许的缩放比例1.0",[854,143947,143948],{},"最小允许的缩放比例1.0",[868,143950,143952],{"id":143951},"_1935-二倍图","19.3.5 二倍图",[22742,143954,143956],{"id":143955},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[2212,143958],{"style":127052,"src":143959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[2212,143961],{"style":127052,"src":143962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22742,143964,143966],{"id":143965},"_19352-多倍图","19.3.5.2 多倍图",[2212,143968],{"style":127052,"src":143969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143971,143972],{},"二倍图法，代码如下：",[26,143974,143976],{"className":127196,"code":143975,"language":127198,"meta":31,"style":31},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[33,143977,143978,143983],{"__ignoreMap":31},[36,143979,143980],{"class":38,"line":39},[36,143981,143982],{"class":42},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[36,143984,143985,143988],{"class":38,"line":46},[36,143986,143987],{"class":52042},"background-size",[36,143989,143990],{"class":49},": 50% 50%;\n",[22742,143992,143994],{"id":143993},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[2212,143996],{"style":127052,"src":143997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[851,143999,144000,144003,144006,144009],{},[854,144001,144002],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[854,144004,144005],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[854,144007,144008],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[854,144010,144011],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22742,144013,144015],{"id":144014},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[2212,144017],{"style":127052,"src":144018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[807,144020,144021],{},"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":46,"depth":46,"links":144023},[144024,144025,144026],{"id":143837,"depth":46,"text":143838},{"id":143847,"depth":46,"text":143848},{"id":143860,"depth":46,"text":143861,"children":144027},[144028,144029,144030,144031,144032],{"id":143867,"depth":78,"text":143868},{"id":143874,"depth":78,"text":143875},{"id":143881,"depth":78,"text":143882},{"id":143899,"depth":78,"text":143900},{"id":143951,"depth":78,"text":143952},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143829,"description":823},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":144039,"title":144040,"body":144041,"description":823,"extension":824,"meta":144918,"navigation":193,"path":144919,"seo":144920,"stem":144921,"__hash__":144922},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":144042,"toc":144902},[144043,144046,144050,144057,144060,144067,144070,144075,144078,144082,144086,144093,144096,144099,144103,144106,144109,144112,144115,144118,144122,144125,144129,144131,144134,144137,144140,144143,144145,144148,144150,144180,144182,144212,144216,144219,144223,144226,144243,144246,144249,144325,144327,144330,144333,144336,144339,144341,144344,144347,144351,144373,144376,144379,144383,144386,144392,144395,144399,144402,144405,144409,144412,144415,144418,144422,144425,144428,144431,144434,144438,144441,144445,144452,144455,144458,144461,144464,144474,144477,144480,144487,144490,144494,144497,144500,144504,144507,144510,144513,144558,144561,144564,144567,144569,144698,144700,144738,144741,144744,144746,144864,144866,144900],[10,144044,144040],{"id":144045},"_20-移动端布局实战上篇",[21,144047,144049],{"id":144048},"_201-移动端主流方案","20.1 移动端主流方案",[851,144051,144052],{},[854,144053,144054],{},[1043,144055,144056],{},"单独移动端页面（主流）",[2212,144058],{"style":127052,"src":144059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[851,144061,144062],{"start":46},[854,144063,144064],{},[1043,144065,144066],{},"响应式兼容PC移动端",[2212,144068],{"style":127052,"src":144069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[851,144071,144072],{"start":78},[854,144073,144074],{},"两种页面选型布局方式",[2212,144076],{"style":127052,"src":144077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[21,144079,144081],{"id":144080},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[868,144083,144085],{"id":144084},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,144087,144088,144089],{},"官网地址： ",[50,144090,144091],{"href":144091,"rel":144092},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24609],[2212,144094],{"style":127052,"src":144095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[2212,144097],{"style":127052,"src":144098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[868,144100,144102],{"id":144101},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[2212,144104],{"style":127052,"src":144105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[2212,144107],{"style":127052,"src":144108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,144110,144111],{},"去除高亮：",[14,144113,144114],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,144116,144117],{},"-webkit- tap-highlight-color: transparent;",[21,144119,144121],{"id":144120},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[2212,144123],{"style":127052,"src":144124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[21,144126,144128],{"id":144127},"_204-流式布局案例","20.4 流式布局案例",[14,144130,929],{},[14,144132,144133],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,144135,144136],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,144138,144139],{},"图片格式：",[2212,144141],{"style":127052,"src":144142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,144144,136239],{},[2212,144146],{"style":127052,"src":144147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,144149,140566],{},[26,144151,144152],{"className":127943,"code":134698,"language":127945,"meta":31,"style":31},[33,144153,144154],{"__ignoreMap":31},[36,144155,144156,144158,144160,144162,144164,144166,144168,144170,144172,144174,144176,144178],{"class":38,"line":39},[36,144157,1789],{"class":49},[36,144159,2212],{"class":52042},[36,144161,55981],{"class":2713},[36,144163,54],{"class":49},[36,144165,134713],{"class":998},[36,144167,55989],{"class":2713},[36,144169,54],{"class":49},[36,144171,134720],{"class":998},[36,144173,134723],{"class":2713},[36,144175,54],{"class":49},[36,144177,134728],{"class":998},[36,144179,52049],{"class":49},[14,144181,140655],{},[26,144183,144184],{"className":127943,"code":134698,"language":127945,"meta":31,"style":31},[33,144185,144186],{"__ignoreMap":31},[36,144187,144188,144190,144192,144194,144196,144198,144200,144202,144204,144206,144208,144210],{"class":38,"line":39},[36,144189,1789],{"class":49},[36,144191,2212],{"class":52042},[36,144193,55981],{"class":2713},[36,144195,54],{"class":49},[36,144197,134713],{"class":998},[36,144199,55989],{"class":2713},[36,144201,54],{"class":49},[36,144203,134720],{"class":998},[36,144205,134723],{"class":2713},[36,144207,54],{"class":49},[36,144209,134728],{"class":998},[36,144211,52049],{"class":49},[21,144213,144215],{"id":144214},"_205-flex布局","20.5 flex布局",[2212,144217],{"style":127052,"src":144218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[868,144220,144222],{"id":144221},"_2051-布局原理","20.5.1 布局原理",[14,144224,144225],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1886,144227,144228,144231,144234,144237,144240],{},[854,144229,144230],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[854,144232,144233],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[854,144235,144236],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[854,144238,144239],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[854,144241,144242],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,144244,144245],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,144247,144248],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[26,144250,144252],{"className":127196,"code":144251,"language":127198,"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,144253,144254,144259,144266,144276,144288,144299,144310,144321],{"__ignoreMap":31},[36,144255,144256],{"class":38,"line":39},[36,144257,144258],{"class":42},"\u002F* Flex 弹性布局 *\u002F\n",[36,144260,144261,144264],{"class":38,"line":46},[36,144262,144263],{"class":2713},".container",[36,144265,16316],{"class":49},[36,144267,144268,144270,144272,144274],{"class":38,"line":78},[36,144269,128812],{"class":60},[36,144271,52179],{"class":49},[36,144273,52219],{"class":60},[36,144275,2040],{"class":49},[36,144277,144278,144281,144283,144286],{"class":38,"line":125},[36,144279,144280],{"class":60},"  flex-direction",[36,144282,52179],{"class":49},[36,144284,144285],{"class":60},"row",[36,144287,2040],{"class":49},[36,144289,144290,144293,144295,144297],{"class":38,"line":131},[36,144291,144292],{"class":60},"  justify-content",[36,144294,52179],{"class":49},[36,144296,52410],{"class":60},[36,144298,2040],{"class":49},[36,144300,144301,144304,144306,144308],{"class":38,"line":396},[36,144302,144303],{"class":60},"  align-items",[36,144305,52179],{"class":49},[36,144307,52334],{"class":60},[36,144309,2040],{"class":49},[36,144311,144312,144315,144317,144319],{"class":38,"line":407},[36,144313,144314],{"class":60},"  flex-wrap",[36,144316,52179],{"class":49},[36,144318,79352],{"class":60},[36,144320,2040],{"class":49},[36,144322,144323],{"class":38,"line":2061},[36,144324,2315],{"class":49},[14,144326,71195],{},[14,144328,144329],{},".form-item .male-label {",[14,144331,144332],{},"   margin-right: 20px;",[14,144334,144335],{},"   display: inline-flex;",[14,144337,144338],{},"   align-items: center;",[14,144340,1825],{},[2212,144342],{"style":127052,"src":144343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[2212,144345],{"style":127052,"src":144346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[868,144348,144350],{"id":144349},"_2052-常见父项属性","20.5.2 常见父项属性",[851,144352,144353,144356,144359,144362,144365,144368,144371],{},[854,144354,144355],{},"flex-direction：设置主轴的方向",[854,144357,144358],{},"justify-content：设置主轴上的子元素排列方式",[854,144360,144361],{},"flex-wrap：设置子元素是否换行",[854,144363,144364],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[854,144366,144367],{},"align-items：设置侧轴上的子元素排列方式（单行）",[854,144369,144370],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[854,144372,144355],{},[2212,144374],{"style":127052,"src":144375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[2212,144377],{"style":127052,"src":144378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[851,144380,144381],{"start":46},[854,144382,144358],{},[2212,144384],{"style":127052,"src":144385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,144387,144388,144391],{},[33,144389,144390],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,144393,144394],{},"跟着主轴走",[851,144396,144397],{"start":78},[854,144398,144361],{},[2212,144400],{"style":127052,"src":144401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,144403,144404],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[851,144406,144407],{"start":125},[854,144408,144364],{},[2212,144410],{"style":127052,"src":144411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,144413,144414],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,144416,144417],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[851,144419,144420],{"start":131},[854,144421,144367],{},[2212,144423],{"style":127052,"src":144424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,144426,144427],{},"align-items与align-content之间的区别：",[14,144429,144430],{},"单找items，多找content",[2212,144432],{"style":127052,"src":144433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[851,144435,144436],{"start":396},[854,144437,144370],{},[2212,144439],{"style":127052,"src":144440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[868,144442,144444],{"id":144443},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[851,144446,144447],{},[854,144448,144449],{},[1043,144450,144451],{},"flex 属性",[14,144453,144454],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[2212,144456],{"style":127052,"src":144457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,144459,144460],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,144462,144463],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[851,144465,144466],{"start":46},[854,144467,144468,14539,144471],{},[1043,144469,144470],{},"align-self",[1043,144472,144473],{},"控制子项自己在侧轴上的排列方式",[2212,144475],{"style":127052,"src":144476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,144478,144479],{},"单个子盒子在父盒子侧轴上的排列方式",[851,144481,144482],{"start":78},[854,144483,144484,144486],{},[1043,144485,95941],{}," 属性定义项目的排列顺序",[2212,144488],{"style":127052,"src":144489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[868,144491,144493],{"id":144492},"_2054-背景线性渐变","20.5.4 背景线性渐变",[2212,144495],{"style":127052,"src":144496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,144498,144499],{},"必须要添加浏览器的私有前缀",[868,144501,144503],{"id":144502},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,144505,144506],{},"学到最重要的知识：",[14,144508,144509],{},"flex处理这样的布局思路",[2212,144511],{"style":127052,"src":144512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[26,144514,144516],{"className":127196,"code":144515,"language":127198,"meta":31,"style":31},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[33,144517,144518,144524,144534,144544,144554],{"__ignoreMap":31},[36,144519,144520,144522],{"class":38,"line":39},[36,144521,144263],{"class":2713},[36,144523,16316],{"class":49},[36,144525,144526,144528,144530,144532],{"class":38,"line":46},[36,144527,128812],{"class":60},[36,144529,52179],{"class":49},[36,144531,52219],{"class":60},[36,144533,2040],{"class":49},[36,144535,144536,144538,144540,144542],{"class":38,"line":78},[36,144537,144292],{"class":60},[36,144539,52179],{"class":49},[36,144541,52334],{"class":60},[36,144543,2040],{"class":49},[36,144545,144546,144548,144550,144552],{"class":38,"line":125},[36,144547,144303],{"class":60},[36,144549,52179],{"class":49},[36,144551,52334],{"class":60},[36,144553,2040],{"class":49},[36,144555,144556],{"class":38,"line":131},[36,144557,2315],{"class":49},[14,144559,144560],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,144562,144563],{},"使用属性选择器",[2212,144565],{"style":127052,"src":144566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,144568,69631],{},[26,144570,144572],{"className":127943,"code":144571,"language":127945,"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,144573,144574,144579,144593,144598,144618,144623,144642,144647,144666,144671,144690],{"__ignoreMap":31},[36,144575,144576],{"class":38,"line":39},[36,144577,144578],{"class":42},"\u003C!-- 携程网移动端案例结构 -->\n",[36,144580,144581,144583,144585,144587,144589,144591],{"class":38,"line":46},[36,144582,1789],{"class":49},[36,144584,52353],{"class":52042},[36,144586,54228],{"class":2713},[36,144588,54],{"class":49},[36,144590,93065],{"class":998},[36,144592,52049],{"class":49},[36,144594,144595],{"class":38,"line":78},[36,144596,144597],{"class":42},"  \u003C!-- 搜索栏 -->\n",[36,144599,144600,144602,144604,144606,144608,144611,144614,144616],{"class":38,"line":125},[36,144601,52886],{"class":49},[36,144603,52353],{"class":52042},[36,144605,54228],{"class":2713},[36,144607,54],{"class":49},[36,144609,144610],{"class":998},"\"search-index\"",[36,144612,144613],{"class":49},">...\u003C\u002F",[36,144615,52353],{"class":52042},[36,144617,52049],{"class":49},[36,144619,144620],{"class":38,"line":131},[36,144621,144622],{"class":42},"  \u003C!-- 焦点图 -->\n",[36,144624,144625,144627,144629,144631,144633,144636,144638,144640],{"class":38,"line":396},[36,144626,52886],{"class":49},[36,144628,52353],{"class":52042},[36,144630,54228],{"class":2713},[36,144632,54],{"class":49},[36,144634,144635],{"class":998},"\"focus\"",[36,144637,144613],{"class":49},[36,144639,52353],{"class":52042},[36,144641,52049],{"class":49},[36,144643,144644],{"class":38,"line":407},[36,144645,144646],{"class":42},"  \u003C!-- 主导航 -->\n",[36,144648,144649,144651,144653,144655,144657,144660,144662,144664],{"class":38,"line":2061},[36,144650,52886],{"class":49},[36,144652,52353],{"class":52042},[36,144654,54228],{"class":2713},[36,144656,54],{"class":49},[36,144658,144659],{"class":998},"\"local-nav\"",[36,144661,144613],{"class":49},[36,144663,52353],{"class":52042},[36,144665,52049],{"class":49},[36,144667,144668],{"class":38,"line":2067},[36,144669,144670],{"class":42},"  \u003C!-- 子导航 -->\n",[36,144672,144673,144675,144677,144679,144681,144684,144686,144688],{"class":38,"line":2079},[36,144674,52886],{"class":49},[36,144676,52353],{"class":52042},[36,144678,54228],{"class":2713},[36,144680,54],{"class":49},[36,144682,144683],{"class":998},"\"nav-common\"",[36,144685,144613],{"class":49},[36,144687,52353],{"class":52042},[36,144689,52049],{"class":49},[36,144691,144692,144694,144696],{"class":38,"line":2362},[36,144693,52527],{"class":49},[36,144695,52353],{"class":52042},[36,144697,52049],{"class":49},[14,144699,71195],{},[26,144701,144702],{"className":127196,"code":137648,"language":127198,"meta":31,"style":31},[33,144703,144704,144718,144734],{"__ignoreMap":31},[36,144705,144706,144708,144710,144712,144714,144716],{"class":38,"line":39},[36,144707,54563],{"class":52042},[36,144709,1769],{"class":49},[36,144711,103751],{"class":2713},[36,144713,54],{"class":53},[36,144715,63441],{"class":998},[36,144717,137665],{"class":49},[36,144719,144720,144722,144724,144726,144728,144730,144732],{"class":38,"line":46},[36,144721,71638],{"class":60},[36,144723,52179],{"class":49},[36,144725,61],{"class":60},[36,144727,52234],{"class":53},[36,144729,52263],{"class":60},[36,144731,130776],{"class":60},[36,144733,2040],{"class":49},[36,144735,144736],{"class":38,"line":78},[36,144737,2315],{"class":49},[14,144739,144740],{},"总代码和效果展示：",[2212,144742],{"style":127052,"src":144743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144745,69631],{},[26,144747,144748],{"className":127943,"code":144571,"language":127945,"meta":31,"style":31},[33,144749,144750,144754,144768,144772,144790,144794,144812,144816,144834,144838,144856],{"__ignoreMap":31},[36,144751,144752],{"class":38,"line":39},[36,144753,144578],{"class":42},[36,144755,144756,144758,144760,144762,144764,144766],{"class":38,"line":46},[36,144757,1789],{"class":49},[36,144759,52353],{"class":52042},[36,144761,54228],{"class":2713},[36,144763,54],{"class":49},[36,144765,93065],{"class":998},[36,144767,52049],{"class":49},[36,144769,144770],{"class":38,"line":78},[36,144771,144597],{"class":42},[36,144773,144774,144776,144778,144780,144782,144784,144786,144788],{"class":38,"line":125},[36,144775,52886],{"class":49},[36,144777,52353],{"class":52042},[36,144779,54228],{"class":2713},[36,144781,54],{"class":49},[36,144783,144610],{"class":998},[36,144785,144613],{"class":49},[36,144787,52353],{"class":52042},[36,144789,52049],{"class":49},[36,144791,144792],{"class":38,"line":131},[36,144793,144622],{"class":42},[36,144795,144796,144798,144800,144802,144804,144806,144808,144810],{"class":38,"line":396},[36,144797,52886],{"class":49},[36,144799,52353],{"class":52042},[36,144801,54228],{"class":2713},[36,144803,54],{"class":49},[36,144805,144635],{"class":998},[36,144807,144613],{"class":49},[36,144809,52353],{"class":52042},[36,144811,52049],{"class":49},[36,144813,144814],{"class":38,"line":407},[36,144815,144646],{"class":42},[36,144817,144818,144820,144822,144824,144826,144828,144830,144832],{"class":38,"line":2061},[36,144819,52886],{"class":49},[36,144821,52353],{"class":52042},[36,144823,54228],{"class":2713},[36,144825,54],{"class":49},[36,144827,144659],{"class":998},[36,144829,144613],{"class":49},[36,144831,52353],{"class":52042},[36,144833,52049],{"class":49},[36,144835,144836],{"class":38,"line":2067},[36,144837,144670],{"class":42},[36,144839,144840,144842,144844,144846,144848,144850,144852,144854],{"class":38,"line":2079},[36,144841,52886],{"class":49},[36,144843,52353],{"class":52042},[36,144845,54228],{"class":2713},[36,144847,54],{"class":49},[36,144849,144683],{"class":998},[36,144851,144613],{"class":49},[36,144853,52353],{"class":52042},[36,144855,52049],{"class":49},[36,144857,144858,144860,144862],{"class":38,"line":2362},[36,144859,52527],{"class":49},[36,144861,52353],{"class":52042},[36,144863,52049],{"class":49},[14,144865,71195],{},[26,144867,144868],{"className":127943,"code":131300,"language":127945,"meta":31,"style":31},[33,144869,144870,144874,144888,144892],{"__ignoreMap":31},[36,144871,144872],{"class":38,"line":39},[36,144873,131307],{"class":42},[36,144875,144876,144878,144880,144882,144884,144886],{"class":38,"line":46},[36,144877,1789],{"class":49},[36,144879,52353],{"class":52042},[36,144881,54228],{"class":2713},[36,144883,54],{"class":49},[36,144885,131320],{"class":998},[36,144887,52049],{"class":49},[36,144889,144890],{"class":38,"line":78},[36,144891,131327],{"class":49},[36,144893,144894,144896,144898],{"class":38,"line":125},[36,144895,52527],{"class":49},[36,144897,52353],{"class":52042},[36,144899,52049],{"class":49},[807,144901,138597],{},{"title":31,"searchDepth":46,"depth":46,"links":144903},[144904,144905,144909,144910,144911],{"id":144048,"depth":46,"text":144049},{"id":144080,"depth":46,"text":144081,"children":144906},[144907,144908],{"id":144084,"depth":78,"text":144085},{"id":144101,"depth":78,"text":144102},{"id":144120,"depth":46,"text":144121},{"id":144127,"depth":46,"text":144128},{"id":144214,"depth":46,"text":144215,"children":144912},[144913,144914,144915,144916,144917],{"id":144221,"depth":78,"text":144222},{"id":144349,"depth":78,"text":144350},{"id":144443,"depth":78,"text":144444},{"id":144492,"depth":78,"text":144493},{"id":144502,"depth":78,"text":144503},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":144040,"description":823},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144924,"title":144925,"body":144926,"description":823,"extension":824,"meta":146153,"navigation":193,"path":146154,"seo":146155,"stem":146156,"__hash__":146157},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144927,"toc":146131},[144928,144931,144935,144939,144942,144945,144949,144954,144957,144960,144963,144966,144969,145026,145029,145034,145037,145040,145044,145055,145059,145062,145065,145072,145077,145081,145084,145090,145093,145097,145100,145107,145110,145113,145120,145123,145130,145133,145136,145143,145146,145149,145151,145168,145172,145175,145178,145181,145185,145188,145191,145194,145197,145200,145203,145205,145208,145211,145273,145276,145386,145393,145399,145402,145405,145409,145412,145416,145421,145424,145431,145434,145440,145445,145448,145451,145454,145457,145460,145463,145466,145469,145525,145527,145553,145557,145560,145563,145566,145574,145577,145580,145584,145640,145643,145647,145653,145664,145667,145672,145675,145678,145684,145687,145690,145693,145696,145699,145702,145705,145708,145733,145739,145742,145745,145748,145751,145754,145757,145762,145765,145768,145771,145779,145782,145789,145792,145795,145797,145821,145823,145826,145829,145832,145835,145838,145841,145844,145878,145881,145884,145918,145925,145928,145931,145934,145937,145940,145943,145950,145953,145956,145959,145962,145969,145972,145975,145982,145985,145988,145992,145995,145998,146001,146004,146007,146010,146013,146016,146018,146042,146044,146068,146072,146083,146086,146089,146092,146095,146098,146101,146104,146107,146110,146113,146116,146119,146122,146125,146128],[10,144929,144925],{"id":144930},"_21-移动端布局实战下篇",[21,144932,144934],{"id":144933},"_211-rem适配布局","21.1 rem适配布局",[868,144936,144938],{"id":144937},"_2111-rem单位","21.1.1 rem单位",[2212,144940],{"style":127052,"src":144941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144943,144944],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[868,144946,144948],{"id":144947},"_2112-媒体查询","21.1.2 媒体查询",[851,144950,144951],{},[854,144952,144953],{},"参数介绍",[2212,144955],{"style":127052,"src":144956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[2212,144958],{"style":127052,"src":144959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[2212,144961],{"style":127052,"src":144962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[2212,144964],{"style":127052,"src":144965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[2212,144967],{"style":127052,"src":144968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[26,144970,144972],{"className":127196,"code":144971,"language":127198,"meta":31,"style":31},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[33,144973,144974,144979,144998,145005,145018,145022],{"__ignoreMap":31},[36,144975,144976],{"class":38,"line":39},[36,144977,144978],{"class":42},"\u002F* 媒体查询 *\u002F\n",[36,144980,144981,144984,144986,144989,144991,144994,144996],{"class":38,"line":46},[36,144982,144983],{"class":53},"@media",[36,144985,2408],{"class":49},[36,144987,144988],{"class":60},"max-width",[36,144990,52179],{"class":49},[36,144992,144993],{"class":60},"768",[36,144995,52234],{"class":53},[36,144997,13186],{"class":49},[36,144999,145000,145003],{"class":38,"line":78},[36,145001,145002],{"class":2713},"  .container",[36,145004,16316],{"class":49},[36,145006,145007,145010,145012,145014,145016],{"class":38,"line":125},[36,145008,145009],{"class":60},"    width",[36,145011,52179],{"class":49},[36,145013,67],{"class":60},[36,145015,1214],{"class":53},[36,145017,2040],{"class":49},[36,145019,145020],{"class":38,"line":131},[36,145021,127992],{"class":49},[36,145023,145024],{"class":38,"line":396},[36,145025,2315],{"class":49},[14,145027,145028],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[851,145030,145031],{"start":46},[854,145032,145033],{},"引入资源",[2212,145035],{"style":127052,"src":145036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,145038,145039],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[868,145041,145043],{"id":145042},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1886,145045,145046,145049,145052],{},[854,145047,145048],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[854,145050,145051],{},"媒体查询可以根据不同设备宽度来修改样式",[854,145053,145054],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[21,145056,145058],{"id":145057},"_212-less基础","21.2 Less基础",[14,145060,145061],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,145063,145064],{},"Less可以解决该问题，它是css的扩展语言",[14,145066,145067,145068],{},"Less中文网址： ",[50,145069,145070],{"href":145070,"rel":145071},"http:\u002F\u002Flesscss.cn\u002F",[24609],[14,145073,145074],{},[1043,145075,145076],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[868,145078,145080],{"id":145079},"_2121-less安装","21.2.1 less安装",[14,145082,145083],{},"如果使用vscode，则无需进行下方安装步骤",[14,145085,145086],{},[50,145087,145088],{"href":145088,"rel":145089},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24609],[2212,145091],{"style":127052,"src":145092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[868,145094,145096],{"id":145095},"_2122-less使用","21.2.2 less使用",[14,145098,145099],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[851,145101,145102],{},[854,145103,145104],{},[1043,145105,145106],{},"Less 变量",[2212,145108],{"style":127052,"src":145109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[2212,145111],{"style":127052,"src":145112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[851,145114,145115],{"start":46},[854,145116,145117],{},[1043,145118,145119],{},"Less 编译",[2212,145121],{"style":127052,"src":145122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[851,145124,145125],{"start":78},[854,145126,145127],{},[1043,145128,145129],{},"Less 嵌套",[2212,145131],{"style":127052,"src":145132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[2212,145134],{"style":127052,"src":145135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[851,145137,145138],{"start":125},[854,145139,145140],{},[1043,145141,145142],{},"Less 运算",[2212,145144],{"style":127052,"src":145145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,145147,145148],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,145150,929],{},[1886,145152,145153,145156,145159,145162,145165],{},[854,145154,145155],{},"乘号（*）和除号（\u002F）的写法",[854,145157,145158],{},"运算符中间左右有个空格隔开 1px + 5",[854,145160,145161],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[854,145163,145164],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[854,145166,145167],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[21,145169,145171],{"id":145170},"_213-rem-适配方案","21.3 rem 适配方案",[14,145173,145174],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,145176,145177],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[2212,145179],{"style":127052,"src":145180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[868,145182,145184],{"id":145183},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,145186,145187],{},"rem + 媒体查询 + less 技术",[2212,145189],{"style":127052,"src":145190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,145192,145193],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,145195,145196],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[2212,145198],{"style":127052,"src":145199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,145201,145202],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,145204,15377],{},[2212,145206],{"style":127052,"src":145207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,145209,145210],{},"index.html:",[26,145212,145214],{"className":127196,"code":145213,"language":127198,"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,145215,145216,145221,145227,145243,145247,145253,145269],{"__ignoreMap":31},[36,145217,145218],{"class":38,"line":39},[36,145219,145220],{"class":42},"\u002F* rem 适配方案 *\u002F\n",[36,145222,145223,145225],{"class":38,"line":46},[36,145224,51377],{"class":52042},[36,145226,16316],{"class":49},[36,145228,145229,145231,145233,145236,145238,145240],{"class":38,"line":78},[36,145230,71368],{"class":60},[36,145232,52179],{"class":49},[36,145234,145235],{"class":60},"62.5",[36,145237,1214],{"class":53},[36,145239,131059],{"class":49},[36,145241,145242],{"class":42},"\u002F* 1rem = 10px *\u002F\n",[36,145244,145245],{"class":38,"line":125},[36,145246,2315],{"class":49},[36,145248,145249,145251],{"class":38,"line":131},[36,145250,131044],{"class":2713},[36,145252,16316],{"class":49},[36,145254,145255,145257,145259,145261,145264,145266],{"class":38,"line":396},[36,145256,71310],{"class":60},[36,145258,52179],{"class":49},[36,145260,332],{"class":60},[36,145262,145263],{"class":53},"rem",[36,145265,131059],{"class":49},[36,145267,145268],{"class":42},"\u002F* 100px *\u002F\n",[36,145270,145271],{"class":38,"line":407},[36,145272,2315],{"class":49},[14,145274,145275],{},"common.less",[26,145277,145279],{"className":127196,"code":145278,"language":127198,"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,145280,145281,145287,145302,145306,145312,145326,145330,145334,145338,145344,145358,145362,145368,145382],{"__ignoreMap":31},[36,145282,145283,145285],{"class":38,"line":39},[36,145284,51377],{"class":52042},[36,145286,16316],{"class":49},[36,145288,145289,145291,145293,145295,145297,145299],{"class":38,"line":46},[36,145290,71368],{"class":60},[36,145292,52179],{"class":49},[36,145294,145235],{"class":60},[36,145296,1214],{"class":53},[36,145298,26812],{"class":49},[36,145300,145301],{"class":42},"\u002F* 10px *\u002F\n",[36,145303,145304],{"class":38,"line":78},[36,145305,2315],{"class":49},[36,145307,145308,145310],{"class":38,"line":125},[36,145309,52353],{"class":52042},[36,145311,16316],{"class":49},[36,145313,145314,145316,145318,145320,145322,145324],{"class":38,"line":131},[36,145315,71310],{"class":60},[36,145317,52179],{"class":49},[36,145319,332],{"class":60},[36,145321,145263],{"class":53},[36,145323,26812],{"class":49},[36,145325,145268],{"class":42},[36,145327,145328],{"class":38,"line":396},[36,145329,2315],{"class":49},[36,145331,145332],{"class":38,"line":407},[36,145333,136657],{"class":49},[36,145335,145336],{"class":38,"line":2061},[36,145337,145220],{"class":42},[36,145339,145340,145342],{"class":38,"line":2067},[36,145341,51377],{"class":52042},[36,145343,16316],{"class":49},[36,145345,145346,145348,145350,145352,145354,145356],{"class":38,"line":2079},[36,145347,71368],{"class":60},[36,145349,52179],{"class":49},[36,145351,145235],{"class":60},[36,145353,1214],{"class":53},[36,145355,131059],{"class":49},[36,145357,145242],{"class":42},[36,145359,145360],{"class":38,"line":2362},[36,145361,2315],{"class":49},[36,145363,145364,145366],{"class":38,"line":2367},[36,145365,131044],{"class":2713},[36,145367,16316],{"class":49},[36,145369,145370,145372,145374,145376,145378,145380],{"class":38,"line":2373},[36,145371,71310],{"class":60},[36,145373,52179],{"class":49},[36,145375,332],{"class":60},[36,145377,145263],{"class":53},[36,145379,131059],{"class":49},[36,145381,145268],{"class":42},[36,145383,145384],{"class":38,"line":2378},[36,145385,2315],{"class":49},[14,145387,145388,145389,145392],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[24297,145390,145391],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[26,145394,145397],{"className":145395,"code":145396,"language":5935},[5933],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[33,145398,145396],{"__ignoreMap":31},[14,145400,145401],{},"less保存时会自动变成.css文件",[14,145403,145404],{},"好好搞懂上述代码写法",[868,145406,145408],{"id":145407},"_2132-样式导入样式","21.3.2 样式导入样式",[2212,145410],{"style":127052,"src":145411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[868,145413,145415],{"id":145414},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[851,145417,145418],{},[854,145419,145420],{},"准备工作",[2212,145422],{"style":127052,"src":145423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,145425,145426,145427],{},"github地址：",[50,145428,145429],{"href":145429,"rel":145430},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24609],[14,145432,145433],{},"下载之后，将index.js文件拖到项目中就可以了",[14,145435,145436,145437],{},"js文件引入到index.html中使用的是",[33,145438,145439],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[851,145441,145442],{"start":46},[854,145443,145444],{},"vscode插件",[2212,145446],{"style":127052,"src":145447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,145449,145450],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,145452,145453],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[2212,145455],{"style":127052,"src":145456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,145458,145459],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[2212,145461],{"style":127052,"src":145462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,145464,145465],{},"修改成75就可以，alt+z为快捷键",[14,145467,145468],{},"index.css：",[26,145470,145471],{"className":127196,"code":145213,"language":127198,"meta":31,"style":31},[33,145472,145473,145477,145483,145497,145501,145507,145521],{"__ignoreMap":31},[36,145474,145475],{"class":38,"line":39},[36,145476,145220],{"class":42},[36,145478,145479,145481],{"class":38,"line":46},[36,145480,51377],{"class":52042},[36,145482,16316],{"class":49},[36,145484,145485,145487,145489,145491,145493,145495],{"class":38,"line":78},[36,145486,71368],{"class":60},[36,145488,52179],{"class":49},[36,145490,145235],{"class":60},[36,145492,1214],{"class":53},[36,145494,131059],{"class":49},[36,145496,145242],{"class":42},[36,145498,145499],{"class":38,"line":125},[36,145500,2315],{"class":49},[36,145502,145503,145505],{"class":38,"line":131},[36,145504,131044],{"class":2713},[36,145506,16316],{"class":49},[36,145508,145509,145511,145513,145515,145517,145519],{"class":38,"line":396},[36,145510,71310],{"class":60},[36,145512,52179],{"class":49},[36,145514,332],{"class":60},[36,145516,145263],{"class":53},[36,145518,131059],{"class":49},[36,145520,145268],{"class":42},[36,145522,145523],{"class":38,"line":407},[36,145524,2315],{"class":49},[14,145526,145210],{},[26,145528,145529],{"className":127196,"code":127600,"language":127198,"meta":31,"style":31},[33,145530,145531,145537,145549],{"__ignoreMap":31},[36,145532,145533,145535],{"class":38,"line":39},[36,145534,52542],{"class":52042},[36,145536,16316],{"class":49},[36,145538,145539,145541,145543,145545,145547],{"class":38,"line":46},[36,145540,71368],{"class":60},[36,145542,52179],{"class":49},[36,145544,1483],{"class":60},[36,145546,52234],{"class":53},[36,145548,2040],{"class":49},[36,145550,145551],{"class":38,"line":78},[36,145552,2315],{"class":49},[21,145554,145556],{"id":145555},"_214-响应式开发","21.4 响应式开发",[14,145558,145559],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[2212,145561],{"style":127052,"src":145562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,145564,145565],{},"做法：",[1886,145567,145568,145571],{},[854,145569,145570],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[854,145572,145573],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[2212,145575],{"style":127052,"src":145576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,145578,145579],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[868,145581,145583],{"id":145582},"_2141-简单代码示范","21.4.1 简单代码示范",[26,145585,145586],{"className":127196,"code":145213,"language":127198,"meta":31,"style":31},[33,145587,145588,145592,145598,145612,145616,145622,145636],{"__ignoreMap":31},[36,145589,145590],{"class":38,"line":39},[36,145591,145220],{"class":42},[36,145593,145594,145596],{"class":38,"line":46},[36,145595,51377],{"class":52042},[36,145597,16316],{"class":49},[36,145599,145600,145602,145604,145606,145608,145610],{"class":38,"line":78},[36,145601,71368],{"class":60},[36,145603,52179],{"class":49},[36,145605,145235],{"class":60},[36,145607,1214],{"class":53},[36,145609,131059],{"class":49},[36,145611,145242],{"class":42},[36,145613,145614],{"class":38,"line":125},[36,145615,2315],{"class":49},[36,145617,145618,145620],{"class":38,"line":131},[36,145619,131044],{"class":2713},[36,145621,16316],{"class":49},[36,145623,145624,145626,145628,145630,145632,145634],{"class":38,"line":396},[36,145625,71310],{"class":60},[36,145627,52179],{"class":49},[36,145629,332],{"class":60},[36,145631,145263],{"class":53},[36,145633,131059],{"class":49},[36,145635,145268],{"class":42},[36,145637,145638],{"class":38,"line":407},[36,145639,2315],{"class":49},[14,145641,145642],{},"父盒子一般命名为container",[868,145644,145646],{"id":145645},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,145648,145649,145650],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[1043,145651,145652],{},"使得 Web 开发更加快捷",[1886,145654,145655],{},[854,145656,145657,145658],{},"官网：",[1043,145659,145660],{},[50,145661,145662],{"href":145662,"rel":145663},"http:\u002F\u002Fgetbootstrap.com\u002F",[24609],[14,145665,145666],{},"可以直接去官网拿现成的东西",[851,145668,145669],{},[854,145670,145671],{},"Bootstrap的使用",[14,145673,145674],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145676,145677],{},"Bootstrap 使用四步曲：",[14,145679,145680,145683],{},[1043,145681,145682],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[2212,145685],{"style":127052,"src":145686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145688,145689],{},"打开Bootstrap官网，然后下载",[2212,145691],{"style":127052,"src":145692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[2212,145694],{"style":127052,"src":145695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145697,145698],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145700,145701],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145703,145704],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[2212,145706],{"style":127052,"src":145707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[26,145709,145711],{"className":127196,"code":145710,"language":127198,"meta":31,"style":31},".center {\n  color: red;\n}\n",[33,145712,145713,145719,145729],{"__ignoreMap":31},[36,145714,145715,145717],{"class":38,"line":39},[36,145716,127487],{"class":2713},[36,145718,16316],{"class":49},[36,145720,145721,145723,145725,145727],{"class":38,"line":46},[36,145722,71647],{"class":60},[36,145724,52179],{"class":49},[36,145726,58163],{"class":60},[36,145728,2040],{"class":49},[36,145730,145731],{"class":38,"line":78},[36,145732,2315],{"class":49},[14,145734,145735,145738],{},[33,145736,145737],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[2212,145740],{"style":127052,"src":145741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[2212,145743],{"style":127052,"src":145744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[2212,145746],{"style":127052,"src":145747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145749,145750],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[2212,145752],{"style":127052,"src":145753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145755,145756],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[851,145758,145759],{"start":46},[854,145760,145761],{},"布局容器",[2212,145763],{"style":127052,"src":145764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145766,145767],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145769,145770],{},"container-fluid用于移动式布局比较方便",[851,145772,145773],{"start":78},[854,145774,145775,145776],{},"bootstrap ",[1043,145777,145778],{},"栅格系统原理",[2212,145780],{"style":127052,"src":145781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[851,145783,145784],{"start":125},[854,145785,145786],{},[1043,145787,145788],{},"栅格选项参数",[2212,145790],{"style":127052,"src":145791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145793,145794],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145796,15377],{},[26,145798,145799],{"className":127196,"code":145710,"language":127198,"meta":31,"style":31},[33,145800,145801,145807,145817],{"__ignoreMap":31},[36,145802,145803,145805],{"class":38,"line":39},[36,145804,127487],{"class":2713},[36,145806,16316],{"class":49},[36,145808,145809,145811,145813,145815],{"class":38,"line":46},[36,145810,71647],{"class":60},[36,145812,52179],{"class":49},[36,145814,58163],{"class":60},[36,145816,2040],{"class":49},[36,145818,145819],{"class":38,"line":78},[36,145820,2315],{"class":49},[14,145822,136239],{},[2212,145824],{"style":127052,"src":145825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145827,145828],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145830,145831],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145833,145834],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145836,145837],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145839,145840],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145842,145843],{},"汇总展示说明：",[26,145845,145846],{"className":127943,"code":131300,"language":127945,"meta":31,"style":31},[33,145847,145848,145852,145866,145870],{"__ignoreMap":31},[36,145849,145850],{"class":38,"line":39},[36,145851,131307],{"class":42},[36,145853,145854,145856,145858,145860,145862,145864],{"class":38,"line":46},[36,145855,1789],{"class":49},[36,145857,52353],{"class":52042},[36,145859,54228],{"class":2713},[36,145861,54],{"class":49},[36,145863,131320],{"class":998},[36,145865,52049],{"class":49},[36,145867,145868],{"class":38,"line":78},[36,145869,131327],{"class":49},[36,145871,145872,145874,145876],{"class":38,"line":125},[36,145873,52527],{"class":49},[36,145875,52353],{"class":52042},[36,145877,52049],{"class":49},[2212,145879],{"style":127052,"src":145880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145882,145883],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[26,145885,145886],{"className":127943,"code":131300,"language":127945,"meta":31,"style":31},[33,145887,145888,145892,145906,145910],{"__ignoreMap":31},[36,145889,145890],{"class":38,"line":39},[36,145891,131307],{"class":42},[36,145893,145894,145896,145898,145900,145902,145904],{"class":38,"line":46},[36,145895,1789],{"class":49},[36,145897,52353],{"class":52042},[36,145899,54228],{"class":2713},[36,145901,54],{"class":49},[36,145903,131320],{"class":998},[36,145905,52049],{"class":49},[36,145907,145908],{"class":38,"line":78},[36,145909,131327],{"class":49},[36,145911,145912,145914,145916],{"class":38,"line":125},[36,145913,52527],{"class":49},[36,145915,52353],{"class":52042},[36,145917,52049],{"class":49},[851,145919,145920],{"start":131},[854,145921,145922],{},[1043,145923,145924],{},"列嵌套",[2212,145926],{"style":127052,"src":145927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145929,145930],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145932,145933],{},"没加row内部这样：",[2212,145935],{"style":127052,"src":145936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145938,145939],{},"加上row之后内部为：",[2212,145941],{"style":127052,"src":145942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[851,145944,145945],{"start":396},[854,145946,145947],{},[1043,145948,145949],{},"列偏移",[2212,145951],{"style":127052,"src":145952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145954,145955],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145957,145958],{},"要加偏移量，即偏移份数",[14,145960,145961],{},"偏移的份数=12-两个盒子的份数",[851,145963,145964],{"start":407},[854,145965,145966],{},[1043,145967,145968],{},"列排序",[2212,145970],{"style":127052,"src":145971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145973,145974],{},"pull拉左；push推右",[851,145976,145977],{"start":2061},[854,145978,145979],{},[1043,145980,145981],{},"响应式工具",[2212,145983],{"style":127052,"src":145984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145986,145987],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[868,145989,145991],{"id":145990},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145993,145994],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145996,145997],{},"ul {",[14,145999,146000],{},"list-style: none;",[14,146002,146003],{},"margin:0;",[14,146005,146006],{},"padding:0; }",[2212,146008],{"style":127052,"src":146009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[2212,146011],{"style":127052,"src":146012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,146014,146015],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,146017,69631],{},[26,146019,146020],{"className":127196,"code":139866,"language":127198,"meta":31,"style":31},[33,146021,146022,146028,146038],{"__ignoreMap":31},[36,146023,146024,146026],{"class":38,"line":39},[36,146025,131044],{"class":2713},[36,146027,16316],{"class":49},[36,146029,146030,146032,146034,146036],{"class":38,"line":46},[36,146031,131676],{"class":60},[36,146033,52179],{"class":49},[36,146035,24480],{"class":60},[36,146037,2040],{"class":49},[36,146039,146040],{"class":38,"line":78},[36,146041,2315],{"class":49},[14,146043,71195],{},[26,146045,146046],{"className":127196,"code":139866,"language":127198,"meta":31,"style":31},[33,146047,146048,146054,146064],{"__ignoreMap":31},[36,146049,146050,146052],{"class":38,"line":39},[36,146051,131044],{"class":2713},[36,146053,16316],{"class":49},[36,146055,146056,146058,146060,146062],{"class":38,"line":46},[36,146057,131676],{"class":60},[36,146059,52179],{"class":49},[36,146061,24480],{"class":60},[36,146063,2040],{"class":49},[36,146065,146066],{"class":38,"line":78},[36,146067,2315],{"class":49},[21,146069,146071],{"id":146070},"_215-swiper-插件使用","21.5 swiper 插件使用",[1886,146073,146074,146077,146080],{},[854,146075,146076],{},"下载需要的css和js文件html页面中 引入相关文件",[854,146078,146079],{},"官网找到类似案例，复制html结构，css样式 js 语法",[854,146081,146082],{},"根据需求定制修改模块",[2212,146084],{"style":127052,"src":146085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,146087,146088],{},"解压后将这两部分放到项目中",[2212,146090],{"style":127052,"src":146091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,146093,146094],{},"这个插件可以帮助我们实现轮播图效果",[14,146096,146097],{},"用法：",[2212,146099],{"style":127052,"src":146100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,146102,146103],{},"找到自己喜欢的",[2212,146105],{"style":127052,"src":146106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,146108,146109],{},"右键，查看网页源代码",[2212,146111],{"style":127052,"src":146112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,146114,146115],{},"复制人家的结构内容",[14,146117,146118],{},"然后去看API文档：",[2212,146120],{"style":127052,"src":146121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,146123,146124],{},"可以看看如何修改样式",[14,146126,146127],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[807,146129,146130],{},"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":46,"depth":46,"links":146132},[146133,146138,146142,146147,146152],{"id":144933,"depth":46,"text":144934,"children":146134},[146135,146136,146137],{"id":144937,"depth":78,"text":144938},{"id":144947,"depth":78,"text":144948},{"id":145042,"depth":78,"text":145043},{"id":145057,"depth":46,"text":145058,"children":146139},[146140,146141],{"id":145079,"depth":78,"text":145080},{"id":145095,"depth":78,"text":145096},{"id":145170,"depth":46,"text":145171,"children":146143},[146144,146145,146146],{"id":145183,"depth":78,"text":145184},{"id":145407,"depth":78,"text":145408},{"id":145414,"depth":78,"text":145415},{"id":145555,"depth":46,"text":145556,"children":146148},[146149,146150,146151],{"id":145582,"depth":78,"text":145583},{"id":145645,"depth":78,"text":145646},{"id":145990,"depth":78,"text":145991},{"id":146070,"depth":46,"text":146071},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144925,"description":823},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146159,"title":146160,"body":146161,"description":823,"extension":824,"meta":146381,"navigation":193,"path":146382,"seo":146383,"stem":146384,"__hash__":146385},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146162,"toc":146377},[146163,146166,146170,146173,146188,146193,146196,146201,146236,146241,146253,146258,146271,146276,146293,146298,146318,146323,146341,146344,146347,146350,146353,146357,146360,146363,146366,146369,146372,146375],[10,146164,146160],{"id":146165},"_22-代码提交与新型相对单位",[21,146167,146169],{"id":146168},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,146171,146172],{},"法1：",[851,146174,146175,146182,146185],{},[854,146176,146177,146178],{},"登录网站注册：",[50,146179,146180],{"href":146180,"rel":146181},"https:\u002F\u002Fgitee.com\u002F",[24609],[854,146183,146184],{},"码云创建新的仓库",[854,146186,146187],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1886,146189,146190],{},[854,146191,146192],{},"在网站根目录右键-- Git Bash Here",[2212,146194],{"style":127052,"src":146195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1886,146197,146198],{},[854,146199,146200],{},"如果是第一次利用git提交，请配置好全局选项",[26,146202,146204],{"className":117940,"code":146203,"language":117942,"meta":31,"style":31},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[33,146205,146206,146222],{"__ignoreMap":31},[36,146207,146208,146211,146213,146216,146219],{"class":38,"line":39},[36,146209,146210],{"class":2713},"git",[36,146212,120363],{"class":998},[36,146214,146215],{"class":60}," --global",[36,146217,146218],{"class":998}," user.name",[36,146220,146221],{"class":998}," \"你的名字\"\n",[36,146223,146224,146226,146228,146230,146233],{"class":38,"line":46},[36,146225,146210],{"class":2713},[36,146227,120363],{"class":998},[36,146229,146215],{"class":60},[36,146231,146232],{"class":998}," user.email",[36,146234,146235],{"class":998}," \"你的邮箱\"\n",[1886,146237,146238],{},[854,146239,146240],{},"初始化仓库",[26,146242,146244],{"className":117940,"code":146243,"language":117942,"meta":31,"style":31},"git init\n",[33,146245,146246],{"__ignoreMap":31},[36,146247,146248,146250],{"class":38,"line":39},[36,146249,146210],{"class":2713},[36,146251,146252],{"class":998}," init\n",[1886,146254,146255],{},[854,146256,146257],{},"把本地文件放到暂存区",[26,146259,146261],{"className":117940,"code":146260,"language":117942,"meta":31,"style":31},"git add .\n",[33,146262,146263],{"__ignoreMap":31},[36,146264,146265,146267,146269],{"class":38,"line":39},[36,146266,146210],{"class":2713},[36,146268,5957],{"class":998},[36,146270,29486],{"class":998},[1886,146272,146273],{},[854,146274,146275],{},"把本地文件放到本地仓库里面",[26,146277,146279],{"className":117940,"code":146278,"language":117942,"meta":31,"style":31},"git commit -m \"first commit\"\n",[33,146280,146281],{"__ignoreMap":31},[36,146282,146283,146285,146288,146290],{"class":38,"line":39},[36,146284,146210],{"class":2713},[36,146286,146287],{"class":998}," commit",[36,146289,101526],{"class":60},[36,146291,146292],{"class":998}," \"first commit\"\n",[1886,146294,146295],{},[854,146296,146297],{},"链接远程仓库",[26,146299,146301],{"className":117940,"code":146300,"language":117942,"meta":31,"style":31},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[33,146302,146303],{"__ignoreMap":31},[36,146304,146305,146307,146310,146312,146315],{"class":38,"line":39},[36,146306,146210],{"class":2713},[36,146308,146309],{"class":998}," remote",[36,146311,5957],{"class":998},[36,146313,146314],{"class":998}," origin",[36,146316,146317],{"class":998}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1886,146319,146320],{},[854,146321,146322],{},"把本地仓库的文件推送到远程仓库 push",[26,146324,146326],{"className":117940,"code":146325,"language":117942,"meta":31,"style":31},"git push -u origin master\n",[33,146327,146328],{"__ignoreMap":31},[36,146329,146330,146332,146334,146336,146338],{"class":38,"line":39},[36,146331,146210],{"class":2713},[36,146333,29761],{"class":998},[36,146335,29035],{"class":60},[36,146337,146314],{"class":998},[36,146339,146340],{"class":998}," master\n",[2212,146342],{"style":127052,"src":146343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,146345,146346],{},"上方方法暂未实现，后边学完git后在整",[14,146348,146349],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[2212,146351],{"style":127052,"src":146352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[21,146354,146356],{"id":146355},"_222-新型相对单位","22.2 新型相对单位",[2212,146358],{"style":127052,"src":146359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[2212,146361],{"style":127052,"src":146362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,146364,146365],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,146367,146368],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[2212,146370],{"style":127052,"src":146371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,146373,146374],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[807,146376,24702],{},{"title":31,"searchDepth":46,"depth":46,"links":146378},[146379,146380],{"id":146168,"depth":46,"text":146169},{"id":146355,"depth":46,"text":146356},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146160,"description":823},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146387,"title":146388,"body":146389,"description":146393,"extension":824,"meta":146394,"navigation":193,"path":146395,"seo":146396,"stem":146397,"__hash__":146398},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146390,"toc":146391},[],{"title":31,"searchDepth":46,"depth":46,"links":146392},[],"自己正经开始学编程的第一门语言！",{"category":93581},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146388,"description":146393},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146400,"title":146401,"body":146402,"description":823,"extension":824,"meta":147549,"navigation":193,"path":147550,"seo":147551,"stem":147552,"__hash__":147553},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146403,"toc":147525},[146404,146407,146411,146414,146417,146442,146445,146451,146455,146458,146485,146488,146528,146531,146543,146546,146552,146556,146560,146587,146604,146611,146615,146618,146644,146647,146651,146654,146694,146697,146714,146720,146724,146729,146773,146776,146794,146797,146865,146869,146876,146879,146894,146897,146906,146909,146920,146923,146932,146935,146952,146955,146970,146974,146978,146981,146983,147003,147007,147010,147013,147024,147027,147033,147037,147043,147070,147073,147085,147088,147099,147102,147108,147112,147118,147168,147171,147213,147216,147249,147252,147286,147290,147293,147313,147316,147352,147355,147368,147372,147376,147382,147385,147398,147402,147405,147411,147414,147418,147421,147424,147473,147477,147493,147499,147506,147512,147522],[10,146405,146401],{"id":146406},"_1-python环境与第一个程序",[21,146408,146410],{"id":146409},"_11-什么是python","1.1 什么是Python",[14,146412,146413],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,146415,146416],{},"理解 Python 时抓住三个关键词：",[851,146418,146419,146422,146425],{},[854,146420,146421],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[854,146423,146424],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[854,146426,146427,146428,1104,146431,1104,146434,1104,146437,1104,146439,29130],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[33,146429,146430],{},"os",[33,146432,146433],{},"sys",[33,146435,146436],{},"json",[33,146438,58602],{},[33,146440,146441],{},"datetime",[14,146443,146444],{},"Python 程序的运行链路：",[26,146446,146449],{"className":146447,"code":146448,"language":5935,"meta":31},[5933],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[33,146450,146448],{"__ignoreMap":31},[21,146452,146454],{"id":146453},"_12-python解释器","1.2 Python解释器",[14,146456,146457],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[26,146459,146461],{"className":24566,"code":146460,"language":24568,"meta":31,"style":31},"python --version\npython3 --version\npython\npython3\n",[33,146462,146463,146469,146475,146480],{"__ignoreMap":31},[36,146464,146465,146467],{"class":38,"line":39},[36,146466,30],{"class":2713},[36,146468,27038],{"class":60},[36,146470,146471,146473],{"class":38,"line":46},[36,146472,101523],{"class":2713},[36,146474,27038],{"class":60},[36,146476,146477],{"class":38,"line":78},[36,146478,146479],{"class":2713},"python\n",[36,146481,146482],{"class":38,"line":125},[36,146483,146484],{"class":2713},"python3\n",[14,146486,146487],{},"进入交互模式后，可以直接输入表达式：",[26,146489,146491],{"className":28,"code":146490,"language":30,"meta":31,"style":31},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[33,146492,146493,146504,146509,146523],{"__ignoreMap":31},[36,146494,146495,146498,146500,146502],{"class":38,"line":39},[36,146496,146497],{"class":53},">>>",[36,146499,25863],{"class":60},[36,146501,46308],{"class":53},[36,146503,48465],{"class":60},[36,146505,146506],{"class":38,"line":46},[36,146507,146508],{"class":60},"3\n",[36,146510,146511,146513,146516,146518,146521],{"class":38,"line":78},[36,146512,146497],{"class":53},[36,146514,146515],{"class":60}," print",[36,146517,901],{"class":49},[36,146519,146520],{"class":998},"\"hello python\"",[36,146522,75],{"class":49},[36,146524,146525],{"class":38,"line":125},[36,146526,146527],{"class":49},"hello python\n",[14,146529,146530],{},"退出交互模式：",[26,146532,146534],{"className":28,"code":146533,"language":30,"meta":31,"style":31},"exit()\n",[33,146535,146536],{"__ignoreMap":31},[36,146537,146538,146541],{"class":38,"line":39},[36,146539,146540],{"class":60},"exit",[36,146542,2726],{"class":49},[14,146544,146545],{},"或使用快捷键：",[26,146547,146550],{"className":146548,"code":146549,"language":5935,"meta":31},[5933],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[33,146551,146549],{"__ignoreMap":31},[21,146553,146555],{"id":146554},"_13-安装python","1.3 安装Python",[868,146557,146559],{"id":146558},"_131-windows安装","1.3.1 Windows安装",[851,146561,146562,146569,146572,146578,146584],{},[854,146563,146564,146565],{},"打开 Python 官网：",[50,146566,146567],{"href":146567,"rel":146568},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24609],[854,146570,146571],{},"下载 Windows Installer。",[854,146573,146574,146575,29130],{},"安装时勾选 ",[33,146576,146577],{},"Add Python to PATH",[854,146579,146580,146581,29130],{},"点击 ",[33,146582,146583],{},"Install Now",[854,146585,146586],{},"安装完成后打开命令提示符验证：",[26,146588,146590],{"className":24566,"code":146589,"language":24568,"meta":31,"style":31},"python --version\npip --version\n",[33,146591,146592,146598],{"__ignoreMap":31},[36,146593,146594,146596],{"class":38,"line":39},[36,146595,30],{"class":2713},[36,146597,27038],{"class":60},[36,146599,146600,146602],{"class":38,"line":46},[36,146601,24575],{"class":2713},[36,146603,27038],{"class":60},[14,146605,146606,146607,146610],{},"如果提示 ",[33,146608,146609],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[868,146612,146614],{"id":146613},"_132-macos安装","1.3.2 macOS安装",[14,146616,146617],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[26,146619,146621],{"className":24566,"code":146620,"language":24568,"meta":31,"style":31},"brew install python\npython3 --version\npip3 --version\n",[33,146622,146623,146632,146638],{"__ignoreMap":31},[36,146624,146625,146628,146630],{"class":38,"line":39},[36,146626,146627],{"class":2713},"brew",[36,146629,24578],{"class":998},[36,146631,124962],{"class":998},[36,146633,146634,146636],{"class":38,"line":46},[36,146635,101523],{"class":2713},[36,146637,27038],{"class":60},[36,146639,146640,146642],{"class":38,"line":78},[36,146641,120344],{"class":2713},[36,146643,27038],{"class":60},[14,146645,146646],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[868,146648,146650],{"id":146649},"_133-linux安装","1.3.3 Linux安装",[14,146652,146653],{},"Ubuntu\u002FDebian：",[26,146655,146657],{"className":24566,"code":146656,"language":24568,"meta":31,"style":31},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[33,146658,146659,146667,146682,146688],{"__ignoreMap":31},[36,146660,146661,146663,146665],{"class":38,"line":39},[36,146662,25321],{"class":2713},[36,146664,117961],{"class":998},[36,146666,26987],{"class":998},[36,146668,146669,146671,146673,146675,146677,146679],{"class":38,"line":46},[36,146670,25321],{"class":2713},[36,146672,117961],{"class":998},[36,146674,24578],{"class":998},[36,146676,105047],{"class":998},[36,146678,101442],{"class":998},[36,146680,146681],{"class":998}," python3-venv\n",[36,146683,146684,146686],{"class":38,"line":78},[36,146685,101523],{"class":2713},[36,146687,27038],{"class":60},[36,146689,146690,146692],{"class":38,"line":125},[36,146691,120344],{"class":2713},[36,146693,27038],{"class":60},[14,146695,146696],{},"Fedora：",[26,146698,146700],{"className":24566,"code":146699,"language":24568,"meta":31,"style":31},"sudo dnf install python3 python3-pip\n",[33,146701,146702],{"__ignoreMap":31},[36,146703,146704,146706,146708,146710,146712],{"class":38,"line":39},[36,146705,25321],{"class":2713},[36,146707,27060],{"class":998},[36,146709,24578],{"class":998},[36,146711,105047],{"class":998},[36,146713,120409],{"class":998},[14,146715,146716,146717,146719],{},"Linux 上通常使用 ",[33,146718,101523],{}," 命令，避免和系统旧版本 Python 冲突。",[21,146721,146723],{"id":146722},"_14-pip包管理器","1.4 pip包管理器",[14,146725,146726,146728],{},[33,146727,24575],{}," 用来安装第三方库。",[26,146730,146732],{"className":24566,"code":146731,"language":24568,"meta":31,"style":31},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[33,146733,146734,146743,146752,146760,146766],{"__ignoreMap":31},[36,146735,146736,146738,146740],{"class":38,"line":39},[36,146737,24575],{"class":2713},[36,146739,24578],{"class":998},[36,146741,146742],{"class":998}," requests\n",[36,146744,146745,146747,146750],{"class":38,"line":46},[36,146746,24575],{"class":2713},[36,146748,146749],{"class":998}," uninstall",[36,146751,146742],{"class":998},[36,146753,146754,146756,146758],{"class":38,"line":78},[36,146755,24575],{"class":2713},[36,146757,118218],{"class":998},[36,146759,146742],{"class":998},[36,146761,146762,146764],{"class":38,"line":125},[36,146763,24575],{"class":2713},[36,146765,119599],{"class":998},[36,146767,146768,146770],{"class":38,"line":131},[36,146769,24575],{"class":2713},[36,146771,146772],{"class":998}," freeze\n",[14,146774,146775],{},"国内网络较慢时可以临时使用镜像：",[26,146777,146779],{"className":24566,"code":146778,"language":24568,"meta":31,"style":31},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[33,146780,146781],{"__ignoreMap":31},[36,146782,146783,146785,146787,146790,146792],{"class":38,"line":39},[36,146784,24575],{"class":2713},[36,146786,24578],{"class":998},[36,146788,146789],{"class":998}," requests",[36,146791,27175],{"class":60},[36,146793,120372],{"class":998},[14,146795,146796],{},"常见第三方库：",[1031,146798,146799,146808],{},[1034,146800,146801],{},[1037,146802,146803,146806],{},[1040,146804,146805],{},"库",[1040,146807,103340],{},[1078,146809,146810,146818,146825,146833,146841,146849,146857],{},[1037,146811,146812,146815],{},[1083,146813,146814],{},"requests",[1083,146816,146817],{},"网络请求",[1037,146819,146820,146822],{},[1083,146821,101270],{},[1083,146823,146824],{},"数值计算",[1037,146826,146827,146830],{},[1083,146828,146829],{},"pandas",[1083,146831,146832],{},"表格数据处理",[1037,146834,146835,146838],{},[1083,146836,146837],{},"matplotlib",[1083,146839,146840],{},"绘图",[1037,146842,146843,146846],{},[1083,146844,146845],{},"pyecharts",[1083,146847,146848],{},"ECharts 图表",[1037,146850,146851,146854],{},[1083,146852,146853],{},"flask",[1083,146855,146856],{},"Web 后端",[1037,146858,146859,146862],{},[1083,146860,146861],{},"pytest",[1083,146863,146864],{},"自动化测试",[21,146866,146868],{"id":146867},"_15-虚拟环境","1.5 虚拟环境",[14,146870,146871,146872,146875],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[33,146873,146874],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146877,146878],{},"创建虚拟环境：",[26,146880,146882],{"className":24566,"code":146881,"language":24568,"meta":31,"style":31},"python -m venv .venv\n",[33,146883,146884],{"__ignoreMap":31},[36,146885,146886,146888,146890,146892],{"class":38,"line":39},[36,146887,30],{"class":2713},[36,146889,101526],{"class":60},[36,146891,101529],{"class":998},[36,146893,101532],{"class":998},[14,146895,146896],{},"Windows 激活：",[26,146898,146900],{"className":24566,"code":146899,"language":24568,"meta":31,"style":31},".venv\\Scripts\\activate\n",[33,146901,146902],{"__ignoreMap":31},[36,146903,146904],{"class":38,"line":39},[36,146905,146899],{"class":2713},[14,146907,146908],{},"macOS\u002FLinux 激活：",[26,146910,146912],{"className":24566,"code":146911,"language":24568,"meta":31,"style":31},"source .venv\u002Fbin\u002Factivate\n",[33,146913,146914],{"__ignoreMap":31},[36,146915,146916,146918],{"class":38,"line":39},[36,146917,101537],{"class":60},[36,146919,101540],{"class":998},[14,146921,146922],{},"退出虚拟环境：",[26,146924,146926],{"className":24566,"code":146925,"language":24568,"meta":31,"style":31},"deactivate\n",[33,146927,146928],{"__ignoreMap":31},[36,146929,146930],{"class":38,"line":39},[36,146931,146925],{"class":2713},[14,146933,146934],{},"保存依赖：",[26,146936,146938],{"className":24566,"code":146937,"language":24568,"meta":31,"style":31},"pip freeze > requirements.txt\n",[33,146939,146940],{"__ignoreMap":31},[36,146941,146942,146944,146947,146949],{"class":38,"line":39},[36,146943,24575],{"class":2713},[36,146945,146946],{"class":998}," freeze",[36,146948,26967],{"class":53},[36,146950,146951],{"class":998}," requirements.txt\n",[14,146953,146954],{},"安装依赖：",[26,146956,146958],{"className":24566,"code":146957,"language":24568,"meta":31,"style":31},"pip install -r requirements.txt\n",[33,146959,146960],{"__ignoreMap":31},[36,146961,146962,146964,146966,146968],{"class":38,"line":39},[36,146963,24575],{"class":2713},[36,146965,24578],{"class":998},[36,146967,120283],{"class":60},[36,146969,146951],{"class":998},[21,146971,146973],{"id":146972},"_16-开发工具","1.6 开发工具",[868,146975,146977],{"id":146976},"_161-pycharm","1.6.1 PyCharm",[14,146979,146980],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146982,122706],{},[851,146984,146985,146988,146991,146997,147000],{},[854,146986,146987],{},"New Project：创建项目。",[854,146989,146990],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[854,146992,146993,146994,126627],{},"New Python File：创建 ",[33,146995,146996],{},".py",[854,146998,146999],{},"Run：运行当前文件。",[854,147001,147002],{},"Debug：断点调试。",[868,147004,147006],{"id":147005},"_162-vs-code","1.6.2 VS Code",[14,147008,147009],{},"VS Code 轻量，适合后续多语言开发。",[14,147011,147012],{},"建议安装插件：",[851,147014,147015,147018,147021],{},[854,147016,147017],{},"Python。",[854,147019,147020],{},"Pylance。",[854,147022,147023],{},"Jupyter。",[14,147025,147026],{},"选择解释器：",[26,147028,147031],{"className":147029,"code":147030,"language":5935,"meta":31},[5933],"Ctrl + Shift + P -> Python: Select Interpreter\n",[33,147032,147030],{"__ignoreMap":31},[21,147034,147036],{"id":147035},"_17-第一个python程序","1.7 第一个Python程序",[14,147038,147039,147040,25363],{},"创建文件 ",[33,147041,147042],{},"hello.py",[26,147044,147046],{"className":28,"code":147045,"language":30,"meta":31,"style":31},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[33,147047,147048,147059],{"__ignoreMap":31},[36,147049,147050,147052,147054,147057],{"class":38,"line":39},[36,147051,199],{"class":60},[36,147053,901],{"class":49},[36,147055,147056],{"class":998},"\"Hello World\"",[36,147058,75],{"class":49},[36,147060,147061,147063,147065,147068],{"class":38,"line":46},[36,147062,199],{"class":60},[36,147064,901],{"class":49},[36,147066,147067],{"class":998},"\"你好，Python\"",[36,147069,75],{"class":49},[14,147071,147072],{},"在终端运行：",[26,147074,147076],{"className":24566,"code":147075,"language":24568,"meta":31,"style":31},"python hello.py\n",[33,147077,147078],{"__ignoreMap":31},[36,147079,147080,147082],{"class":38,"line":39},[36,147081,30],{"class":2713},[36,147083,147084],{"class":998}," hello.py\n",[14,147086,147087],{},"或：",[26,147089,147091],{"className":24566,"code":147090,"language":24568,"meta":31,"style":31},"python3 hello.py\n",[33,147092,147093],{"__ignoreMap":31},[36,147094,147095,147097],{"class":38,"line":39},[36,147096,101523],{"class":2713},[36,147098,147084],{"class":998},[14,147100,147101],{},"输出：",[26,147103,147106],{"className":147104,"code":147105,"language":5935,"meta":31},[5933],"Hello World\n你好，Python\n",[33,147107,147105],{"__ignoreMap":31},[21,147109,147111],{"id":147110},"_18-print函数","1.8 print函数",[14,147113,147114,147117],{},[33,147115,147116],{},"print()"," 用来输出内容。",[26,147119,147121],{"className":28,"code":147120,"language":30,"meta":31,"style":31},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[33,147122,147123,147133,147143,147153],{"__ignoreMap":31},[36,147124,147125,147127,147129,147131],{"class":38,"line":39},[36,147126,199],{"class":60},[36,147128,901],{"class":49},[36,147130,6591],{"class":998},[36,147132,75],{"class":49},[36,147134,147135,147137,147139,147141],{"class":38,"line":46},[36,147136,199],{"class":60},[36,147138,901],{"class":49},[36,147140,67],{"class":60},[36,147142,75],{"class":49},[36,147144,147145,147147,147149,147151],{"class":38,"line":78},[36,147146,199],{"class":60},[36,147148,901],{"class":49},[36,147150,946],{"class":60},[36,147152,75],{"class":49},[36,147154,147155,147157,147159,147162,147164,147166],{"class":38,"line":125},[36,147156,199],{"class":60},[36,147158,901],{"class":49},[36,147160,147161],{"class":998},"\"年龄:\"",[36,147163,154],{"class":49},[36,147165,1532],{"class":60},[36,147167,75],{"class":49},[14,147169,147170],{},"多个内容用逗号隔开，默认中间加空格：",[26,147172,147174],{"className":28,"code":147173,"language":30,"meta":31,"style":31},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[33,147175,147176,147186,147196],{"__ignoreMap":31},[36,147177,147178,147181,147183],{"class":38,"line":39},[36,147179,147180],{"class":49},"name ",[36,147182,54],{"class":53},[36,147184,147185],{"class":998}," \"张三\"\n",[36,147187,147188,147191,147193],{"class":38,"line":46},[36,147189,147190],{"class":49},"age ",[36,147192,54],{"class":53},[36,147194,147195],{"class":60}," 18\n",[36,147197,147198,147200,147202,147205,147208,147210],{"class":38,"line":78},[36,147199,199],{"class":60},[36,147201,901],{"class":49},[36,147203,147204],{"class":998},"\"姓名:\"",[36,147206,147207],{"class":49},", name, ",[36,147209,147161],{"class":998},[36,147211,147212],{"class":49},", age)\n",[14,147214,147215],{},"修改分隔符：",[26,147217,147219],{"className":28,"code":147218,"language":30,"meta":31,"style":31},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[33,147220,147221],{"__ignoreMap":31},[36,147222,147223,147225,147227,147230,147232,147234,147236,147238,147240,147243,147245,147247],{"class":38,"line":39},[36,147224,199],{"class":60},[36,147226,901],{"class":49},[36,147228,147229],{"class":998},"\"2024\"",[36,147231,154],{"class":49},[36,147233,55058],{"class":998},[36,147235,154],{"class":49},[36,147237,55058],{"class":998},[36,147239,154],{"class":49},[36,147241,147242],{"class":416},"sep",[36,147244,54],{"class":53},[36,147246,33225],{"class":998},[36,147248,75],{"class":49},[14,147250,147251],{},"修改结尾符：",[26,147253,147255],{"className":28,"code":147254,"language":30,"meta":31,"style":31},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[33,147256,147257,147275],{"__ignoreMap":31},[36,147258,147259,147261,147263,147265,147267,147269,147271,147273],{"class":38,"line":39},[36,147260,199],{"class":60},[36,147262,901],{"class":49},[36,147264,6591],{"class":998},[36,147266,154],{"class":49},[36,147268,46543],{"class":416},[36,147270,54],{"class":53},[36,147272,5108],{"class":998},[36,147274,75],{"class":49},[36,147276,147277,147279,147281,147284],{"class":38,"line":46},[36,147278,199],{"class":60},[36,147280,901],{"class":49},[36,147282,147283],{"class":998},"\"python\"",[36,147285,75],{"class":49},[21,147287,147289],{"id":147288},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,147291,147292],{},"交互运行适合临时验证：",[26,147294,147296],{"className":28,"code":147295,"language":30,"meta":31,"style":31},">>> 10 * 3\n30\n",[33,147297,147298,147308],{"__ignoreMap":31},[36,147299,147300,147302,147304,147306],{"class":38,"line":39},[36,147301,146497],{"class":53},[36,147303,2788],{"class":60},[36,147305,7265],{"class":53},[36,147307,120680],{"class":60},[36,147309,147310],{"class":38,"line":46},[36,147311,147312],{"class":60},"30\n",[14,147314,147315],{},"脚本运行适合保存程序：",[26,147317,147319],{"className":28,"code":147318,"language":30,"meta":31,"style":31},"price = 8\ncount = 5\nprint(price * count)\n",[33,147320,147321,147331,147340],{"__ignoreMap":31},[36,147322,147323,147326,147328],{"class":38,"line":39},[36,147324,147325],{"class":49},"price ",[36,147327,54],{"class":53},[36,147329,147330],{"class":60}," 8\n",[36,147332,147333,147336,147338],{"class":38,"line":46},[36,147334,147335],{"class":49},"count ",[36,147337,54],{"class":53},[36,147339,55169],{"class":60},[36,147341,147342,147344,147347,147349],{"class":38,"line":78},[36,147343,199],{"class":60},[36,147345,147346],{"class":49},"(price ",[36,147348,1339],{"class":53},[36,147350,147351],{"class":49}," count)\n",[14,147353,147354],{},"实际学习中推荐：",[851,147356,147357,147360,147365],{},[854,147358,147359],{},"临时试一个语法，用交互模式。",[854,147361,147362,147363,126627],{},"写完整练习，用 ",[33,147364,146996],{},[854,147366,147367],{},"写项目，用独立目录和虚拟环境。",[21,147369,147371],{"id":147370},"_110-常见错误","1.10 常见错误",[868,147373,147375],{"id":147374},"_1101-命令找不到","1.10.1 命令找不到",[26,147377,147380],{"className":147378,"code":147379,"language":5935,"meta":31},[5933],"python: command not found\n",[33,147381,147379],{"__ignoreMap":31},[14,147383,147384],{},"原因：",[851,147386,147387,147390,147393],{},[854,147388,147389],{},"没安装 Python。",[854,147391,147392],{},"PATH 没配置。",[854,147394,147395,147396,29130],{},"Linux\u002FmacOS 应该使用 ",[33,147397,101523],{},[868,147399,147401],{"id":147400},"_1102-文件名冲突","1.10.2 文件名冲突",[14,147403,147404],{},"不要把文件命名为：",[26,147406,147409],{"className":147407,"code":147408,"language":5935,"meta":31},[5933],"random.py\njson.py\ntime.py\nrequests.py\n",[33,147410,147408],{"__ignoreMap":31},[14,147412,147413],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[868,147415,147417],{"id":147416},"_1103-中文乱码","1.10.3 中文乱码",[14,147419,147420],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,147422,147423],{},"如果读写文件出现乱码，要明确指定编码：",[26,147425,147427],{"className":28,"code":147426,"language":30,"meta":31,"style":31},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[33,147428,147429,147463],{"__ignoreMap":31},[36,147430,147431,147433,147436,147438,147441,147443,147446,147448,147451,147453,147456,147458,147460],{"class":38,"line":39},[36,147432,108477],{"class":53},[36,147434,147435],{"class":60}," open",[36,147437,901],{"class":49},[36,147439,147440],{"class":998},"\"data.txt\"",[36,147442,154],{"class":49},[36,147444,147445],{"class":998},"\"r\"",[36,147447,154],{"class":49},[36,147449,147450],{"class":416},"encoding",[36,147452,54],{"class":53},[36,147454,147455],{"class":998},"\"utf-8\"",[36,147457,14458],{"class":49},[36,147459,32125],{"class":53},[36,147461,147462],{"class":49}," f:\n",[36,147464,147465,147468,147470],{"class":38,"line":46},[36,147466,147467],{"class":49},"    content ",[36,147469,54],{"class":53},[36,147471,147472],{"class":49}," f.read()\n",[21,147474,147476],{"id":147475},"_111-本章练习","1.11 本章练习",[851,147478,147479,147482,147488],{},[854,147480,147481],{},"安装 Python，并在终端输出版本号。",[854,147483,147484,147485,147487],{},"新建 ",[33,147486,147042],{},"，输出自己的姓名、年龄、学习目标。",[854,147489,105010,147490,147492],{},[33,147491,147116],{}," 输出下面格式：",[26,147494,147497],{"className":147495,"code":147496,"language":5935,"meta":31},[5933],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[33,147498,147496],{"__ignoreMap":31},[851,147500,147501],{"start":125},[854,147502,105010,147503,147505],{},[33,147504,147242],{}," 输出日期：",[26,147507,147510],{"className":147508,"code":147509,"language":5935,"meta":31},[5933],"2024-10-10\n",[33,147511,147509],{"__ignoreMap":31},[851,147513,147514],{"start":131},[854,147515,105010,147516,147518,147519,147521],{},[33,147517,46543],{}," 让两次 ",[33,147520,147116],{}," 输出在同一行。",[807,147523,147524],{},"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":46,"depth":46,"links":147526},[147527,147528,147529,147534,147535,147536,147540,147541,147542,147543,147548],{"id":146409,"depth":46,"text":146410},{"id":146453,"depth":46,"text":146454},{"id":146554,"depth":46,"text":146555,"children":147530},[147531,147532,147533],{"id":146558,"depth":78,"text":146559},{"id":146613,"depth":78,"text":146614},{"id":146649,"depth":78,"text":146650},{"id":146722,"depth":46,"text":146723},{"id":146867,"depth":46,"text":146868},{"id":146972,"depth":46,"text":146973,"children":147537},[147538,147539],{"id":146976,"depth":78,"text":146977},{"id":147005,"depth":78,"text":147006},{"id":147035,"depth":46,"text":147036},{"id":147110,"depth":46,"text":147111},{"id":147288,"depth":46,"text":147289},{"id":147370,"depth":46,"text":147371,"children":147544},[147545,147546,147547],{"id":147374,"depth":78,"text":147375},{"id":147400,"depth":78,"text":147401},{"id":147416,"depth":78,"text":147417},{"id":147475,"depth":46,"text":147476},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146401,"description":823},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147555,"title":147556,"body":147557,"description":823,"extension":824,"meta":149961,"navigation":193,"path":149962,"seo":149963,"stem":149964,"__hash__":149965},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147558,"toc":149946},[147559,147562,147566,147569,147572,147589,147592,147634,147637,147641,147644,147647,147684,147687,147721,147724,147816,147820,147834,147837,147864,147867,147871,147974,147981,147984,148001,148005,148012,148201,148204,148277,148281,148284,148368,148371,148403,148407,148611,148614,148618,148624,148726,148729,148985,148989,148992,148995,149009,149011,149197,149201,149563,149569,149573,149576,149700,149703,149882,149885,149889,149922,149926,149943],[10,147560,147556],{"id":147561},"_10-json与pyecharts折线图",[21,147563,147565],{"id":147564},"_101-数据可视化","10.1 数据可视化",[14,147567,147568],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,147570,147571],{},"常见图表：",[851,147573,147574,147577,147580,147583,147586],{},[854,147575,147576],{},"折线图：看趋势。",[854,147578,147579],{},"柱状图：看分类对比。",[854,147581,147582],{},"饼图：看占比。",[854,147584,147585],{},"地图：看地域分布。",[854,147587,147588],{},"散点图：看两个变量之间的关系。",[14,147590,147591],{},"Python 可视化常用库：",[1031,147593,147594,147602],{},[1034,147595,147596],{},[1037,147597,147598,147600],{},[1040,147599,146805],{},[1040,147601,24484],{},[1078,147603,147604,147611,147619,147626],{},[1037,147605,147606,147608],{},[1083,147607,146837],{},[1083,147609,147610],{},"基础、经典、可定制",[1037,147612,147613,147616],{},[1083,147614,147615],{},"seaborn",[1083,147617,147618],{},"统计图表更美观",[1037,147620,147621,147623],{},[1083,147622,146845],{},[1083,147624,147625],{},"生成交互式网页图表",[1037,147627,147628,147631],{},[1083,147629,147630],{},"plotly",[1083,147632,147633],{},"交互图表能力强",[14,147635,147636],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[21,147638,147640],{"id":147639},"_102-json回顾","10.2 JSON回顾",[14,147642,147643],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,147645,147646],{},"Python 字典：",[26,147648,147650],{"className":28,"code":147649,"language":30,"meta":31,"style":31},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[33,147651,147652,147660,147671,147680],{"__ignoreMap":31},[36,147653,147654,147656,147658],{"class":38,"line":39},[36,147655,102302],{"class":49},[36,147657,54],{"class":53},[36,147659,16316],{"class":49},[36,147661,147662,147665,147667,147669],{"class":38,"line":46},[36,147663,147664],{"class":998},"    \"name\"",[36,147666,52179],{"class":49},[36,147668,70011],{"class":998},[36,147670,32208],{"class":49},[36,147672,147673,147676,147678],{"class":38,"line":78},[36,147674,147675],{"class":998},"    \"value\"",[36,147677,52179],{"class":49},[36,147679,98102],{"class":60},[36,147681,147682],{"class":38,"line":125},[36,147683,2315],{"class":49},[14,147685,147686],{},"JSON 字符串：",[26,147688,147691],{"className":147689,"code":147690,"language":146436,"meta":31,"style":31},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[33,147692,147693,147697,147708,147717],{"__ignoreMap":31},[36,147694,147695],{"class":38,"line":39},[36,147696,2296],{"class":49},[36,147698,147699,147702,147704,147706],{"class":38,"line":46},[36,147700,147701],{"class":60},"  \"name\"",[36,147703,52179],{"class":49},[36,147705,70011],{"class":998},[36,147707,32208],{"class":49},[36,147709,147710,147713,147715],{"class":38,"line":78},[36,147711,147712],{"class":60},"  \"value\"",[36,147714,52179],{"class":49},[36,147716,98102],{"class":60},[36,147718,147719],{"class":38,"line":125},[36,147720,2315],{"class":49},[14,147722,147723],{},"Python 与 JSON 的转换：",[26,147725,147727],{"className":28,"code":147726,"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,147728,147729,147736,147740,147765,147769,147788,147795,147799,147809],{"__ignoreMap":31},[36,147730,147731,147733],{"class":38,"line":39},[36,147732,31135],{"class":53},[36,147734,147735],{"class":49}," json\n",[36,147737,147738],{"class":38,"line":46},[36,147739,194],{"emptyLinePlaceholder":193},[36,147741,147742,147744,147746,147748,147750,147752,147754,147756,147759,147761,147763],{"class":38,"line":78},[36,147743,102302],{"class":49},[36,147745,54],{"class":53},[36,147747,5197],{"class":49},[36,147749,63421],{"class":998},[36,147751,52179],{"class":49},[36,147753,70011],{"class":998},[36,147755,154],{"class":49},[36,147757,147758],{"class":998},"\"value\"",[36,147760,52179],{"class":49},[36,147762,67],{"class":60},[36,147764,2315],{"class":49},[36,147766,147767],{"class":38,"line":125},[36,147768,194],{"emptyLinePlaceholder":193},[36,147770,147771,147774,147776,147779,147782,147784,147786],{"class":38,"line":131},[36,147772,147773],{"class":49},"json_text ",[36,147775,54],{"class":53},[36,147777,147778],{"class":49}," json.dumps(data, ",[36,147780,147781],{"class":416},"ensure_ascii",[36,147783,54],{"class":53},[36,147785,34729],{"class":60},[36,147787,75],{"class":49},[36,147789,147790,147792],{"class":38,"line":396},[36,147791,199],{"class":60},[36,147793,147794],{"class":49},"(json_text)\n",[36,147796,147797],{"class":38,"line":407},[36,147798,194],{"emptyLinePlaceholder":193},[36,147800,147801,147804,147806],{"class":38,"line":2061},[36,147802,147803],{"class":49},"new_data ",[36,147805,54],{"class":53},[36,147807,147808],{"class":49}," json.loads(json_text)\n",[36,147810,147811,147813],{"class":38,"line":2067},[36,147812,199],{"class":60},[36,147814,147815],{"class":49},"(new_data)\n",[21,147817,147819],{"id":147818},"_103-安装pyecharts","10.3 安装pyecharts",[26,147821,147823],{"className":24566,"code":147822,"language":24568,"meta":31,"style":31},"pip install pyecharts\n",[33,147824,147825],{"__ignoreMap":31},[36,147826,147827,147829,147831],{"class":38,"line":39},[36,147828,24575],{"class":2713},[36,147830,24578],{"class":998},[36,147832,147833],{"class":998}," pyecharts\n",[14,147835,147836],{},"验证：",[26,147838,147840],{"className":28,"code":147839,"language":30,"meta":31,"style":31},"import pyecharts\n\nprint(pyecharts.__version__)\n",[33,147841,147842,147848,147852],{"__ignoreMap":31},[36,147843,147844,147846],{"class":38,"line":39},[36,147845,31135],{"class":53},[36,147847,147833],{"class":49},[36,147849,147850],{"class":38,"line":46},[36,147851,194],{"emptyLinePlaceholder":193},[36,147853,147854,147856,147859,147862],{"class":38,"line":78},[36,147855,199],{"class":60},[36,147857,147858],{"class":49},"(pyecharts.",[36,147860,147861],{"class":60},"__version__",[36,147863,75],{"class":49},[14,147865,147866],{},"如果使用虚拟环境，要先激活环境再安装。",[21,147868,147870],{"id":147869},"_104-第一个折线图","10.4 第一个折线图",[26,147872,147874],{"className":28,"code":147873,"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,147875,147876,147888,147892,147902,147932,147964],{"__ignoreMap":31},[36,147877,147878,147880,147883,147885],{"class":38,"line":39},[36,147879,31479],{"class":53},[36,147881,147882],{"class":49}," pyecharts.charts ",[36,147884,31135],{"class":53},[36,147886,147887],{"class":49}," Line\n",[36,147889,147890],{"class":38,"line":46},[36,147891,194],{"emptyLinePlaceholder":193},[36,147893,147894,147897,147899],{"class":38,"line":78},[36,147895,147896],{"class":49},"line ",[36,147898,54],{"class":53},[36,147900,147901],{"class":49}," Line()\n",[36,147903,147904,147907,147910,147912,147915,147917,147920,147922,147925,147927,147930],{"class":38,"line":125},[36,147905,147906],{"class":49},"line.add_xaxis([",[36,147908,147909],{"class":998},"\"周一\"",[36,147911,154],{"class":49},[36,147913,147914],{"class":998},"\"周二\"",[36,147916,154],{"class":49},[36,147918,147919],{"class":998},"\"周三\"",[36,147921,154],{"class":49},[36,147923,147924],{"class":998},"\"周四\"",[36,147926,154],{"class":49},[36,147928,147929],{"class":998},"\"周五\"",[36,147931,165],{"class":49},[36,147933,147934,147937,147940,147942,147944,147946,147948,147950,147952,147954,147957,147959,147962],{"class":38,"line":131},[36,147935,147936],{"class":49},"line.add_yaxis(",[36,147938,147939],{"class":998},"\"销售额\"",[36,147941,78260],{"class":49},[36,147943,67],{"class":60},[36,147945,154],{"class":49},[36,147947,1697],{"class":60},[36,147949,154],{"class":49},[36,147951,1741],{"class":60},[36,147953,154],{"class":49},[36,147955,147956],{"class":60},"150",[36,147958,154],{"class":49},[36,147960,147961],{"class":60},"180",[36,147963,165],{"class":49},[36,147965,147966,147969,147972],{"class":38,"line":396},[36,147967,147968],{"class":49},"line.render(",[36,147970,147971],{"class":998},"\"line.html\"",[36,147973,75],{"class":49},[14,147975,147976,147977,147980],{},"运行后会生成 ",[33,147978,147979],{},"line.html","，用浏览器打开即可看到图表。",[14,147982,147983],{},"核心步骤：",[851,147985,147986,147989,147992,147995,147998],{},[854,147987,147988],{},"导入图表类。",[854,147990,147991],{},"创建图表对象。",[854,147993,147994],{},"添加 x 轴数据。",[854,147996,147997],{},"添加 y 轴数据。",[854,147999,148000],{},"渲染为 HTML。",[21,148002,148004],{"id":148003},"_105-全局配置","10.5 全局配置",[14,148006,148007,148008,148011],{},"常用配置在 ",[33,148009,148010],{},"pyecharts.options"," 中。",[26,148013,148015],{"className":28,"code":148014,"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,148016,148017,148034,148044,148048,148056,148080,148108,148113,148132,148151,148169,148189,148193],{"__ignoreMap":31},[36,148018,148019,148021,148024,148026,148029,148031],{"class":38,"line":39},[36,148020,31479],{"class":53},[36,148022,148023],{"class":49}," pyecharts ",[36,148025,31135],{"class":53},[36,148027,148028],{"class":49}," options ",[36,148030,32125],{"class":53},[36,148032,148033],{"class":49}," opts\n",[36,148035,148036,148038,148040,148042],{"class":38,"line":46},[36,148037,31479],{"class":53},[36,148039,147882],{"class":49},[36,148041,31135],{"class":53},[36,148043,147887],{"class":49},[36,148045,148046],{"class":38,"line":78},[36,148047,194],{"emptyLinePlaceholder":193},[36,148049,148050,148052,148054],{"class":38,"line":125},[36,148051,147896],{"class":49},[36,148053,54],{"class":53},[36,148055,147901],{"class":49},[36,148057,148058,148060,148062,148064,148066,148068,148070,148072,148074,148076,148078],{"class":38,"line":131},[36,148059,147906],{"class":49},[36,148061,147909],{"class":998},[36,148063,154],{"class":49},[36,148065,147914],{"class":998},[36,148067,154],{"class":49},[36,148069,147919],{"class":998},[36,148071,154],{"class":49},[36,148073,147924],{"class":998},[36,148075,154],{"class":49},[36,148077,147929],{"class":998},[36,148079,165],{"class":49},[36,148081,148082,148084,148086,148088,148090,148092,148094,148096,148098,148100,148102,148104,148106],{"class":38,"line":396},[36,148083,147936],{"class":49},[36,148085,147939],{"class":998},[36,148087,78260],{"class":49},[36,148089,67],{"class":60},[36,148091,154],{"class":49},[36,148093,1697],{"class":60},[36,148095,154],{"class":49},[36,148097,1741],{"class":60},[36,148099,154],{"class":49},[36,148101,147956],{"class":60},[36,148103,154],{"class":49},[36,148105,147961],{"class":60},[36,148107,165],{"class":49},[36,148109,148110],{"class":38,"line":407},[36,148111,148112],{"class":49},"line.set_global_opts(\n",[36,148114,148115,148118,148120,148123,148125,148127,148130],{"class":38,"line":2061},[36,148116,148117],{"class":416},"    title_opts",[36,148119,54],{"class":53},[36,148121,148122],{"class":49},"opts.TitleOpts(",[36,148124,52149],{"class":416},[36,148126,54],{"class":53},[36,148128,148129],{"class":998},"\"一周销售额\"",[36,148131,38789],{"class":49},[36,148133,148134,148137,148139,148142,148144,148146,148149],{"class":38,"line":2067},[36,148135,148136],{"class":416},"    xaxis_opts",[36,148138,54],{"class":53},[36,148140,148141],{"class":49},"opts.AxisOpts(",[36,148143,80552],{"class":416},[36,148145,54],{"class":53},[36,148147,148148],{"class":998},"\"日期\"",[36,148150,38789],{"class":49},[36,148152,148153,148156,148158,148160,148162,148164,148167],{"class":38,"line":2079},[36,148154,148155],{"class":416},"    yaxis_opts",[36,148157,54],{"class":53},[36,148159,148141],{"class":49},[36,148161,80552],{"class":416},[36,148163,54],{"class":53},[36,148165,148166],{"class":998},"\"金额\"",[36,148168,38789],{"class":49},[36,148170,148171,148174,148176,148179,148182,148184,148187],{"class":38,"line":2362},[36,148172,148173],{"class":416},"    tooltip_opts",[36,148175,54],{"class":53},[36,148177,148178],{"class":49},"opts.TooltipOpts(",[36,148180,148181],{"class":416},"trigger",[36,148183,54],{"class":53},[36,148185,148186],{"class":998},"\"axis\"",[36,148188,38789],{"class":49},[36,148190,148191],{"class":38,"line":2367},[36,148192,75],{"class":49},[36,148194,148195,148197,148199],{"class":38,"line":2373},[36,148196,147968],{"class":49},[36,148198,147971],{"class":998},[36,148200,75],{"class":49},[14,148202,148203],{},"常见全局配置：",[1031,148205,148206,148215],{},[1034,148207,148208],{},[1037,148209,148210,148213],{},[1040,148211,148212],{},"配置",[1040,148214,103340],{},[1078,148216,148217,148227,148237,148247,148257,148267],{},[1037,148218,148219,148224],{},[1083,148220,148221],{},[33,148222,148223],{},"TitleOpts",[1083,148225,148226],{},"标题",[1037,148228,148229,148234],{},[1083,148230,148231],{},[33,148232,148233],{},"LegendOpts",[1083,148235,148236],{},"图例",[1037,148238,148239,148244],{},[1083,148240,148241],{},[33,148242,148243],{},"TooltipOpts",[1083,148245,148246],{},"提示框",[1037,148248,148249,148254],{},[1083,148250,148251],{},[33,148252,148253],{},"AxisOpts",[1083,148255,148256],{},"坐标轴",[1037,148258,148259,148264],{},[1083,148260,148261],{},[33,148262,148263],{},"VisualMapOpts",[1083,148265,148266],{},"视觉映射",[1037,148268,148269,148274],{},[1083,148270,148271],{},[33,148272,148273],{},"DataZoomOpts",[1083,148275,148276],{},"区域缩放",[21,148278,148280],{"id":148279},"_106-系列配置","10.6 系列配置",[14,148282,148283],{},"系列配置作用于某一组数据。",[26,148285,148287],{"className":28,"code":148286,"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,148288,148289,148294,148305,148334,148345,148364],{"__ignoreMap":31},[36,148290,148291],{"class":38,"line":39},[36,148292,148293],{"class":49},"line.add_yaxis(\n",[36,148295,148296,148299,148301,148303],{"class":38,"line":46},[36,148297,148298],{"class":416},"    series_name",[36,148300,54],{"class":53},[36,148302,147939],{"class":998},[36,148304,32208],{"class":49},[36,148306,148307,148310,148312,148314,148316,148318,148320,148322,148324,148326,148328,148330,148332],{"class":38,"line":78},[36,148308,148309],{"class":416},"    y_axis",[36,148311,54],{"class":53},[36,148313,1769],{"class":49},[36,148315,67],{"class":60},[36,148317,154],{"class":49},[36,148319,1697],{"class":60},[36,148321,154],{"class":49},[36,148323,1741],{"class":60},[36,148325,154],{"class":49},[36,148327,147956],{"class":60},[36,148329,154],{"class":49},[36,148331,147961],{"class":60},[36,148333,88578],{"class":49},[36,148335,148336,148339,148341,148343],{"class":38,"line":125},[36,148337,148338],{"class":416},"    is_smooth",[36,148340,54],{"class":53},[36,148342,32218],{"class":60},[36,148344,32208],{"class":49},[36,148346,148347,148350,148352,148355,148358,148360,148362],{"class":38,"line":131},[36,148348,148349],{"class":416},"    label_opts",[36,148351,54],{"class":53},[36,148353,148354],{"class":49},"opts.LabelOpts(",[36,148356,148357],{"class":416},"is_show",[36,148359,54],{"class":53},[36,148361,32218],{"class":60},[36,148363,38789],{"class":49},[36,148365,148366],{"class":38,"line":396},[36,148367,75],{"class":49},[14,148369,148370],{},"常用参数：",[851,148372,148373,148379,148385,148391,148397],{},[854,148374,148375,148378],{},[33,148376,148377],{},"series_name","：系列名称。",[854,148380,148381,148384],{},[33,148382,148383],{},"y_axis","：y 轴数据。",[854,148386,148387,148390],{},[33,148388,148389],{},"is_smooth","：是否平滑曲线。",[854,148392,148393,148396],{},[33,148394,148395],{},"label_opts","：标签配置。",[854,148398,148399,148402],{},[33,148400,148401],{},"symbol_size","：标记点大小。",[21,148404,148406],{"id":148405},"_107-多条折线","10.7 多条折线",[26,148408,148410],{"className":28,"code":148409,"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,148411,148412,148426,148436,148440,148469,148473,148481,148486,148524,148561,148565,148582,148598,148602],{"__ignoreMap":31},[36,148413,148414,148416,148418,148420,148422,148424],{"class":38,"line":39},[36,148415,31479],{"class":53},[36,148417,148023],{"class":49},[36,148419,31135],{"class":53},[36,148421,148028],{"class":49},[36,148423,32125],{"class":53},[36,148425,148033],{"class":49},[36,148427,148428,148430,148432,148434],{"class":38,"line":46},[36,148429,31479],{"class":53},[36,148431,147882],{"class":49},[36,148433,31135],{"class":53},[36,148435,147887],{"class":49},[36,148437,148438],{"class":38,"line":78},[36,148439,194],{"emptyLinePlaceholder":193},[36,148441,148442,148445,148447,148449,148451,148453,148455,148457,148459,148461,148463,148465,148467],{"class":38,"line":125},[36,148443,148444],{"class":49},"dates ",[36,148446,54],{"class":53},[36,148448,52968],{"class":49},[36,148450,147909],{"class":998},[36,148452,154],{"class":49},[36,148454,147914],{"class":998},[36,148456,154],{"class":49},[36,148458,147919],{"class":998},[36,148460,154],{"class":49},[36,148462,147924],{"class":998},[36,148464,154],{"class":49},[36,148466,147929],{"class":998},[36,148468,33988],{"class":49},[36,148470,148471],{"class":38,"line":131},[36,148472,194],{"emptyLinePlaceholder":193},[36,148474,148475,148477,148479],{"class":38,"line":396},[36,148476,147896],{"class":49},[36,148478,54],{"class":53},[36,148480,147901],{"class":49},[36,148482,148483],{"class":38,"line":407},[36,148484,148485],{"class":49},"line.add_xaxis(dates)\n",[36,148487,148488,148490,148493,148495,148497,148499,148502,148504,148506,148508,148510,148512,148514,148516,148518,148520,148522],{"class":38,"line":2061},[36,148489,147936],{"class":49},[36,148491,148492],{"class":998},"\"线上销售\"",[36,148494,78260],{"class":49},[36,148496,67],{"class":60},[36,148498,154],{"class":49},[36,148500,148501],{"class":60},"130",[36,148503,154],{"class":49},[36,148505,1697],{"class":60},[36,148507,154],{"class":49},[36,148509,21792],{"class":60},[36,148511,154],{"class":49},[36,148513,2472],{"class":60},[36,148515,112846],{"class":49},[36,148517,148389],{"class":416},[36,148519,54],{"class":53},[36,148521,32218],{"class":60},[36,148523,75],{"class":49},[36,148525,148526,148528,148531,148533,148535,148537,148539,148541,148543,148545,148547,148549,148551,148553,148555,148557,148559],{"class":38,"line":2067},[36,148527,147936],{"class":49},[36,148529,148530],{"class":998},"\"线下销售\"",[36,148532,78260],{"class":49},[36,148534,1494],{"class":60},[36,148536,154],{"class":49},[36,148538,1741],{"class":60},[36,148540,154],{"class":49},[36,148542,67],{"class":60},[36,148544,154],{"class":49},[36,148546,1697],{"class":60},[36,148548,154],{"class":49},[36,148550,147956],{"class":60},[36,148552,112846],{"class":49},[36,148554,148389],{"class":416},[36,148556,54],{"class":53},[36,148558,32218],{"class":60},[36,148560,75],{"class":49},[36,148562,148563],{"class":38,"line":2079},[36,148564,148112],{"class":49},[36,148566,148567,148569,148571,148573,148575,148577,148580],{"class":38,"line":2362},[36,148568,148117],{"class":416},[36,148570,54],{"class":53},[36,148572,148122],{"class":49},[36,148574,52149],{"class":416},[36,148576,54],{"class":53},[36,148578,148579],{"class":998},"\"线上线下销售趋势\"",[36,148581,38789],{"class":49},[36,148583,148584,148586,148588,148590,148592,148594,148596],{"class":38,"line":2367},[36,148585,148173],{"class":416},[36,148587,54],{"class":53},[36,148589,148178],{"class":49},[36,148591,148181],{"class":416},[36,148593,54],{"class":53},[36,148595,148186],{"class":998},[36,148597,38789],{"class":49},[36,148599,148600],{"class":38,"line":2373},[36,148601,75],{"class":49},[36,148603,148604,148606,148609],{"class":38,"line":2378},[36,148605,147968],{"class":49},[36,148607,148608],{"class":998},"\"sales.html\"",[36,148610,75],{"class":49},[14,148612,148613],{},"多条折线适合比较不同指标或不同地区。",[21,148615,148617],{"id":148616},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,148619,148620,148621,25363],{},"假设 ",[33,148622,148623],{},"sales.json",[26,148625,148627],{"className":147689,"code":148626,"language":146436,"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,148628,148629,148634,148666,148694,148722],{"__ignoreMap":31},[36,148630,148631],{"class":38,"line":39},[36,148632,148633],{"class":49},"[\n",[36,148635,148636,148639,148642,148644,148646,148648,148651,148653,148655,148657,148660,148662,148664],{"class":38,"line":46},[36,148637,148638],{"class":49},"  {",[36,148640,148641],{"class":60},"\"date\"",[36,148643,52179],{"class":49},[36,148645,147909],{"class":998},[36,148647,154],{"class":49},[36,148649,148650],{"class":60},"\"online\"",[36,148652,52179],{"class":49},[36,148654,67],{"class":60},[36,148656,154],{"class":49},[36,148658,148659],{"class":60},"\"offline\"",[36,148661,52179],{"class":49},[36,148663,1494],{"class":60},[36,148665,5678],{"class":49},[36,148667,148668,148670,148672,148674,148676,148678,148680,148682,148684,148686,148688,148690,148692],{"class":38,"line":78},[36,148669,148638],{"class":49},[36,148671,148641],{"class":60},[36,148673,52179],{"class":49},[36,148675,147914],{"class":998},[36,148677,154],{"class":49},[36,148679,148650],{"class":60},[36,148681,52179],{"class":49},[36,148683,148501],{"class":60},[36,148685,154],{"class":49},[36,148687,148659],{"class":60},[36,148689,52179],{"class":49},[36,148691,1741],{"class":60},[36,148693,5678],{"class":49},[36,148695,148696,148698,148700,148702,148704,148706,148708,148710,148712,148714,148716,148718,148720],{"class":38,"line":125},[36,148697,148638],{"class":49},[36,148699,148641],{"class":60},[36,148701,52179],{"class":49},[36,148703,147919],{"class":998},[36,148705,154],{"class":49},[36,148707,148650],{"class":60},[36,148709,52179],{"class":49},[36,148711,1697],{"class":60},[36,148713,154],{"class":49},[36,148715,148659],{"class":60},[36,148717,52179],{"class":49},[36,148719,67],{"class":60},[36,148721,2315],{"class":49},[36,148723,148724],{"class":38,"line":131},[36,148725,33988],{"class":49},[14,148727,148728],{},"读取并绘图：",[26,148730,148732],{"className":28,"code":148731,"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,148733,148734,148740,148754,148764,148768,148800,148813,148817,148825,148834,148843,148847,148859,148868,148877,148886,148890,148898,148902,148919,148936,148940,148957,148973,148977],{"__ignoreMap":31},[36,148735,148736,148738],{"class":38,"line":39},[36,148737,31135],{"class":53},[36,148739,147735],{"class":49},[36,148741,148742,148744,148746,148748,148750,148752],{"class":38,"line":46},[36,148743,31479],{"class":53},[36,148745,148023],{"class":49},[36,148747,31135],{"class":53},[36,148749,148028],{"class":49},[36,148751,32125],{"class":53},[36,148753,148033],{"class":49},[36,148755,148756,148758,148760,148762],{"class":38,"line":78},[36,148757,31479],{"class":53},[36,148759,147882],{"class":49},[36,148761,31135],{"class":53},[36,148763,147887],{"class":49},[36,148765,148766],{"class":38,"line":125},[36,148767,194],{"emptyLinePlaceholder":193},[36,148769,148770,148772,148774,148776,148779,148781,148783,148785,148787,148789,148791,148793,148795,148798],{"class":38,"line":131},[36,148771,108477],{"class":53},[36,148773,147435],{"class":60},[36,148775,901],{"class":49},[36,148777,148778],{"class":998},"\"sales.json\"",[36,148780,154],{"class":49},[36,148782,147445],{"class":998},[36,148784,154],{"class":49},[36,148786,147450],{"class":416},[36,148788,54],{"class":53},[36,148790,147455],{"class":998},[36,148792,14458],{"class":49},[36,148794,32125],{"class":53},[36,148796,148797],{"class":416}," file",[36,148799,4488],{"class":49},[36,148801,148802,148804,148806,148809,148811],{"class":38,"line":396},[36,148803,102065],{"class":49},[36,148805,54],{"class":53},[36,148807,148808],{"class":49}," json.load(",[36,148810,46096],{"class":416},[36,148812,75],{"class":49},[36,148814,148815],{"class":38,"line":407},[36,148816,194],{"emptyLinePlaceholder":193},[36,148818,148819,148821,148823],{"class":38,"line":2061},[36,148820,148444],{"class":49},[36,148822,54],{"class":53},[36,148824,52580],{"class":49},[36,148826,148827,148830,148832],{"class":38,"line":2067},[36,148828,148829],{"class":49},"online_sales ",[36,148831,54],{"class":53},[36,148833,52580],{"class":49},[36,148835,148836,148839,148841],{"class":38,"line":2079},[36,148837,148838],{"class":49},"offline_sales ",[36,148840,54],{"class":53},[36,148842,52580],{"class":49},[36,148844,148845],{"class":38,"line":2362},[36,148846,194],{"emptyLinePlaceholder":193},[36,148848,148849,148851,148854,148856],{"class":38,"line":2367},[36,148850,3774],{"class":53},[36,148852,148853],{"class":49}," item ",[36,148855,26788],{"class":53},[36,148857,148858],{"class":49}," data:\n",[36,148860,148861,148864,148866],{"class":38,"line":2373},[36,148862,148863],{"class":49},"    dates.append(item[",[36,148865,148641],{"class":998},[36,148867,165],{"class":49},[36,148869,148870,148873,148875],{"class":38,"line":2378},[36,148871,148872],{"class":49},"    online_sales.append(item[",[36,148874,148650],{"class":998},[36,148876,165],{"class":49},[36,148878,148879,148882,148884],{"class":38,"line":2392},[36,148880,148881],{"class":49},"    offline_sales.append(item[",[36,148883,148659],{"class":998},[36,148885,165],{"class":49},[36,148887,148888],{"class":38,"line":2397},[36,148889,194],{"emptyLinePlaceholder":193},[36,148891,148892,148894,148896],{"class":38,"line":2403},[36,148893,147896],{"class":49},[36,148895,54],{"class":53},[36,148897,147901],{"class":49},[36,148899,148900],{"class":38,"line":2424},[36,148901,148485],{"class":49},[36,148903,148904,148906,148908,148911,148913,148915,148917],{"class":38,"line":2429},[36,148905,147936],{"class":49},[36,148907,148492],{"class":998},[36,148909,148910],{"class":49},", online_sales, ",[36,148912,148389],{"class":416},[36,148914,54],{"class":53},[36,148916,32218],{"class":60},[36,148918,75],{"class":49},[36,148920,148921,148923,148925,148928,148930,148932,148934],{"class":38,"line":2443},[36,148922,147936],{"class":49},[36,148924,148530],{"class":998},[36,148926,148927],{"class":49},", offline_sales, ",[36,148929,148389],{"class":416},[36,148931,54],{"class":53},[36,148933,32218],{"class":60},[36,148935,75],{"class":49},[36,148937,148938],{"class":38,"line":2448},[36,148939,148112],{"class":49},[36,148941,148942,148944,148946,148948,148950,148952,148955],{"class":38,"line":2477},[36,148943,148117],{"class":416},[36,148945,54],{"class":53},[36,148947,148122],{"class":49},[36,148949,52149],{"class":416},[36,148951,54],{"class":53},[36,148953,148954],{"class":998},"\"销售趋势\"",[36,148956,38789],{"class":49},[36,148958,148959,148961,148963,148965,148967,148969,148971],{"class":38,"line":2482},[36,148960,148173],{"class":416},[36,148962,54],{"class":53},[36,148964,148178],{"class":49},[36,148966,148181],{"class":416},[36,148968,54],{"class":53},[36,148970,148186],{"class":998},[36,148972,38789],{"class":49},[36,148974,148975],{"class":38,"line":2499},[36,148976,75],{"class":49},[36,148978,148979,148981,148983],{"class":38,"line":2504},[36,148980,147968],{"class":49},[36,148982,148608],{"class":998},[36,148984,75],{"class":49},[21,148986,148988],{"id":148987},"_109-数据清洗","10.9 数据清洗",[14,148990,148991],{},"真实数据经常不整齐，需要清洗。",[14,148993,148994],{},"常见问题：",[851,148996,148997,149000,149003,149006],{},[854,148998,148999],{},"数字是字符串。",[854,149001,149002],{},"字段缺失。",[854,149004,149005],{},"空值。",[854,149007,149008],{},"日期格式不统一。",[14,149010,15879],{},[26,149012,149014],{"className":28,"code":149013,"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,149015,149016,149025,149048,149068,149089,149093,149097,149105,149114,149118,149129,149143,149152,149157,149161,149169,149179,149183,149190],{"__ignoreMap":31},[36,149017,149018,149021,149023],{"class":38,"line":39},[36,149019,149020],{"class":49},"raw_data ",[36,149022,54],{"class":53},[36,149024,56189],{"class":49},[36,149026,149027,149030,149032,149034,149036,149038,149041,149043,149046],{"class":38,"line":46},[36,149028,149029],{"class":49},"    {",[36,149031,148641],{"class":998},[36,149033,52179],{"class":49},[36,149035,147909],{"class":998},[36,149037,154],{"class":49},[36,149039,149040],{"class":998},"\"sales\"",[36,149042,52179],{"class":49},[36,149044,149045],{"class":998},"\"100\"",[36,149047,5678],{"class":49},[36,149049,149050,149052,149054,149056,149058,149060,149062,149064,149066],{"class":38,"line":78},[36,149051,149029],{"class":49},[36,149053,148641],{"class":998},[36,149055,52179],{"class":49},[36,149057,147914],{"class":998},[36,149059,154],{"class":49},[36,149061,149040],{"class":998},[36,149063,52179],{"class":49},[36,149065,8399],{"class":998},[36,149067,5678],{"class":49},[36,149069,149070,149072,149074,149076,149078,149080,149082,149084,149087],{"class":38,"line":125},[36,149071,149029],{"class":49},[36,149073,148641],{"class":998},[36,149075,52179],{"class":49},[36,149077,147919],{"class":998},[36,149079,154],{"class":49},[36,149081,149040],{"class":998},[36,149083,52179],{"class":49},[36,149085,149086],{"class":998},"\"120\"",[36,149088,5678],{"class":49},[36,149090,149091],{"class":38,"line":131},[36,149092,33988],{"class":49},[36,149094,149095],{"class":38,"line":396},[36,149096,194],{"emptyLinePlaceholder":193},[36,149098,149099,149101,149103],{"class":38,"line":407},[36,149100,148444],{"class":49},[36,149102,54],{"class":53},[36,149104,52580],{"class":49},[36,149106,149107,149110,149112],{"class":38,"line":2061},[36,149108,149109],{"class":49},"sales ",[36,149111,54],{"class":53},[36,149113,52580],{"class":49},[36,149115,149116],{"class":38,"line":2067},[36,149117,194],{"emptyLinePlaceholder":193},[36,149119,149120,149122,149124,149126],{"class":38,"line":2079},[36,149121,3774],{"class":53},[36,149123,148853],{"class":49},[36,149125,26788],{"class":53},[36,149127,149128],{"class":49}," raw_data:\n",[36,149130,149131,149134,149136,149139,149141],{"class":38,"line":2362},[36,149132,149133],{"class":49},"    value ",[36,149135,54],{"class":53},[36,149137,149138],{"class":49}," item.get(",[36,149140,149040],{"class":998},[36,149142,75],{"class":49},[36,149144,149145,149147,149149],{"class":38,"line":2367},[36,149146,3850],{"class":53},[36,149148,39672],{"class":53},[36,149150,149151],{"class":49}," value:\n",[36,149153,149154],{"class":38,"line":2373},[36,149155,149156],{"class":53},"        continue\n",[36,149158,149159],{"class":38,"line":2378},[36,149160,194],{"emptyLinePlaceholder":193},[36,149162,149163,149165,149167],{"class":38,"line":2392},[36,149164,148863],{"class":49},[36,149166,148641],{"class":998},[36,149168,165],{"class":49},[36,149170,149171,149174,149176],{"class":38,"line":2397},[36,149172,149173],{"class":49},"    sales.append(",[36,149175,904],{"class":60},[36,149177,149178],{"class":49},"(value))\n",[36,149180,149181],{"class":38,"line":2403},[36,149182,194],{"emptyLinePlaceholder":193},[36,149184,149185,149187],{"class":38,"line":2424},[36,149186,199],{"class":60},[36,149188,149189],{"class":49},"(dates)\n",[36,149191,149192,149194],{"class":38,"line":2429},[36,149193,199],{"class":60},[36,149195,149196],{"class":49},"(sales)\n",[21,149198,149200],{"id":149199},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[26,149202,149204],{"className":28,"code":149203,"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,149205,149206,149220,149230,149234,149242,149263,149285,149307,149329,149351,149355,149359,149381,149402,149406,149414,149418,149422,149432,149441,149451,149467,149471,149475,149492,149508,149524,149540,149550,149554],{"__ignoreMap":31},[36,149207,149208,149210,149212,149214,149216,149218],{"class":38,"line":39},[36,149209,31479],{"class":53},[36,149211,148023],{"class":49},[36,149213,31135],{"class":53},[36,149215,148028],{"class":49},[36,149217,32125],{"class":53},[36,149219,148033],{"class":49},[36,149221,149222,149224,149226,149228],{"class":38,"line":46},[36,149223,31479],{"class":53},[36,149225,147882],{"class":49},[36,149227,31135],{"class":53},[36,149229,147887],{"class":49},[36,149231,149232],{"class":38,"line":78},[36,149233,194],{"emptyLinePlaceholder":193},[36,149235,149236,149238,149240],{"class":38,"line":125},[36,149237,149109],{"class":49},[36,149239,54],{"class":53},[36,149241,56189],{"class":49},[36,149243,149244,149246,149248,149250,149253,149255,149257,149259,149261],{"class":38,"line":131},[36,149245,149029],{"class":49},[36,149247,148641],{"class":998},[36,149249,52179],{"class":49},[36,149251,149252],{"class":998},"\"2024-10-01\"",[36,149254,154],{"class":49},[36,149256,84826],{"class":998},[36,149258,52179],{"class":49},[36,149260,92765],{"class":60},[36,149262,5678],{"class":49},[36,149264,149265,149267,149269,149271,149274,149276,149278,149280,149283],{"class":38,"line":396},[36,149266,149029],{"class":49},[36,149268,148641],{"class":998},[36,149270,52179],{"class":49},[36,149272,149273],{"class":998},"\"2024-10-02\"",[36,149275,154],{"class":49},[36,149277,84826],{"class":998},[36,149279,52179],{"class":49},[36,149281,149282],{"class":60},"1800",[36,149284,5678],{"class":49},[36,149286,149287,149289,149291,149293,149296,149298,149300,149302,149305],{"class":38,"line":407},[36,149288,149029],{"class":49},[36,149290,148641],{"class":998},[36,149292,52179],{"class":49},[36,149294,149295],{"class":998},"\"2024-10-03\"",[36,149297,154],{"class":49},[36,149299,84826],{"class":998},[36,149301,52179],{"class":49},[36,149303,149304],{"class":60},"1500",[36,149306,5678],{"class":49},[36,149308,149309,149311,149313,149315,149318,149320,149322,149324,149327],{"class":38,"line":2061},[36,149310,149029],{"class":49},[36,149312,148641],{"class":998},[36,149314,52179],{"class":49},[36,149316,149317],{"class":998},"\"2024-10-04\"",[36,149319,154],{"class":49},[36,149321,84826],{"class":998},[36,149323,52179],{"class":49},[36,149325,149326],{"class":60},"2100",[36,149328,5678],{"class":49},[36,149330,149331,149333,149335,149337,149340,149342,149344,149346,149349],{"class":38,"line":2067},[36,149332,149029],{"class":49},[36,149334,148641],{"class":998},[36,149336,52179],{"class":49},[36,149338,149339],{"class":998},"\"2024-10-05\"",[36,149341,154],{"class":49},[36,149343,84826],{"class":998},[36,149345,52179],{"class":49},[36,149347,149348],{"class":60},"2600",[36,149350,5678],{"class":49},[36,149352,149353],{"class":38,"line":2079},[36,149354,33988],{"class":49},[36,149356,149357],{"class":38,"line":2362},[36,149358,194],{"emptyLinePlaceholder":193},[36,149360,149361,149363,149365,149368,149370,149372,149374,149376,149378],{"class":38,"line":2367},[36,149362,148444],{"class":49},[36,149364,54],{"class":53},[36,149366,149367],{"class":49}," [item[",[36,149369,148641],{"class":998},[36,149371,5192],{"class":49},[36,149373,3774],{"class":53},[36,149375,148853],{"class":49},[36,149377,26788],{"class":53},[36,149379,149380],{"class":49}," sales]\n",[36,149382,149383,149386,149388,149390,149392,149394,149396,149398,149400],{"class":38,"line":2373},[36,149384,149385],{"class":49},"amounts ",[36,149387,54],{"class":53},[36,149389,149367],{"class":49},[36,149391,84826],{"class":998},[36,149393,5192],{"class":49},[36,149395,3774],{"class":53},[36,149397,148853],{"class":49},[36,149399,26788],{"class":53},[36,149401,149380],{"class":49},[36,149403,149404],{"class":38,"line":2378},[36,149405,194],{"emptyLinePlaceholder":193},[36,149407,149408,149410,149412],{"class":38,"line":2392},[36,149409,147896],{"class":49},[36,149411,54],{"class":53},[36,149413,147901],{"class":49},[36,149415,149416],{"class":38,"line":2397},[36,149417,148485],{"class":49},[36,149419,149420],{"class":38,"line":2403},[36,149421,148293],{"class":49},[36,149423,149424,149426,149428,149430],{"class":38,"line":2424},[36,149425,148298],{"class":416},[36,149427,54],{"class":53},[36,149429,147939],{"class":998},[36,149431,32208],{"class":49},[36,149433,149434,149436,149438],{"class":38,"line":2429},[36,149435,148309],{"class":416},[36,149437,54],{"class":53},[36,149439,149440],{"class":49},"amounts,\n",[36,149442,149443,149445,149447,149449],{"class":38,"line":2443},[36,149444,148338],{"class":416},[36,149446,54],{"class":53},[36,149448,32218],{"class":60},[36,149450,32208],{"class":49},[36,149452,149453,149455,149457,149459,149461,149463,149465],{"class":38,"line":2448},[36,149454,148349],{"class":416},[36,149456,54],{"class":53},[36,149458,148354],{"class":49},[36,149460,148357],{"class":416},[36,149462,54],{"class":53},[36,149464,32218],{"class":60},[36,149466,38789],{"class":49},[36,149468,149469],{"class":38,"line":2477},[36,149470,75],{"class":49},[36,149472,149473],{"class":38,"line":2482},[36,149474,148112],{"class":49},[36,149476,149477,149479,149481,149483,149485,149487,149490],{"class":38,"line":2499},[36,149478,148117],{"class":416},[36,149480,54],{"class":53},[36,149482,148122],{"class":49},[36,149484,52149],{"class":416},[36,149486,54],{"class":53},[36,149488,149489],{"class":998},"\"每日销售额\"",[36,149491,38789],{"class":49},[36,149493,149494,149496,149498,149500,149502,149504,149506],{"class":38,"line":2504},[36,149495,148136],{"class":416},[36,149497,54],{"class":53},[36,149499,148141],{"class":49},[36,149501,80552],{"class":416},[36,149503,54],{"class":53},[36,149505,148148],{"class":998},[36,149507,38789],{"class":49},[36,149509,149510,149512,149514,149516,149518,149520,149522],{"class":38,"line":2509},[36,149511,148155],{"class":416},[36,149513,54],{"class":53},[36,149515,148141],{"class":49},[36,149517,80552],{"class":416},[36,149519,54],{"class":53},[36,149521,148166],{"class":998},[36,149523,38789],{"class":49},[36,149525,149526,149528,149530,149532,149534,149536,149538],{"class":38,"line":2514},[36,149527,148173],{"class":416},[36,149529,54],{"class":53},[36,149531,148178],{"class":49},[36,149533,148181],{"class":416},[36,149535,54],{"class":53},[36,149537,148186],{"class":998},[36,149539,38789],{"class":49},[36,149541,149542,149545,149547],{"class":38,"line":2528},[36,149543,149544],{"class":416},"    datazoom_opts",[36,149546,54],{"class":53},[36,149548,149549],{"class":49},"[opts.DataZoomOpts()],\n",[36,149551,149552],{"class":38,"line":2533},[36,149553,75],{"class":49},[36,149555,149556,149558,149561],{"class":38,"line":3326},[36,149557,147968],{"class":49},[36,149559,149560],{"class":998},"\"daily_sales.html\"",[36,149562,75],{"class":49},[14,149564,149565,149568],{},[33,149566,149567],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[21,149570,149572],{"id":149571},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,149574,149575],{},"如果数据结构如下：",[26,149577,149579],{"className":28,"code":149578,"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,149580,149581,149589,149597,149619,149640,149645,149652,149672,149692,149696],{"__ignoreMap":31},[36,149582,149583,149585,149587],{"class":38,"line":39},[36,149584,102302],{"class":49},[36,149586,54],{"class":53},[36,149588,16316],{"class":49},[36,149590,149591,149594],{"class":38,"line":46},[36,149592,149593],{"class":998},"    \"北京\"",[36,149595,149596],{"class":49},": [\n",[36,149598,149599,149601,149603,149605,149608,149610,149613,149615,149617],{"class":38,"line":78},[36,149600,5665],{"class":49},[36,149602,148641],{"class":998},[36,149604,52179],{"class":49},[36,149606,149607],{"class":998},"\"2024-01-01\"",[36,149609,154],{"class":49},[36,149611,149612],{"class":998},"\"confirm\"",[36,149614,52179],{"class":49},[36,149616,332],{"class":60},[36,149618,5678],{"class":49},[36,149620,149621,149623,149625,149627,149630,149632,149634,149636,149638],{"class":38,"line":125},[36,149622,5665],{"class":49},[36,149624,148641],{"class":998},[36,149626,52179],{"class":49},[36,149628,149629],{"class":998},"\"2024-01-02\"",[36,149631,154],{"class":49},[36,149633,149612],{"class":998},[36,149635,52179],{"class":49},[36,149637,625],{"class":60},[36,149639,5678],{"class":49},[36,149641,149642],{"class":38,"line":131},[36,149643,149644],{"class":49},"    ],\n",[36,149646,149647,149650],{"class":38,"line":396},[36,149648,149649],{"class":998},"    \"上海\"",[36,149651,149596],{"class":49},[36,149653,149654,149656,149658,149660,149662,149664,149666,149668,149670],{"class":38,"line":407},[36,149655,5665],{"class":49},[36,149657,148641],{"class":998},[36,149659,52179],{"class":49},[36,149661,149607],{"class":998},[36,149663,154],{"class":49},[36,149665,149612],{"class":998},[36,149667,52179],{"class":49},[36,149669,1280],{"class":60},[36,149671,5678],{"class":49},[36,149673,149674,149676,149678,149680,149682,149684,149686,149688,149690],{"class":38,"line":2061},[36,149675,5665],{"class":49},[36,149677,148641],{"class":998},[36,149679,52179],{"class":49},[36,149681,149629],{"class":998},[36,149683,154],{"class":49},[36,149685,149612],{"class":998},[36,149687,52179],{"class":49},[36,149689,281],{"class":60},[36,149691,5678],{"class":49},[36,149693,149694],{"class":38,"line":2067},[36,149695,149644],{"class":49},[36,149697,149698],{"class":38,"line":2079},[36,149699,2315],{"class":49},[14,149701,149702],{},"绘制多地区趋势：",[26,149704,149706],{"className":28,"code":149705,"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,149707,149708,149722,149732,149736,149761,149765,149773,149777,149781,149793,149815,149828,149832,149836,149853,149869,149873],{"__ignoreMap":31},[36,149709,149710,149712,149714,149716,149718,149720],{"class":38,"line":39},[36,149711,31479],{"class":53},[36,149713,148023],{"class":49},[36,149715,31135],{"class":53},[36,149717,148028],{"class":49},[36,149719,32125],{"class":53},[36,149721,148033],{"class":49},[36,149723,149724,149726,149728,149730],{"class":38,"line":46},[36,149725,31479],{"class":53},[36,149727,147882],{"class":49},[36,149729,31135],{"class":53},[36,149731,147887],{"class":49},[36,149733,149734],{"class":38,"line":78},[36,149735,194],{"emptyLinePlaceholder":193},[36,149737,149738,149740,149742,149744,149746,149748,149750,149752,149754,149757,149759],{"class":38,"line":125},[36,149739,148444],{"class":49},[36,149741,54],{"class":53},[36,149743,149367],{"class":49},[36,149745,148641],{"class":998},[36,149747,5192],{"class":49},[36,149749,3774],{"class":53},[36,149751,148853],{"class":49},[36,149753,26788],{"class":53},[36,149755,149756],{"class":49}," data[",[36,149758,70011],{"class":998},[36,149760,78269],{"class":49},[36,149762,149763],{"class":38,"line":131},[36,149764,194],{"emptyLinePlaceholder":193},[36,149766,149767,149769,149771],{"class":38,"line":396},[36,149768,147896],{"class":49},[36,149770,54],{"class":53},[36,149772,147901],{"class":49},[36,149774,149775],{"class":38,"line":407},[36,149776,148485],{"class":49},[36,149778,149779],{"class":38,"line":2061},[36,149780,194],{"emptyLinePlaceholder":193},[36,149782,149783,149785,149788,149790],{"class":38,"line":2067},[36,149784,3774],{"class":53},[36,149786,149787],{"class":49}," city, records ",[36,149789,26788],{"class":53},[36,149791,149792],{"class":49}," data.items():\n",[36,149794,149795,149798,149800,149802,149804,149806,149808,149810,149812],{"class":38,"line":2079},[36,149796,149797],{"class":49},"    values ",[36,149799,54],{"class":53},[36,149801,149367],{"class":49},[36,149803,149612],{"class":998},[36,149805,5192],{"class":49},[36,149807,3774],{"class":53},[36,149809,148853],{"class":49},[36,149811,26788],{"class":53},[36,149813,149814],{"class":49}," records]\n",[36,149816,149817,149820,149822,149824,149826],{"class":38,"line":2362},[36,149818,149819],{"class":49},"    line.add_yaxis(city, values, ",[36,149821,148389],{"class":416},[36,149823,54],{"class":53},[36,149825,32218],{"class":60},[36,149827,75],{"class":49},[36,149829,149830],{"class":38,"line":2367},[36,149831,194],{"emptyLinePlaceholder":193},[36,149833,149834],{"class":38,"line":2373},[36,149835,148112],{"class":49},[36,149837,149838,149840,149842,149844,149846,149848,149851],{"class":38,"line":2378},[36,149839,148117],{"class":416},[36,149841,54],{"class":53},[36,149843,148122],{"class":49},[36,149845,52149],{"class":416},[36,149847,54],{"class":53},[36,149849,149850],{"class":998},"\"多地区趋势图\"",[36,149852,38789],{"class":49},[36,149854,149855,149857,149859,149861,149863,149865,149867],{"class":38,"line":2392},[36,149856,148173],{"class":416},[36,149858,54],{"class":53},[36,149860,148178],{"class":49},[36,149862,148181],{"class":416},[36,149864,54],{"class":53},[36,149866,148186],{"class":998},[36,149868,38789],{"class":49},[36,149870,149871],{"class":38,"line":2397},[36,149872,75],{"class":49},[36,149874,149875,149877,149880],{"class":38,"line":2403},[36,149876,147968],{"class":49},[36,149878,149879],{"class":998},"\"trend.html\"",[36,149881,75],{"class":49},[14,149883,149884],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[21,149886,149888],{"id":149887},"_1012-易错点","10.12 易错点",[851,149890,149891,149897,149903,149913,149919],{},[854,149892,149893,149896],{},[33,149894,149895],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[854,149898,149899,149902],{},[33,149900,149901],{},"render()"," 生成的是 HTML，不是图片。",[854,149904,149905,149906,149909,149910,29130],{},"JSON 字符串用 ",[33,149907,149908],{},"json.loads()","，JSON 文件用 ",[33,149911,149912],{},"json.load()",[854,149914,149915,149916,29130],{},"中文 JSON 保存时加 ",[33,149917,149918],{},"ensure_ascii=False",[854,149920,149921],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[21,149923,149925],{"id":149924},"_1013-本章练习","10.13 本章练习",[851,149927,149928,149931,149934,149937,149940],{},[854,149929,149930],{},"安装 pyecharts 并生成第一个折线图。",[854,149932,149933],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[854,149935,149936],{},"绘制两条折线，对比线上和线下销售额。",[854,149938,149939],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[854,149941,149942],{},"对含有空值的销售数据进行清洗后再绘图。",[807,149944,149945],{},"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":46,"depth":46,"links":149947},[149948,149949,149950,149951,149952,149953,149954,149955,149956,149957,149958,149959,149960],{"id":147564,"depth":46,"text":147565},{"id":147639,"depth":46,"text":147640},{"id":147818,"depth":46,"text":147819},{"id":147869,"depth":46,"text":147870},{"id":148003,"depth":46,"text":148004},{"id":148279,"depth":46,"text":148280},{"id":148405,"depth":46,"text":148406},{"id":148616,"depth":46,"text":148617},{"id":148987,"depth":46,"text":148988},{"id":149199,"depth":46,"text":149200},{"id":149571,"depth":46,"text":149572},{"id":149887,"depth":46,"text":149888},{"id":149924,"depth":46,"text":149925},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147556,"description":823},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149967,"title":149968,"body":149969,"description":823,"extension":824,"meta":152329,"navigation":193,"path":152330,"seo":152331,"stem":152332,"__hash__":152333},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149970,"toc":152306},[149971,149974,149978,149981,149984,150060,150063,150154,150157,150161,150164,150208,150221,150225,150228,150295,150298,150302,150305,150389,150397,150401,150406,150547,150550,150561,150567,150573,150687,150691,150694,150697,150950,150953,150957,150960,151064,151067,151071,151222,151226,151233,151346,151350,151353,151459,151462,151466,151469,151500,151503,151608,151611,151615,151619,151629,151697,151701,151708,151772,151775,151779,151785,151881,151890,151894,152218,152227,152231,152259,152263,152303],[10,149972,149968],{"id":149973},"_11-面向对象基础",[21,149975,149977],{"id":149976},"_111-什么是面向对象","11.1 什么是面向对象",[14,149979,149980],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149982,149983],{},"面向过程：",[26,149985,149987],{"className":28,"code":149986,"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,149988,149989,149998,150006,150010,150020,150051,150055],{"__ignoreMap":31},[36,149990,149991,149993,149995],{"class":38,"line":39},[36,149992,147180],{"class":49},[36,149994,54],{"class":53},[36,149996,149997],{"class":998}," \"小明\"\n",[36,149999,150000,150002,150004],{"class":38,"line":46},[36,150001,147190],{"class":49},[36,150003,54],{"class":53},[36,150005,147195],{"class":60},[36,150007,150008],{"class":38,"line":78},[36,150009,194],{"emptyLinePlaceholder":193},[36,150011,150012,150014,150017],{"class":38,"line":125},[36,150013,32689],{"class":53},[36,150015,150016],{"class":2713}," introduce",[36,150018,150019],{"class":49},"(name, age):\n",[36,150021,150022,150024,150026,150028,150031,150033,150035,150037,150040,150042,150044,150046,150049],{"class":38,"line":131},[36,150023,32041],{"class":60},[36,150025,901],{"class":49},[36,150027,949],{"class":53},[36,150029,150030],{"class":998},"\"我叫",[36,150032,1775],{"class":60},[36,150034,80552],{"class":49},[36,150036,1825],{"class":60},[36,150038,150039],{"class":998},"，今年",[36,150041,1775],{"class":60},[36,150043,70963],{"class":49},[36,150045,1825],{"class":60},[36,150047,150048],{"class":998},"岁\"",[36,150050,75],{"class":49},[36,150052,150053],{"class":38,"line":396},[36,150054,194],{"emptyLinePlaceholder":193},[36,150056,150057],{"class":38,"line":407},[36,150058,150059],{"class":49},"introduce(name, age)\n",[14,150061,150062],{},"面向对象：",[26,150064,150066],{"className":28,"code":150065,"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,150067,150068,150076,150084,150113,150117,150121,150131,150140,150149],{"__ignoreMap":31},[36,150069,150070,150072,150074],{"class":38,"line":39},[36,150071,15438],{"class":53},[36,150073,8645],{"class":2713},[36,150075,4488],{"class":49},[36,150077,150078,150080,150082],{"class":38,"line":46},[36,150079,31543],{"class":53},[36,150081,150016],{"class":2713},[36,150083,31549],{"class":49},[36,150085,150086,150088,150090,150092,150094,150097,150099,150101,150103,150105,150107,150109,150111],{"class":38,"line":78},[36,150087,33193],{"class":60},[36,150089,901],{"class":49},[36,150091,949],{"class":53},[36,150093,150030],{"class":998},[36,150095,150096],{"class":60},"{self",[36,150098,81043],{"class":49},[36,150100,1825],{"class":60},[36,150102,150039],{"class":998},[36,150104,150096],{"class":60},[36,150106,81055],{"class":49},[36,150108,1825],{"class":60},[36,150110,150048],{"class":998},[36,150112,75],{"class":49},[36,150114,150115],{"class":38,"line":125},[36,150116,194],{"emptyLinePlaceholder":193},[36,150118,150119],{"class":38,"line":131},[36,150120,194],{"emptyLinePlaceholder":193},[36,150122,150123,150126,150128],{"class":38,"line":396},[36,150124,150125],{"class":49},"student ",[36,150127,54],{"class":53},[36,150129,150130],{"class":49}," Student()\n",[36,150132,150133,150136,150138],{"class":38,"line":407},[36,150134,150135],{"class":49},"student.name ",[36,150137,54],{"class":53},[36,150139,149997],{"class":998},[36,150141,150142,150145,150147],{"class":38,"line":2061},[36,150143,150144],{"class":49},"student.age ",[36,150146,54],{"class":53},[36,150148,147195],{"class":60},[36,150150,150151],{"class":38,"line":2067},[36,150152,150153],{"class":49},"student.introduce()\n",[14,150155,150156],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[21,150158,150160],{"id":150159},"_112-类和对象","11.2 类和对象",[14,150162,150163],{},"类是模板，对象是根据模板创建出来的具体实例。",[26,150165,150167],{"className":28,"code":150166,"language":30,"meta":31,"style":31},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[33,150168,150169,150177,150182,150186,150190,150199],{"__ignoreMap":31},[36,150170,150171,150173,150175],{"class":38,"line":39},[36,150172,15438],{"class":53},[36,150174,8645],{"class":2713},[36,150176,4488],{"class":49},[36,150178,150179],{"class":38,"line":46},[36,150180,150181],{"class":53},"    pass\n",[36,150183,150184],{"class":38,"line":78},[36,150185,194],{"emptyLinePlaceholder":193},[36,150187,150188],{"class":38,"line":125},[36,150189,194],{"emptyLinePlaceholder":193},[36,150191,150192,150195,150197],{"class":38,"line":131},[36,150193,150194],{"class":49},"student1 ",[36,150196,54],{"class":53},[36,150198,150130],{"class":49},[36,150200,150201,150204,150206],{"class":38,"line":396},[36,150202,150203],{"class":49},"student2 ",[36,150205,54],{"class":53},[36,150207,150130],{"class":49},[14,150209,150210,150213,150214,101662,150217,150220],{},[33,150211,150212],{},"Student"," 是类，",[33,150215,150216],{},"student1",[33,150218,150219],{},"student2"," 是对象。",[21,150222,150224],{"id":150223},"_113-属性","11.3 属性",[14,150226,150227],{},"属性是对象保存的数据。",[26,150229,150231],{"className":28,"code":150230,"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,150232,150233,150241,150245,150249,150253,150261,150269,150277,150281,150288],{"__ignoreMap":31},[36,150234,150235,150237,150239],{"class":38,"line":39},[36,150236,15438],{"class":53},[36,150238,8645],{"class":2713},[36,150240,4488],{"class":49},[36,150242,150243],{"class":38,"line":46},[36,150244,150181],{"class":53},[36,150246,150247],{"class":38,"line":78},[36,150248,194],{"emptyLinePlaceholder":193},[36,150250,150251],{"class":38,"line":125},[36,150252,194],{"emptyLinePlaceholder":193},[36,150254,150255,150257,150259],{"class":38,"line":131},[36,150256,150125],{"class":49},[36,150258,54],{"class":53},[36,150260,150130],{"class":49},[36,150262,150263,150265,150267],{"class":38,"line":396},[36,150264,150135],{"class":49},[36,150266,54],{"class":53},[36,150268,149997],{"class":998},[36,150270,150271,150273,150275],{"class":38,"line":407},[36,150272,150144],{"class":49},[36,150274,54],{"class":53},[36,150276,147195],{"class":60},[36,150278,150279],{"class":38,"line":2061},[36,150280,194],{"emptyLinePlaceholder":193},[36,150282,150283,150285],{"class":38,"line":2067},[36,150284,199],{"class":60},[36,150286,150287],{"class":49},"(student.name)\n",[36,150289,150290,150292],{"class":38,"line":2079},[36,150291,199],{"class":60},[36,150293,150294],{"class":49},"(student.age)\n",[14,150296,150297],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[21,150299,150301],{"id":150300},"_114-方法","11.4 方法",[14,150303,150304],{},"类中的函数叫方法。",[26,150306,150307],{"className":28,"code":150065,"language":30,"meta":31,"style":31},[33,150308,150309,150317,150325,150353,150357,150361,150369,150377,150385],{"__ignoreMap":31},[36,150310,150311,150313,150315],{"class":38,"line":39},[36,150312,15438],{"class":53},[36,150314,8645],{"class":2713},[36,150316,4488],{"class":49},[36,150318,150319,150321,150323],{"class":38,"line":46},[36,150320,31543],{"class":53},[36,150322,150016],{"class":2713},[36,150324,31549],{"class":49},[36,150326,150327,150329,150331,150333,150335,150337,150339,150341,150343,150345,150347,150349,150351],{"class":38,"line":78},[36,150328,33193],{"class":60},[36,150330,901],{"class":49},[36,150332,949],{"class":53},[36,150334,150030],{"class":998},[36,150336,150096],{"class":60},[36,150338,81043],{"class":49},[36,150340,1825],{"class":60},[36,150342,150039],{"class":998},[36,150344,150096],{"class":60},[36,150346,81055],{"class":49},[36,150348,1825],{"class":60},[36,150350,150048],{"class":998},[36,150352,75],{"class":49},[36,150354,150355],{"class":38,"line":125},[36,150356,194],{"emptyLinePlaceholder":193},[36,150358,150359],{"class":38,"line":131},[36,150360,194],{"emptyLinePlaceholder":193},[36,150362,150363,150365,150367],{"class":38,"line":396},[36,150364,150125],{"class":49},[36,150366,54],{"class":53},[36,150368,150130],{"class":49},[36,150370,150371,150373,150375],{"class":38,"line":407},[36,150372,150135],{"class":49},[36,150374,54],{"class":53},[36,150376,149997],{"class":998},[36,150378,150379,150381,150383],{"class":38,"line":2061},[36,150380,150144],{"class":49},[36,150382,54],{"class":53},[36,150384,147195],{"class":60},[36,150386,150387],{"class":38,"line":2067},[36,150388,150153],{"class":49},[14,150390,150391,150393,150394,150396],{},[33,150392,31565],{}," 表示当前对象。调用方法时不需要手动传入 ",[33,150395,31565],{},"，Python 会自动传。",[21,150398,150400],{"id":150399},"_115-构造方法__init__","11.5 构造方法__init__",[14,150402,150403,150405],{},[33,150404,31571],{}," 在对象创建时自动执行，用于初始化属性。",[26,150407,150409],{"className":28,"code":150408,"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,150410,150411,150419,150428,150440,150452,150463,150467,150475,150513,150517,150521,150543],{"__ignoreMap":31},[36,150412,150413,150415,150417],{"class":38,"line":39},[36,150414,15438],{"class":53},[36,150416,8645],{"class":2713},[36,150418,4488],{"class":49},[36,150420,150421,150423,150425],{"class":38,"line":46},[36,150422,31543],{"class":53},[36,150424,31546],{"class":60},[36,150426,150427],{"class":49},"(self, name, age, score):\n",[36,150429,150430,150432,150435,150437],{"class":38,"line":78},[36,150431,31587],{"class":60},[36,150433,150434],{"class":49},".name ",[36,150436,54],{"class":53},[36,150438,150439],{"class":49}," name\n",[36,150441,150442,150444,150447,150449],{"class":38,"line":125},[36,150443,31587],{"class":60},[36,150445,150446],{"class":49},".age ",[36,150448,54],{"class":53},[36,150450,150451],{"class":49}," age\n",[36,150453,150454,150456,150459,150461],{"class":38,"line":131},[36,150455,31587],{"class":60},[36,150457,150458],{"class":49},".score ",[36,150460,54],{"class":53},[36,150462,2329],{"class":49},[36,150464,150465],{"class":38,"line":396},[36,150466,194],{"emptyLinePlaceholder":193},[36,150468,150469,150471,150473],{"class":38,"line":407},[36,150470,31543],{"class":53},[36,150472,150016],{"class":2713},[36,150474,31549],{"class":49},[36,150476,150477,150479,150481,150483,150485,150487,150489,150491,150493,150495,150497,150499,150502,150504,150507,150509,150511],{"class":38,"line":2061},[36,150478,33193],{"class":60},[36,150480,901],{"class":49},[36,150482,949],{"class":53},[36,150484,150030],{"class":998},[36,150486,150096],{"class":60},[36,150488,81043],{"class":49},[36,150490,1825],{"class":60},[36,150492,150039],{"class":998},[36,150494,150096],{"class":60},[36,150496,81055],{"class":49},[36,150498,1825],{"class":60},[36,150500,150501],{"class":998},"岁，成绩",[36,150503,150096],{"class":60},[36,150505,150506],{"class":49},".score",[36,150508,1825],{"class":60},[36,150510,1141],{"class":998},[36,150512,75],{"class":49},[36,150514,150515],{"class":38,"line":2067},[36,150516,194],{"emptyLinePlaceholder":193},[36,150518,150519],{"class":38,"line":2079},[36,150520,194],{"emptyLinePlaceholder":193},[36,150522,150523,150525,150527,150530,150533,150535,150537,150539,150541],{"class":38,"line":2362},[36,150524,150125],{"class":49},[36,150526,54],{"class":53},[36,150528,150529],{"class":49}," Student(",[36,150531,150532],{"class":998},"\"小明\"",[36,150534,154],{"class":49},[36,150536,1532],{"class":60},[36,150538,154],{"class":49},[36,150540,1868],{"class":60},[36,150542,75],{"class":49},[36,150544,150545],{"class":38,"line":2367},[36,150546,150153],{"class":49},[14,150548,150549],{},"构造方法的好处：",[851,150551,150552,150555,150558],{},[854,150553,150554],{},"创建对象时必须提供必要数据。",[854,150556,150557],{},"属性初始化集中，不容易漏。",[854,150559,150560],{},"对象状态更完整。",[21,150562,150564,150565],{"id":150563},"_116-str","11.6 ",[1043,150566,2049],{},[14,150568,150569,150570,29130],{},"直接打印对象时，默认输出不直观。可以定义 ",[33,150571,150572],{},"__str__",[26,150574,150576],{"className":28,"code":150575,"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,150577,150578,150586,150595,150605,150615,150619,150628,150656,150660,150664,150680],{"__ignoreMap":31},[36,150579,150580,150582,150584],{"class":38,"line":39},[36,150581,15438],{"class":53},[36,150583,8645],{"class":2713},[36,150585,4488],{"class":49},[36,150587,150588,150590,150592],{"class":38,"line":46},[36,150589,31543],{"class":53},[36,150591,31546],{"class":60},[36,150593,150594],{"class":49},"(self, name, age):\n",[36,150596,150597,150599,150601,150603],{"class":38,"line":78},[36,150598,31587],{"class":60},[36,150600,150434],{"class":49},[36,150602,54],{"class":53},[36,150604,150439],{"class":49},[36,150606,150607,150609,150611,150613],{"class":38,"line":125},[36,150608,31587],{"class":60},[36,150610,150446],{"class":49},[36,150612,54],{"class":53},[36,150614,150451],{"class":49},[36,150616,150617],{"class":38,"line":131},[36,150618,194],{"emptyLinePlaceholder":193},[36,150620,150621,150623,150626],{"class":38,"line":396},[36,150622,31543],{"class":53},[36,150624,150625],{"class":60}," __str__",[36,150627,31549],{"class":49},[36,150629,150630,150632,150635,150638,150640,150642,150644,150647,150649,150651,150653],{"class":38,"line":407},[36,150631,15496],{"class":53},[36,150633,150634],{"class":53}," f",[36,150636,150637],{"class":998},"\"Student(name=",[36,150639,150096],{"class":60},[36,150641,81043],{"class":49},[36,150643,1825],{"class":60},[36,150645,150646],{"class":998},", age=",[36,150648,150096],{"class":60},[36,150650,81055],{"class":49},[36,150652,1825],{"class":60},[36,150654,150655],{"class":998},")\"\n",[36,150657,150658],{"class":38,"line":2061},[36,150659,194],{"emptyLinePlaceholder":193},[36,150661,150662],{"class":38,"line":2067},[36,150663,194],{"emptyLinePlaceholder":193},[36,150665,150666,150668,150670,150672,150674,150676,150678],{"class":38,"line":2079},[36,150667,150125],{"class":49},[36,150669,54],{"class":53},[36,150671,150529],{"class":49},[36,150673,150532],{"class":998},[36,150675,154],{"class":49},[36,150677,1532],{"class":60},[36,150679,75],{"class":49},[36,150681,150682,150684],{"class":38,"line":2362},[36,150683,199],{"class":60},[36,150685,150686],{"class":49},"(student)\n",[21,150688,150690],{"id":150689},"_117-封装","11.7 封装",[14,150692,150693],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150695,150696],{},"Python 中以双下划线开头的属性通常视为私有属性。",[26,150698,150700],{"className":28,"code":150699,"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,150701,150702,150711,150720,150732,150744,150748,150757,150766,150770,150780,150793,150804,150809,150820,150824,150833,150845,150856,150860,150873,150884,150888,150899,150903,150907,150925,150934,150943],{"__ignoreMap":31},[36,150703,150704,150706,150709],{"class":38,"line":39},[36,150705,15438],{"class":53},[36,150707,150708],{"class":2713}," Account",[36,150710,4488],{"class":49},[36,150712,150713,150715,150717],{"class":38,"line":46},[36,150714,31543],{"class":53},[36,150716,31546],{"class":60},[36,150718,150719],{"class":49},"(self, owner, balance):\n",[36,150721,150722,150724,150727,150729],{"class":38,"line":78},[36,150723,31587],{"class":60},[36,150725,150726],{"class":49},".owner ",[36,150728,54],{"class":53},[36,150730,150731],{"class":49}," owner\n",[36,150733,150734,150736,150739,150741],{"class":38,"line":125},[36,150735,31587],{"class":60},[36,150737,150738],{"class":49},".__balance ",[36,150740,54],{"class":53},[36,150742,150743],{"class":49}," balance\n",[36,150745,150746],{"class":38,"line":131},[36,150747,194],{"emptyLinePlaceholder":193},[36,150749,150750,150752,150755],{"class":38,"line":396},[36,150751,31543],{"class":53},[36,150753,150754],{"class":2713}," get_balance",[36,150756,31549],{"class":49},[36,150758,150759,150761,150763],{"class":38,"line":407},[36,150760,15496],{"class":53},[36,150762,39615],{"class":60},[36,150764,150765],{"class":49},".__balance\n",[36,150767,150768],{"class":38,"line":2061},[36,150769,194],{"emptyLinePlaceholder":193},[36,150771,150772,150774,150777],{"class":38,"line":2067},[36,150773,31543],{"class":53},[36,150775,150776],{"class":2713}," deposit",[36,150778,150779],{"class":49},"(self, money):\n",[36,150781,150782,150784,150787,150789,150791],{"class":38,"line":2079},[36,150783,3246],{"class":53},[36,150785,150786],{"class":49}," money ",[36,150788,2338],{"class":53},[36,150790,4842],{"class":60},[36,150792,4488],{"class":49},[36,150794,150795,150797,150799,150802],{"class":38,"line":2362},[36,150796,35392],{"class":60},[36,150798,901],{"class":49},[36,150800,150801],{"class":998},"\"存款金额必须大于0\"",[36,150803,75],{"class":49},[36,150805,150806],{"class":38,"line":2367},[36,150807,150808],{"class":53},"            return\n",[36,150810,150811,150813,150815,150817],{"class":38,"line":2373},[36,150812,31587],{"class":60},[36,150814,150738],{"class":49},[36,150816,10224],{"class":53},[36,150818,150819],{"class":49}," money\n",[36,150821,150822],{"class":38,"line":2378},[36,150823,194],{"emptyLinePlaceholder":193},[36,150825,150826,150828,150831],{"class":38,"line":2392},[36,150827,31543],{"class":53},[36,150829,150830],{"class":2713}," withdraw",[36,150832,150779],{"class":49},[36,150834,150835,150837,150839,150841,150843],{"class":38,"line":2397},[36,150836,3246],{"class":53},[36,150838,150786],{"class":49},[36,150840,2338],{"class":53},[36,150842,4842],{"class":60},[36,150844,4488],{"class":49},[36,150846,150847,150849,150851,150854],{"class":38,"line":2403},[36,150848,35392],{"class":60},[36,150850,901],{"class":49},[36,150852,150853],{"class":998},"\"取款金额必须大于0\"",[36,150855,75],{"class":49},[36,150857,150858],{"class":38,"line":2424},[36,150859,150808],{"class":53},[36,150861,150862,150864,150866,150868,150870],{"class":38,"line":2429},[36,150863,3246],{"class":53},[36,150865,150786],{"class":49},[36,150867,1839],{"class":53},[36,150869,39615],{"class":60},[36,150871,150872],{"class":49},".__balance:\n",[36,150874,150875,150877,150879,150882],{"class":38,"line":2443},[36,150876,35392],{"class":60},[36,150878,901],{"class":49},[36,150880,150881],{"class":998},"\"余额不足\"",[36,150883,75],{"class":49},[36,150885,150886],{"class":38,"line":2448},[36,150887,150808],{"class":53},[36,150889,150890,150892,150894,150897],{"class":38,"line":2477},[36,150891,31587],{"class":60},[36,150893,150738],{"class":49},[36,150895,150896],{"class":53},"-=",[36,150898,150819],{"class":49},[36,150900,150901],{"class":38,"line":2482},[36,150902,194],{"emptyLinePlaceholder":193},[36,150904,150905],{"class":38,"line":2499},[36,150906,194],{"emptyLinePlaceholder":193},[36,150908,150909,150912,150914,150917,150919,150921,150923],{"class":38,"line":2504},[36,150910,150911],{"class":49},"account ",[36,150913,54],{"class":53},[36,150915,150916],{"class":49}," Account(",[36,150918,150532],{"class":998},[36,150920,154],{"class":49},[36,150922,7157],{"class":60},[36,150924,75],{"class":49},[36,150926,150927,150930,150932],{"class":38,"line":2509},[36,150928,150929],{"class":49},"account.deposit(",[36,150931,2472],{"class":60},[36,150933,75],{"class":49},[36,150935,150936,150939,150941],{"class":38,"line":2514},[36,150937,150938],{"class":49},"account.withdraw(",[36,150940,67],{"class":60},[36,150942,75],{"class":49},[36,150944,150945,150947],{"class":38,"line":2528},[36,150946,199],{"class":60},[36,150948,150949],{"class":49},"(account.get_balance())\n",[14,150951,150952],{},"封装的意义是避免外部随意修改内部状态。",[21,150954,150956],{"id":150955},"_118-继承","11.8 继承",[14,150958,150959],{},"继承可以让子类复用父类的属性和方法。",[26,150961,150963],{"className":28,"code":150962,"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,150964,150965,150974,150983,150994,150998,151002,151016,151025,151036,151040,151044,151054,151059],{"__ignoreMap":31},[36,150966,150967,150969,150972],{"class":38,"line":39},[36,150968,15438],{"class":53},[36,150970,150971],{"class":2713}," Animal",[36,150973,4488],{"class":49},[36,150975,150976,150978,150981],{"class":38,"line":46},[36,150977,31543],{"class":53},[36,150979,150980],{"class":2713}," eat",[36,150982,31549],{"class":49},[36,150984,150985,150987,150989,150992],{"class":38,"line":78},[36,150986,33193],{"class":60},[36,150988,901],{"class":49},[36,150990,150991],{"class":998},"\"吃东西\"",[36,150993,75],{"class":49},[36,150995,150996],{"class":38,"line":125},[36,150997,194],{"emptyLinePlaceholder":193},[36,150999,151000],{"class":38,"line":131},[36,151001,194],{"emptyLinePlaceholder":193},[36,151003,151004,151006,151009,151011,151014],{"class":38,"line":396},[36,151005,15438],{"class":53},[36,151007,151008],{"class":2713}," Dog",[36,151010,901],{"class":49},[36,151012,151013],{"class":2713},"Animal",[36,151015,31528],{"class":49},[36,151017,151018,151020,151023],{"class":38,"line":407},[36,151019,31543],{"class":53},[36,151021,151022],{"class":2713}," bark",[36,151024,31549],{"class":49},[36,151026,151027,151029,151031,151034],{"class":38,"line":2061},[36,151028,33193],{"class":60},[36,151030,901],{"class":49},[36,151032,151033],{"class":998},"\"汪汪\"",[36,151035,75],{"class":49},[36,151037,151038],{"class":38,"line":2067},[36,151039,194],{"emptyLinePlaceholder":193},[36,151041,151042],{"class":38,"line":2079},[36,151043,194],{"emptyLinePlaceholder":193},[36,151045,151046,151049,151051],{"class":38,"line":2362},[36,151047,151048],{"class":49},"dog ",[36,151050,54],{"class":53},[36,151052,151053],{"class":49}," Dog()\n",[36,151055,151056],{"class":38,"line":2367},[36,151057,151058],{"class":49},"dog.eat()\n",[36,151060,151061],{"class":38,"line":2373},[36,151062,151063],{"class":49},"dog.bark()\n",[14,151065,151066],{},"子类可以扩展新方法，也可以重写父类方法。",[21,151068,151070],{"id":151069},"_119-方法重写","11.9 方法重写",[26,151072,151074],{"className":28,"code":151073,"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,151075,151076,151084,151093,151104,151108,151112,151124,151132,151142,151146,151150,151163,151171,151182,151186,151190,151198,151208,151212,151217],{"__ignoreMap":31},[36,151077,151078,151080,151082],{"class":38,"line":39},[36,151079,15438],{"class":53},[36,151081,150971],{"class":2713},[36,151083,4488],{"class":49},[36,151085,151086,151088,151091],{"class":38,"line":46},[36,151087,31543],{"class":53},[36,151089,151090],{"class":2713}," speak",[36,151092,31549],{"class":49},[36,151094,151095,151097,151099,151102],{"class":38,"line":78},[36,151096,33193],{"class":60},[36,151098,901],{"class":49},[36,151100,151101],{"class":998},"\"动物叫\"",[36,151103,75],{"class":49},[36,151105,151106],{"class":38,"line":125},[36,151107,194],{"emptyLinePlaceholder":193},[36,151109,151110],{"class":38,"line":131},[36,151111,194],{"emptyLinePlaceholder":193},[36,151113,151114,151116,151118,151120,151122],{"class":38,"line":396},[36,151115,15438],{"class":53},[36,151117,151008],{"class":2713},[36,151119,901],{"class":49},[36,151121,151013],{"class":2713},[36,151123,31528],{"class":49},[36,151125,151126,151128,151130],{"class":38,"line":407},[36,151127,31543],{"class":53},[36,151129,151090],{"class":2713},[36,151131,31549],{"class":49},[36,151133,151134,151136,151138,151140],{"class":38,"line":2061},[36,151135,33193],{"class":60},[36,151137,901],{"class":49},[36,151139,151033],{"class":998},[36,151141,75],{"class":49},[36,151143,151144],{"class":38,"line":2067},[36,151145,194],{"emptyLinePlaceholder":193},[36,151147,151148],{"class":38,"line":2079},[36,151149,194],{"emptyLinePlaceholder":193},[36,151151,151152,151154,151157,151159,151161],{"class":38,"line":2362},[36,151153,15438],{"class":53},[36,151155,151156],{"class":2713}," Cat",[36,151158,901],{"class":49},[36,151160,151013],{"class":2713},[36,151162,31528],{"class":49},[36,151164,151165,151167,151169],{"class":38,"line":2367},[36,151166,31543],{"class":53},[36,151168,151090],{"class":2713},[36,151170,31549],{"class":49},[36,151172,151173,151175,151177,151180],{"class":38,"line":2373},[36,151174,33193],{"class":60},[36,151176,901],{"class":49},[36,151178,151179],{"class":998},"\"喵喵\"",[36,151181,75],{"class":49},[36,151183,151184],{"class":38,"line":2378},[36,151185,194],{"emptyLinePlaceholder":193},[36,151187,151188],{"class":38,"line":2392},[36,151189,194],{"emptyLinePlaceholder":193},[36,151191,151192,151194,151196],{"class":38,"line":2397},[36,151193,151048],{"class":49},[36,151195,54],{"class":53},[36,151197,151053],{"class":49},[36,151199,151200,151203,151205],{"class":38,"line":2403},[36,151201,151202],{"class":49},"cat ",[36,151204,54],{"class":53},[36,151206,151207],{"class":49}," Cat()\n",[36,151209,151210],{"class":38,"line":2424},[36,151211,194],{"emptyLinePlaceholder":193},[36,151213,151214],{"class":38,"line":2429},[36,151215,151216],{"class":49},"dog.speak()\n",[36,151218,151219],{"class":38,"line":2443},[36,151220,151221],{"class":49},"cat.speak()\n",[21,151223,151225],{"id":151224},"_1110-super","11.10 super",[14,151227,151228,151229,151232],{},"子类可以通过 ",[33,151230,151231],{},"super()"," 调用父类方法。",[26,151234,151236],{"className":28,"code":151235,"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,151237,151238,151246,151255,151265,151269,151273,151285,151294,151305,151315,151319,151323,151339],{"__ignoreMap":31},[36,151239,151240,151242,151244],{"class":38,"line":39},[36,151241,15438],{"class":53},[36,151243,16313],{"class":2713},[36,151245,4488],{"class":49},[36,151247,151248,151250,151252],{"class":38,"line":46},[36,151249,31543],{"class":53},[36,151251,31546],{"class":60},[36,151253,151254],{"class":49},"(self, name):\n",[36,151256,151257,151259,151261,151263],{"class":38,"line":78},[36,151258,31587],{"class":60},[36,151260,150434],{"class":49},[36,151262,54],{"class":53},[36,151264,150439],{"class":49},[36,151266,151267],{"class":38,"line":125},[36,151268,194],{"emptyLinePlaceholder":193},[36,151270,151271],{"class":38,"line":131},[36,151272,194],{"emptyLinePlaceholder":193},[36,151274,151275,151277,151279,151281,151283],{"class":38,"line":396},[36,151276,15438],{"class":53},[36,151278,8645],{"class":2713},[36,151280,901],{"class":49},[36,151282,19790],{"class":2713},[36,151284,31528],{"class":49},[36,151286,151287,151289,151291],{"class":38,"line":407},[36,151288,31543],{"class":53},[36,151290,31546],{"class":60},[36,151292,151293],{"class":49},"(self, name, score):\n",[36,151295,151296,151298,151300,151302],{"class":38,"line":2061},[36,151297,31559],{"class":60},[36,151299,18005],{"class":49},[36,151301,31571],{"class":60},[36,151303,151304],{"class":49},"(name)\n",[36,151306,151307,151309,151311,151313],{"class":38,"line":2067},[36,151308,31587],{"class":60},[36,151310,150458],{"class":49},[36,151312,54],{"class":53},[36,151314,2329],{"class":49},[36,151316,151317],{"class":38,"line":2079},[36,151318,194],{"emptyLinePlaceholder":193},[36,151320,151321],{"class":38,"line":2362},[36,151322,194],{"emptyLinePlaceholder":193},[36,151324,151325,151327,151329,151331,151333,151335,151337],{"class":38,"line":2367},[36,151326,150125],{"class":49},[36,151328,54],{"class":53},[36,151330,150529],{"class":49},[36,151332,150532],{"class":998},[36,151334,154],{"class":49},[36,151336,1868],{"class":60},[36,151338,75],{"class":49},[36,151340,151341,151343],{"class":38,"line":2373},[36,151342,199],{"class":60},[36,151344,151345],{"class":49},"(student.name, student.score)\n",[21,151347,151349],{"id":151348},"_1111-多态","11.11 多态",[14,151351,151352],{},"多态指不同对象响应同一个方法，表现出不同结果。",[26,151354,151356],{"className":28,"code":151355,"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,151357,151358,151366,151374,151384,151388,151392,151400,151408,151418,151422,151426,151436,151441,151445,151449,151454],{"__ignoreMap":31},[36,151359,151360,151362,151364],{"class":38,"line":39},[36,151361,15438],{"class":53},[36,151363,151008],{"class":2713},[36,151365,4488],{"class":49},[36,151367,151368,151370,151372],{"class":38,"line":46},[36,151369,31543],{"class":53},[36,151371,151090],{"class":2713},[36,151373,31549],{"class":49},[36,151375,151376,151378,151380,151382],{"class":38,"line":78},[36,151377,33193],{"class":60},[36,151379,901],{"class":49},[36,151381,151033],{"class":998},[36,151383,75],{"class":49},[36,151385,151386],{"class":38,"line":125},[36,151387,194],{"emptyLinePlaceholder":193},[36,151389,151390],{"class":38,"line":131},[36,151391,194],{"emptyLinePlaceholder":193},[36,151393,151394,151396,151398],{"class":38,"line":396},[36,151395,15438],{"class":53},[36,151397,151156],{"class":2713},[36,151399,4488],{"class":49},[36,151401,151402,151404,151406],{"class":38,"line":407},[36,151403,31543],{"class":53},[36,151405,151090],{"class":2713},[36,151407,31549],{"class":49},[36,151409,151410,151412,151414,151416],{"class":38,"line":2061},[36,151411,33193],{"class":60},[36,151413,901],{"class":49},[36,151415,151179],{"class":998},[36,151417,75],{"class":49},[36,151419,151420],{"class":38,"line":2067},[36,151421,194],{"emptyLinePlaceholder":193},[36,151423,151424],{"class":38,"line":2079},[36,151425,194],{"emptyLinePlaceholder":193},[36,151427,151428,151430,151433],{"class":38,"line":2362},[36,151429,32689],{"class":53},[36,151431,151432],{"class":2713}," make_sound",[36,151434,151435],{"class":49},"(animal):\n",[36,151437,151438],{"class":38,"line":2367},[36,151439,151440],{"class":49},"    animal.speak()\n",[36,151442,151443],{"class":38,"line":2373},[36,151444,194],{"emptyLinePlaceholder":193},[36,151446,151447],{"class":38,"line":2378},[36,151448,194],{"emptyLinePlaceholder":193},[36,151450,151451],{"class":38,"line":2392},[36,151452,151453],{"class":49},"make_sound(Dog())\n",[36,151455,151456],{"class":38,"line":2397},[36,151457,151458],{"class":49},"make_sound(Cat())\n",[14,151460,151461],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[21,151463,151465],{"id":151464},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,151467,151468],{},"实例属性属于对象：",[26,151470,151472],{"className":28,"code":151471,"language":30,"meta":31,"style":31},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[33,151473,151474,151482,151490],{"__ignoreMap":31},[36,151475,151476,151478,151480],{"class":38,"line":39},[36,151477,15438],{"class":53},[36,151479,8645],{"class":2713},[36,151481,4488],{"class":49},[36,151483,151484,151486,151488],{"class":38,"line":46},[36,151485,31543],{"class":53},[36,151487,31546],{"class":60},[36,151489,151254],{"class":49},[36,151491,151492,151494,151496,151498],{"class":38,"line":78},[36,151493,31587],{"class":60},[36,151495,150434],{"class":49},[36,151497,54],{"class":53},[36,151499,150439],{"class":49},[14,151501,151502],{},"类属性属于类，所有对象共享：",[26,151504,151506],{"className":28,"code":151505,"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,151507,151508,151516,151526,151530,151538,151548,151552,151556,151569,151583,151587,151594,151601],{"__ignoreMap":31},[36,151509,151510,151512,151514],{"class":38,"line":39},[36,151511,15438],{"class":53},[36,151513,8645],{"class":2713},[36,151515,4488],{"class":49},[36,151517,151518,151521,151523],{"class":38,"line":46},[36,151519,151520],{"class":49},"    school ",[36,151522,54],{"class":53},[36,151524,151525],{"class":998}," \"黑马学校\"\n",[36,151527,151528],{"class":38,"line":78},[36,151529,194],{"emptyLinePlaceholder":193},[36,151531,151532,151534,151536],{"class":38,"line":125},[36,151533,31543],{"class":53},[36,151535,31546],{"class":60},[36,151537,151254],{"class":49},[36,151539,151540,151542,151544,151546],{"class":38,"line":131},[36,151541,31587],{"class":60},[36,151543,150434],{"class":49},[36,151545,54],{"class":53},[36,151547,150439],{"class":49},[36,151549,151550],{"class":38,"line":396},[36,151551,194],{"emptyLinePlaceholder":193},[36,151553,151554],{"class":38,"line":407},[36,151555,194],{"emptyLinePlaceholder":193},[36,151557,151558,151561,151563,151565,151567],{"class":38,"line":2061},[36,151559,151560],{"class":49},"s1 ",[36,151562,54],{"class":53},[36,151564,150529],{"class":49},[36,151566,150532],{"class":998},[36,151568,75],{"class":49},[36,151570,151571,151574,151576,151578,151581],{"class":38,"line":2067},[36,151572,151573],{"class":49},"s2 ",[36,151575,54],{"class":53},[36,151577,150529],{"class":49},[36,151579,151580],{"class":998},"\"小红\"",[36,151582,75],{"class":49},[36,151584,151585],{"class":38,"line":2079},[36,151586,194],{"emptyLinePlaceholder":193},[36,151588,151589,151591],{"class":38,"line":2362},[36,151590,199],{"class":60},[36,151592,151593],{"class":49},"(s1.school)\n",[36,151595,151596,151598],{"class":38,"line":2367},[36,151597,199],{"class":60},[36,151599,151600],{"class":49},"(s2.school)\n",[36,151602,151603,151605],{"class":38,"line":2373},[36,151604,199],{"class":60},[36,151606,151607],{"class":49},"(Student.school)\n",[14,151609,151610],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[21,151612,151614],{"id":151613},"_1113-类方法和静态方法","11.13 类方法和静态方法",[868,151616,151618],{"id":151617},"_11131-类方法","11.13.1 类方法",[14,151620,151621,151622,151625,151626,29130],{},"类方法使用 ",[33,151623,151624],{},"@classmethod","，第一个参数通常是 ",[33,151627,151628],{},"cls",[26,151630,151632],{"className":28,"code":151631,"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,151633,151634,151642,151650,151654,151662,151672,151682,151686,151690],{"__ignoreMap":31},[36,151635,151636,151638,151640],{"class":38,"line":39},[36,151637,15438],{"class":53},[36,151639,8645],{"class":2713},[36,151641,4488],{"class":49},[36,151643,151644,151646,151648],{"class":38,"line":46},[36,151645,151520],{"class":49},[36,151647,54],{"class":53},[36,151649,151525],{"class":998},[36,151651,151652],{"class":38,"line":78},[36,151653,194],{"emptyLinePlaceholder":193},[36,151655,151656,151659],{"class":38,"line":125},[36,151657,151658],{"class":2713},"    @",[36,151660,151661],{"class":60},"classmethod\n",[36,151663,151664,151666,151669],{"class":38,"line":131},[36,151665,31543],{"class":53},[36,151667,151668],{"class":2713}," get_school",[36,151670,151671],{"class":49},"(cls):\n",[36,151673,151674,151676,151679],{"class":38,"line":396},[36,151675,15496],{"class":53},[36,151677,151678],{"class":60}," cls",[36,151680,151681],{"class":49},".school\n",[36,151683,151684],{"class":38,"line":407},[36,151685,194],{"emptyLinePlaceholder":193},[36,151687,151688],{"class":38,"line":2061},[36,151689,194],{"emptyLinePlaceholder":193},[36,151691,151692,151694],{"class":38,"line":2067},[36,151693,199],{"class":60},[36,151695,151696],{"class":49},"(Student.get_school())\n",[868,151698,151700],{"id":151699},"_11132-静态方法","11.13.2 静态方法",[14,151702,151703,151704,151707],{},"静态方法使用 ",[33,151705,151706],{},"@staticmethod","，不需要访问实例和类。",[26,151709,151711],{"className":28,"code":151710,"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,151712,151713,151722,151729,151738,151749,151753,151757],{"__ignoreMap":31},[36,151714,151715,151717,151720],{"class":38,"line":39},[36,151716,15438],{"class":53},[36,151718,151719],{"class":2713}," MathUtils",[36,151721,4488],{"class":49},[36,151723,151724,151726],{"class":38,"line":46},[36,151725,151658],{"class":2713},[36,151727,151728],{"class":60},"staticmethod\n",[36,151730,151731,151733,151735],{"class":38,"line":78},[36,151732,31543],{"class":53},[36,151734,5957],{"class":2713},[36,151736,151737],{"class":49},"(a, b):\n",[36,151739,151740,151742,151744,151746],{"class":38,"line":125},[36,151741,15496],{"class":53},[36,151743,11616],{"class":49},[36,151745,1365],{"class":53},[36,151747,151748],{"class":49}," b\n",[36,151750,151751],{"class":38,"line":131},[36,151752,194],{"emptyLinePlaceholder":193},[36,151754,151755],{"class":38,"line":396},[36,151756,194],{"emptyLinePlaceholder":193},[36,151758,151759,151761,151764,151766,151768,151770],{"class":38,"line":407},[36,151760,199],{"class":60},[36,151762,151763],{"class":49},"(MathUtils.add(",[36,151765,61],{"class":60},[36,151767,154],{"class":49},[36,151769,181],{"class":60},[36,151771,31239],{"class":49},[14,151773,151774],{},"静态方法本质上是放在类命名空间里的普通函数。",[21,151776,151778],{"id":151777},"_1114-dataclass","11.14 dataclass",[14,151780,151781,151784],{},[33,151782,151783],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[26,151786,151788],{"className":28,"code":151787,"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,151789,151790,151802,151806,151810,151815,151823,151831,151839,151847,151851,151855,151875],{"__ignoreMap":31},[36,151791,151792,151794,151797,151799],{"class":38,"line":39},[36,151793,31479],{"class":53},[36,151795,151796],{"class":49}," dataclasses ",[36,151798,31135],{"class":53},[36,151800,151801],{"class":49}," dataclass\n",[36,151803,151804],{"class":38,"line":46},[36,151805,194],{"emptyLinePlaceholder":193},[36,151807,151808],{"class":38,"line":78},[36,151809,194],{"emptyLinePlaceholder":193},[36,151811,151812],{"class":38,"line":125},[36,151813,151814],{"class":2713},"@dataclass\n",[36,151816,151817,151819,151821],{"class":38,"line":131},[36,151818,15438],{"class":53},[36,151820,8645],{"class":2713},[36,151822,4488],{"class":49},[36,151824,151825,151828],{"class":38,"line":396},[36,151826,151827],{"class":49},"    name: ",[36,151829,151830],{"class":60},"str\n",[36,151832,151833,151836],{"class":38,"line":407},[36,151834,151835],{"class":49},"    age: ",[36,151837,151838],{"class":60},"int\n",[36,151840,151841,151844],{"class":38,"line":2061},[36,151842,151843],{"class":49},"    score: ",[36,151845,151846],{"class":60},"float\n",[36,151848,151849],{"class":38,"line":2067},[36,151850,194],{"emptyLinePlaceholder":193},[36,151852,151853],{"class":38,"line":2079},[36,151854,194],{"emptyLinePlaceholder":193},[36,151856,151857,151859,151861,151863,151865,151867,151869,151871,151873],{"class":38,"line":2362},[36,151858,150125],{"class":49},[36,151860,54],{"class":53},[36,151862,150529],{"class":49},[36,151864,150532],{"class":998},[36,151866,154],{"class":49},[36,151868,1532],{"class":60},[36,151870,154],{"class":49},[36,151872,1868],{"class":60},[36,151874,75],{"class":49},[36,151876,151877,151879],{"class":38,"line":2367},[36,151878,199],{"class":60},[36,151880,150686],{"class":49},[14,151882,151883,151884,1104,151886,151889],{},"它会自动生成 ",[33,151885,31571],{},[33,151887,151888],{},"__repr__"," 等方法。适合数据模型类。",[21,151891,151893],{"id":151892},"_1115-小案例学生类","11.15 小案例：学生类",[26,151895,151897],{"className":28,"code":151896,"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,151898,151899,151907,151916,151928,151938,151948,151958,151962,151971,151984,151988,151997,152003,152015,152027,152039,152051,152055,152059,152065,152075,152084,152094,152102,152110,152119,152123,152127,152135,152171,152175,152179,152204,152211],{"__ignoreMap":31},[36,151900,151901,151903,151905],{"class":38,"line":39},[36,151902,15438],{"class":53},[36,151904,8645],{"class":2713},[36,151906,4488],{"class":49},[36,151908,151909,151911,151913],{"class":38,"line":46},[36,151910,31543],{"class":53},[36,151912,31546],{"class":60},[36,151914,151915],{"class":49},"(self, student_id, name, age, score):\n",[36,151917,151918,151920,151923,151925],{"class":38,"line":78},[36,151919,31587],{"class":60},[36,151921,151922],{"class":49},".student_id ",[36,151924,54],{"class":53},[36,151926,151927],{"class":49}," student_id\n",[36,151929,151930,151932,151934,151936],{"class":38,"line":125},[36,151931,31587],{"class":60},[36,151933,150434],{"class":49},[36,151935,54],{"class":53},[36,151937,150439],{"class":49},[36,151939,151940,151942,151944,151946],{"class":38,"line":131},[36,151941,31587],{"class":60},[36,151943,150446],{"class":49},[36,151945,54],{"class":53},[36,151947,150451],{"class":49},[36,151949,151950,151952,151954,151956],{"class":38,"line":396},[36,151951,31587],{"class":60},[36,151953,150458],{"class":49},[36,151955,54],{"class":53},[36,151957,2329],{"class":49},[36,151959,151960],{"class":38,"line":407},[36,151961,194],{"emptyLinePlaceholder":193},[36,151963,151964,151966,151969],{"class":38,"line":2061},[36,151965,31543],{"class":53},[36,151967,151968],{"class":2713}," is_passed",[36,151970,31549],{"class":49},[36,151972,151973,151975,151977,151979,151981],{"class":38,"line":2067},[36,151974,15496],{"class":53},[36,151976,39615],{"class":60},[36,151978,150458],{"class":49},[36,151980,2460],{"class":53},[36,151982,151983],{"class":60}," 60\n",[36,151985,151986],{"class":38,"line":2079},[36,151987,194],{"emptyLinePlaceholder":193},[36,151989,151990,151992,151995],{"class":38,"line":2362},[36,151991,31543],{"class":53},[36,151993,151994],{"class":2713}," to_dict",[36,151996,31549],{"class":49},[36,151998,151999,152001],{"class":38,"line":2367},[36,152000,15496],{"class":53},[36,152002,16316],{"class":49},[36,152004,152005,152008,152010,152012],{"class":38,"line":2373},[36,152006,152007],{"class":998},"            \"student_id\"",[36,152009,52179],{"class":49},[36,152011,31565],{"class":60},[36,152013,152014],{"class":49},".student_id,\n",[36,152016,152017,152020,152022,152024],{"class":38,"line":2378},[36,152018,152019],{"class":998},"            \"name\"",[36,152021,52179],{"class":49},[36,152023,31565],{"class":60},[36,152025,152026],{"class":49},".name,\n",[36,152028,152029,152032,152034,152036],{"class":38,"line":2392},[36,152030,152031],{"class":998},"            \"age\"",[36,152033,52179],{"class":49},[36,152035,31565],{"class":60},[36,152037,152038],{"class":49},".age,\n",[36,152040,152041,152044,152046,152048],{"class":38,"line":2397},[36,152042,152043],{"class":998},"            \"score\"",[36,152045,52179],{"class":49},[36,152047,31565],{"class":60},[36,152049,152050],{"class":49},".score,\n",[36,152052,152053],{"class":38,"line":2403},[36,152054,3278],{"class":49},[36,152056,152057],{"class":38,"line":2424},[36,152058,194],{"emptyLinePlaceholder":193},[36,152060,152061,152063],{"class":38,"line":2429},[36,152062,151658],{"class":2713},[36,152064,151661],{"class":60},[36,152066,152067,152069,152072],{"class":38,"line":2443},[36,152068,31543],{"class":53},[36,152070,152071],{"class":2713}," from_dict",[36,152073,152074],{"class":49},"(cls, data):\n",[36,152076,152077,152079,152081],{"class":38,"line":2448},[36,152078,15496],{"class":53},[36,152080,151678],{"class":60},[36,152082,152083],{"class":49},"(\n",[36,152085,152086,152089,152092],{"class":38,"line":2477},[36,152087,152088],{"class":49},"            data[",[36,152090,152091],{"class":998},"\"student_id\"",[36,152093,88578],{"class":49},[36,152095,152096,152098,152100],{"class":38,"line":2482},[36,152097,152088],{"class":49},[36,152099,63421],{"class":998},[36,152101,88578],{"class":49},[36,152103,152104,152106,152108],{"class":38,"line":2499},[36,152105,152088],{"class":49},[36,152107,69866],{"class":998},[36,152109,88578],{"class":49},[36,152111,152112,152114,152117],{"class":38,"line":2504},[36,152113,152088],{"class":49},[36,152115,152116],{"class":998},"\"score\"",[36,152118,88578],{"class":49},[36,152120,152121],{"class":38,"line":2509},[36,152122,38868],{"class":49},[36,152124,152125],{"class":38,"line":2514},[36,152126,194],{"emptyLinePlaceholder":193},[36,152128,152129,152131,152133],{"class":38,"line":2528},[36,152130,31543],{"class":53},[36,152132,150625],{"class":60},[36,152134,31549],{"class":49},[36,152136,152137,152139,152141,152143,152145,152148,152150,152153,152155,152157,152159,152161,152163,152165,152167,152169],{"class":38,"line":2533},[36,152138,15496],{"class":53},[36,152140,150634],{"class":53},[36,152142,1141],{"class":998},[36,152144,150096],{"class":60},[36,152146,152147],{"class":49},".student_id",[36,152149,1825],{"class":60},[36,152151,152152],{"class":60}," {self",[36,152154,81043],{"class":49},[36,152156,1825],{"class":60},[36,152158,152152],{"class":60},[36,152160,81055],{"class":49},[36,152162,1825],{"class":60},[36,152164,152152],{"class":60},[36,152166,150506],{"class":49},[36,152168,1825],{"class":60},[36,152170,25878],{"class":998},[36,152172,152173],{"class":38,"line":3326},[36,152174,194],{"emptyLinePlaceholder":193},[36,152176,152177],{"class":38,"line":3340},[36,152178,194],{"emptyLinePlaceholder":193},[36,152180,152181,152183,152185,152187,152190,152192,152194,152196,152198,152200,152202],{"class":38,"line":3348},[36,152182,150125],{"class":49},[36,152184,54],{"class":53},[36,152186,150529],{"class":49},[36,152188,152189],{"class":998},"\"001\"",[36,152191,154],{"class":49},[36,152193,150532],{"class":998},[36,152195,154],{"class":49},[36,152197,1532],{"class":60},[36,152199,154],{"class":49},[36,152201,1868],{"class":60},[36,152203,75],{"class":49},[36,152205,152206,152208],{"class":38,"line":3353},[36,152207,199],{"class":60},[36,152209,152210],{"class":49},"(student.is_passed())\n",[36,152212,152213,152215],{"class":38,"line":3359},[36,152214,199],{"class":60},[36,152216,152217],{"class":49},"(student.to_dict())\n",[14,152219,152220,101662,152223,152226],{},[33,152221,152222],{},"to_dict()",[33,152224,152225],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[21,152228,152230],{"id":152229},"_1116-易错点","11.16 易错点",[851,152232,152233,152239,152245,152250,152253,152256],{},[854,152234,152235,152236,29130],{},"类名推荐使用大驼峰，如 ",[33,152237,152238],{},"StudentManager",[854,152240,152241,152242,152244],{},"方法第一个参数必须写 ",[33,152243,31565],{},"，调用时不用传。",[854,152246,152247,152249],{},[33,152248,31571],{}," 不是普通方法，它在创建对象时自动执行。",[854,152251,152252],{},"私有属性不是绝对安全，只是约定和名称改写。",[854,152254,152255],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[854,152257,152258],{},"类中方法太多时，说明职责可能过重。",[21,152260,152262],{"id":152261},"_1117-本章练习","11.17 本章练习",[851,152264,152265,152271,152277,152282,152295],{},[854,152266,152267,152268,152270],{},"定义 ",[33,152269,150212],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[854,152272,152267,152273,152276],{},[33,152274,152275],{},"Account"," 类，实现存款、取款、查询余额。",[854,152278,152267,152279,152281],{},[33,152280,17970],{}," 类，计算圆的周长和面积。",[854,152283,152267,152284,1104,152287,152290,152291,152294],{},[33,152285,152286],{},"Dog",[33,152288,152289],{},"Cat"," 类，并用同一个函数调用它们的 ",[33,152292,152293],{},"speak()"," 方法。",[854,152296,105010,152297,152299,152300,29130],{},[33,152298,151783],{}," 定义一个商品类 ",[33,152301,152302],{},"Product",[807,152304,152305],{},"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":46,"depth":46,"links":152307},[152308,152309,152310,152311,152312,152313,152315,152316,152317,152318,152319,152320,152321,152325,152326,152327,152328],{"id":149976,"depth":46,"text":149977},{"id":150159,"depth":46,"text":150160},{"id":150223,"depth":46,"text":150224},{"id":150300,"depth":46,"text":150301},{"id":150399,"depth":46,"text":150400},{"id":150563,"depth":46,"text":152314},"11.6 str",{"id":150689,"depth":46,"text":150690},{"id":150955,"depth":46,"text":150956},{"id":151069,"depth":46,"text":151070},{"id":151224,"depth":46,"text":151225},{"id":151348,"depth":46,"text":151349},{"id":151464,"depth":46,"text":151465},{"id":151613,"depth":46,"text":151614,"children":152322},[152323,152324],{"id":151617,"depth":78,"text":151618},{"id":151699,"depth":78,"text":151700},{"id":151777,"depth":46,"text":151778},{"id":151892,"depth":46,"text":151893},{"id":152229,"depth":46,"text":152230},{"id":152261,"depth":46,"text":152262},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149968,"description":823},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152335,"title":152336,"body":152337,"description":823,"extension":824,"meta":155650,"navigation":193,"path":155651,"seo":155652,"stem":155653,"__hash__":155654},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152338,"toc":155626},[152339,152342,152346,152349,152352,152381,152384,152392,152396,152400,152403,152426,152429,152435,152439,153885,153888,153909,153913,153916,153928,153931,154115,154118,154244,154247,154251,154255,154391,154395,154481,154485,154567,154571,154608,154612,154801,154805,154808,155038,155042,155045,155226,155229,155233,155236,155242,155245,155271,155275,155278,155292,155295,155320,155323,155337,155340,155357,155360,155377,155380,155397,155401,155427,155431,155454,155458,155461,155463,155469,155471,155492,155495,155501,155507,155511,155514,155590,155593,155597,155623],[10,152340,152336],{"id":152341},"_12-综合案例与复习路线",[21,152343,152345],{"id":152344},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,152347,152348],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,152350,152351],{},"一个合格的入门综合项目最好覆盖：",[851,152353,152354,152357,152360,152363,152366,152369,152372,152375,152378],{},[854,152355,152356],{},"输入输出。",[854,152358,152359],{},"判断和循环。",[854,152361,152362],{},"函数拆分。",[854,152364,152365],{},"列表、字典等容器。",[854,152367,152368],{},"文件持久化。",[854,152370,152371],{},"异常处理。",[854,152373,152374],{},"模块拆分。",[854,152376,152377],{},"可选：面向对象。",[854,152379,152380],{},"可选：数据可视化。",[14,152382,152383],{},"本章整理两个方向：",[851,152385,152386,152389],{},[854,152387,152388],{},"学生管理系统。",[854,152390,152391],{},"销售数据统计和可视化。",[21,152393,152395],{"id":152394},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[868,152397,152399],{"id":152398},"_1221-需求","12.2.1 需求",[14,152401,152402],{},"实现一个命令行学生管理系统：",[851,152404,152405,152408,152411,152414,152417,152420,152423],{},[854,152406,152407],{},"添加学生。",[854,152409,152410],{},"删除学生。",[854,152412,152413],{},"修改学生。",[854,152415,152416],{},"查询学生。",[854,152418,152419],{},"显示所有学生。",[854,152421,152422],{},"保存到 JSON 文件。",[854,152424,152425],{},"程序启动时自动读取 JSON 文件。",[14,152427,152428],{},"学生字段：",[26,152430,152433],{"className":152431,"code":152432,"language":5935,"meta":31},[5933],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[33,152434,152432],{"__ignoreMap":31},[21,152436,152438],{"id":152437},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[26,152440,152442],{"className":28,"code":152441,"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,152443,152444,152450,152460,152464,152478,152482,152486,152495,152507,152513,152517,152523,152554,152564,152571,152582,152588,152592,152596,152606,152637,152663,152667,152671,152680,152691,152702,152713,152724,152735,152746,152757,152761,152765,152775,152787,152803,152810,152817,152821,152825,152835,152843,152850,152863,152873,152884,152888,152892,152901,152909,152915,152927,152935,152946,152950,152954,152963,152979,152983,152990,153001,153006,153010,153026,153041,153056,153060,153065,153073,153081,153089,153097,153101,153106,153117,153121,153125,153134,153149,153159,153163,153175,153186,153190,153194,153199,153203,153214,153218,153222,153231,153246,153254,153258,153270,153280,153284,153288,153303,153316,153329,153333,153346,153358,153370,153374,153378,153389,153393,153397,153406,153421,153429,153433,153445,153455,153459,153463,153468,153472,153476,153486,153492,153514,153533,153552,153571,153576,153580,153584,153593,153601,153612,153616,153620,153646,153656,153661,153665,153669,153677,153687,153691,153699,153704,153720,153724,153738,153743,153757,153762,153775,153780,153793,153798,153811,153816,153829,153840,153844,153850,153861,153865,153869,153881],{"__ignoreMap":31},[36,152445,152446,152448],{"class":38,"line":39},[36,152447,31135],{"class":53},[36,152449,147735],{"class":49},[36,152451,152452,152454,152456,152458],{"class":38,"line":46},[36,152453,31479],{"class":53},[36,152455,108955],{"class":49},[36,152457,31135],{"class":53},[36,152459,108960],{"class":49},[36,152461,152462],{"class":38,"line":78},[36,152463,194],{"emptyLinePlaceholder":193},[36,152465,152466,152469,152471,152473,152476],{"class":38,"line":125},[36,152467,152468],{"class":60},"DATA_FILE",[36,152470,14308],{"class":53},[36,152472,109189],{"class":49},[36,152474,152475],{"class":998},"\"students.json\"",[36,152477,75],{"class":49},[36,152479,152480],{"class":38,"line":131},[36,152481,194],{"emptyLinePlaceholder":193},[36,152483,152484],{"class":38,"line":396},[36,152485,194],{"emptyLinePlaceholder":193},[36,152487,152488,152490,152493],{"class":38,"line":407},[36,152489,32689],{"class":53},[36,152491,152492],{"class":2713}," load_students",[36,152494,32695],{"class":49},[36,152496,152497,152499,152501,152504],{"class":38,"line":2061},[36,152498,3850],{"class":53},[36,152500,39672],{"class":53},[36,152502,152503],{"class":60}," DATA_FILE",[36,152505,152506],{"class":49},".exists():\n",[36,152508,152509,152511],{"class":38,"line":2067},[36,152510,15496],{"class":53},[36,152512,52580],{"class":49},[36,152514,152515],{"class":38,"line":2079},[36,152516,194],{"emptyLinePlaceholder":193},[36,152518,152519,152521],{"class":38,"line":2362},[36,152520,126428],{"class":53},[36,152522,4488],{"class":49},[36,152524,152525,152528,152530,152532,152534,152536,152538,152540,152542,152544,152546,152548,152550,152552],{"class":38,"line":2367},[36,152526,152527],{"class":53},"        with",[36,152529,147435],{"class":60},[36,152531,901],{"class":49},[36,152533,152468],{"class":60},[36,152535,154],{"class":49},[36,152537,147445],{"class":998},[36,152539,154],{"class":49},[36,152541,147450],{"class":416},[36,152543,54],{"class":53},[36,152545,147455],{"class":998},[36,152547,14458],{"class":49},[36,152549,32125],{"class":53},[36,152551,148797],{"class":416},[36,152553,4488],{"class":49},[36,152555,152556,152558,152560,152562],{"class":38,"line":2373},[36,152557,16476],{"class":53},[36,152559,148808],{"class":49},[36,152561,46096],{"class":416},[36,152563,75],{"class":49},[36,152565,152566,152568],{"class":38,"line":2378},[36,152567,126456],{"class":53},[36,152569,152570],{"class":49}," json.JSONDecodeError:\n",[36,152572,152573,152575,152577,152580],{"class":38,"line":2392},[36,152574,33193],{"class":60},[36,152576,901],{"class":49},[36,152578,152579],{"class":998},"\"数据文件格式错误，已使用空数据启动\"",[36,152581,75],{"class":49},[36,152583,152584,152586],{"class":38,"line":2397},[36,152585,15496],{"class":53},[36,152587,52580],{"class":49},[36,152589,152590],{"class":38,"line":2403},[36,152591,194],{"emptyLinePlaceholder":193},[36,152593,152594],{"class":38,"line":2424},[36,152595,194],{"emptyLinePlaceholder":193},[36,152597,152598,152600,152603],{"class":38,"line":2429},[36,152599,32689],{"class":53},[36,152601,152602],{"class":2713}," save_students",[36,152604,152605],{"class":49},"(students):\n",[36,152607,152608,152610,152612,152614,152616,152618,152621,152623,152625,152627,152629,152631,152633,152635],{"class":38,"line":2443},[36,152609,34920],{"class":53},[36,152611,147435],{"class":60},[36,152613,901],{"class":49},[36,152615,152468],{"class":60},[36,152617,154],{"class":49},[36,152619,152620],{"class":998},"\"w\"",[36,152622,154],{"class":49},[36,152624,147450],{"class":416},[36,152626,54],{"class":53},[36,152628,147455],{"class":998},[36,152630,14458],{"class":49},[36,152632,32125],{"class":53},[36,152634,148797],{"class":416},[36,152636,4488],{"class":49},[36,152638,152639,152642,152644,152646,152648,152650,152652,152654,152657,152659,152661],{"class":38,"line":2448},[36,152640,152641],{"class":49},"        json.dump(students, ",[36,152643,46096],{"class":416},[36,152645,154],{"class":49},[36,152647,147781],{"class":416},[36,152649,54],{"class":53},[36,152651,34729],{"class":60},[36,152653,154],{"class":49},[36,152655,152656],{"class":416},"indent",[36,152658,54],{"class":53},[36,152660,181],{"class":60},[36,152662,75],{"class":49},[36,152664,152665],{"class":38,"line":2477},[36,152666,194],{"emptyLinePlaceholder":193},[36,152668,152669],{"class":38,"line":2482},[36,152670,194],{"emptyLinePlaceholder":193},[36,152672,152673,152675,152678],{"class":38,"line":2499},[36,152674,32689],{"class":53},[36,152676,152677],{"class":2713}," show_menu",[36,152679,32695],{"class":49},[36,152681,152682,152684,152686,152689],{"class":38,"line":2504},[36,152683,32041],{"class":60},[36,152685,901],{"class":49},[36,152687,152688],{"class":998},"\"====== 学生管理系统 ======\"",[36,152690,75],{"class":49},[36,152692,152693,152695,152697,152700],{"class":38,"line":2509},[36,152694,32041],{"class":60},[36,152696,901],{"class":49},[36,152698,152699],{"class":998},"\"1. 添加学生\"",[36,152701,75],{"class":49},[36,152703,152704,152706,152708,152711],{"class":38,"line":2514},[36,152705,32041],{"class":60},[36,152707,901],{"class":49},[36,152709,152710],{"class":998},"\"2. 删除学生\"",[36,152712,75],{"class":49},[36,152714,152715,152717,152719,152722],{"class":38,"line":2528},[36,152716,32041],{"class":60},[36,152718,901],{"class":49},[36,152720,152721],{"class":998},"\"3. 修改学生\"",[36,152723,75],{"class":49},[36,152725,152726,152728,152730,152733],{"class":38,"line":2533},[36,152727,32041],{"class":60},[36,152729,901],{"class":49},[36,152731,152732],{"class":998},"\"4. 查询学生\"",[36,152734,75],{"class":49},[36,152736,152737,152739,152741,152744],{"class":38,"line":3326},[36,152738,32041],{"class":60},[36,152740,901],{"class":49},[36,152742,152743],{"class":998},"\"5. 显示所有学生\"",[36,152745,75],{"class":49},[36,152747,152748,152750,152752,152755],{"class":38,"line":3340},[36,152749,32041],{"class":60},[36,152751,901],{"class":49},[36,152753,152754],{"class":998},"\"0. 退出系统\"",[36,152756,75],{"class":49},[36,152758,152759],{"class":38,"line":3348},[36,152760,194],{"emptyLinePlaceholder":193},[36,152762,152763],{"class":38,"line":3353},[36,152764,194],{"emptyLinePlaceholder":193},[36,152766,152767,152769,152772],{"class":38,"line":3359},[36,152768,32689],{"class":53},[36,152770,152771],{"class":2713}," find_student",[36,152773,152774],{"class":49},"(students, student_id):\n",[36,152776,152777,152779,152782,152784],{"class":38,"line":3365},[36,152778,3950],{"class":53},[36,152780,152781],{"class":49}," student ",[36,152783,26788],{"class":53},[36,152785,152786],{"class":49}," students:\n",[36,152788,152789,152791,152794,152796,152798,152800],{"class":38,"line":3370},[36,152790,3246],{"class":53},[36,152792,152793],{"class":49}," student[",[36,152795,152091],{"class":998},[36,152797,5192],{"class":49},[36,152799,3698],{"class":53},[36,152801,152802],{"class":49}," student_id:\n",[36,152804,152805,152807],{"class":38,"line":8695},[36,152806,16476],{"class":53},[36,152808,152809],{"class":49}," student\n",[36,152811,152812,152814],{"class":38,"line":8719},[36,152813,4839],{"class":53},[36,152815,152816],{"class":60}," None\n",[36,152818,152819],{"class":38,"line":8724},[36,152820,194],{"emptyLinePlaceholder":193},[36,152822,152823],{"class":38,"line":8730},[36,152824,194],{"emptyLinePlaceholder":193},[36,152826,152827,152829,152832],{"class":38,"line":8757},[36,152828,32689],{"class":53},[36,152830,152831],{"class":2713}," input_int",[36,152833,152834],{"class":49},"(prompt):\n",[36,152836,152837,152839,152841],{"class":38,"line":8762},[36,152838,3001],{"class":53},[36,152840,95936],{"class":60},[36,152842,4488],{"class":49},[36,152844,152845,152848],{"class":38,"line":8768},[36,152846,152847],{"class":53},"        try",[36,152849,4488],{"class":49},[36,152851,152852,152854,152856,152858,152860],{"class":38,"line":8780},[36,152853,16476],{"class":53},[36,152855,3132],{"class":60},[36,152857,901],{"class":49},[36,152859,54563],{"class":60},[36,152861,152862],{"class":49},"(prompt))\n",[36,152864,152865,152868,152871],{"class":38,"line":8792},[36,152866,152867],{"class":53},"        except",[36,152869,152870],{"class":60}," ValueError",[36,152872,4488],{"class":49},[36,152874,152875,152877,152879,152882],{"class":38,"line":8804},[36,152876,35392],{"class":60},[36,152878,901],{"class":49},[36,152880,152881],{"class":998},"\"请输入整数\"",[36,152883,75],{"class":49},[36,152885,152886],{"class":38,"line":10463},[36,152887,194],{"emptyLinePlaceholder":193},[36,152889,152890],{"class":38,"line":10488},[36,152891,194],{"emptyLinePlaceholder":193},[36,152893,152894,152896,152899],{"class":38,"line":10511},[36,152895,32689],{"class":53},[36,152897,152898],{"class":2713}," input_float",[36,152900,152834],{"class":49},[36,152902,152903,152905,152907],{"class":38,"line":10535},[36,152904,3001],{"class":53},[36,152906,95936],{"class":60},[36,152908,4488],{"class":49},[36,152910,152911,152913],{"class":38,"line":10540},[36,152912,152847],{"class":53},[36,152914,4488],{"class":49},[36,152916,152917,152919,152921,152923,152925],{"class":38,"line":10545},[36,152918,16476],{"class":53},[36,152920,110441],{"class":60},[36,152922,901],{"class":49},[36,152924,54563],{"class":60},[36,152926,152862],{"class":49},[36,152928,152929,152931,152933],{"class":38,"line":10550},[36,152930,152867],{"class":53},[36,152932,152870],{"class":60},[36,152934,4488],{"class":49},[36,152936,152937,152939,152941,152944],{"class":38,"line":10559},[36,152938,35392],{"class":60},[36,152940,901],{"class":49},[36,152942,152943],{"class":998},"\"请输入数字\"",[36,152945,75],{"class":49},[36,152947,152948],{"class":38,"line":10564},[36,152949,194],{"emptyLinePlaceholder":193},[36,152951,152952],{"class":38,"line":10570},[36,152953,194],{"emptyLinePlaceholder":193},[36,152955,152956,152958,152961],{"class":38,"line":10591},[36,152957,32689],{"class":53},[36,152959,152960],{"class":2713}," add_student",[36,152962,152605],{"class":49},[36,152964,152965,152968,152970,152972,152974,152977],{"class":38,"line":10597},[36,152966,152967],{"class":49},"    student_id ",[36,152969,54],{"class":53},[36,152971,61347],{"class":60},[36,152973,901],{"class":49},[36,152975,152976],{"class":998},"\"请输入学号:\"",[36,152978,75],{"class":49},[36,152980,152981],{"class":38,"line":10611},[36,152982,194],{"emptyLinePlaceholder":193},[36,152984,152985,152987],{"class":38,"line":10617},[36,152986,3850],{"class":53},[36,152988,152989],{"class":49}," find_student(students, student_id):\n",[36,152991,152992,152994,152996,152999],{"class":38,"line":10644},[36,152993,33193],{"class":60},[36,152995,901],{"class":49},[36,152997,152998],{"class":998},"\"学号已存在\"",[36,153000,75],{"class":49},[36,153002,153003],{"class":38,"line":10653},[36,153004,153005],{"class":53},"        return\n",[36,153007,153008],{"class":38,"line":10659},[36,153009,194],{"emptyLinePlaceholder":193},[36,153011,153012,153015,153017,153019,153021,153024],{"class":38,"line":10667},[36,153013,153014],{"class":49},"    name ",[36,153016,54],{"class":53},[36,153018,61347],{"class":60},[36,153020,901],{"class":49},[36,153022,153023],{"class":998},"\"请输入姓名:\"",[36,153025,75],{"class":49},[36,153027,153028,153031,153033,153036,153039],{"class":38,"line":10672},[36,153029,153030],{"class":49},"    age ",[36,153032,54],{"class":53},[36,153034,153035],{"class":49}," input_int(",[36,153037,153038],{"class":998},"\"请输入年龄:\"",[36,153040,75],{"class":49},[36,153042,153043,153046,153048,153051,153054],{"class":38,"line":17348},[36,153044,153045],{"class":49},"    score ",[36,153047,54],{"class":53},[36,153049,153050],{"class":49}," input_float(",[36,153052,153053],{"class":998},"\"请输入成绩:\"",[36,153055,75],{"class":49},[36,153057,153058],{"class":38,"line":17354},[36,153059,194],{"emptyLinePlaceholder":193},[36,153061,153062],{"class":38,"line":17377},[36,153063,153064],{"class":49},"    students.append({\n",[36,153066,153067,153070],{"class":38,"line":17383},[36,153068,153069],{"class":998},"        \"student_id\"",[36,153071,153072],{"class":49},": student_id,\n",[36,153074,153075,153078],{"class":38,"line":17406},[36,153076,153077],{"class":998},"        \"name\"",[36,153079,153080],{"class":49},": name,\n",[36,153082,153083,153086],{"class":38,"line":17420},[36,153084,153085],{"class":998},"        \"age\"",[36,153087,153088],{"class":49},": age,\n",[36,153090,153091,153094],{"class":38,"line":17440},[36,153092,153093],{"class":998},"        \"score\"",[36,153095,153096],{"class":49},": score,\n",[36,153098,153099],{"class":38,"line":17446},[36,153100,34203],{"class":49},[36,153102,153103],{"class":38,"line":17457},[36,153104,153105],{"class":49},"    save_students(students)\n",[36,153107,153108,153110,153112,153115],{"class":38,"line":17480},[36,153109,32041],{"class":60},[36,153111,901],{"class":49},[36,153113,153114],{"class":998},"\"添加成功\"",[36,153116,75],{"class":49},[36,153118,153119],{"class":38,"line":17502},[36,153120,194],{"emptyLinePlaceholder":193},[36,153122,153123],{"class":38,"line":17507},[36,153124,194],{"emptyLinePlaceholder":193},[36,153126,153127,153129,153132],{"class":38,"line":17513},[36,153128,32689],{"class":53},[36,153130,153131],{"class":2713}," delete_student",[36,153133,152605],{"class":49},[36,153135,153136,153138,153140,153142,153144,153147],{"class":38,"line":17527},[36,153137,152967],{"class":49},[36,153139,54],{"class":53},[36,153141,61347],{"class":60},[36,153143,901],{"class":49},[36,153145,153146],{"class":998},"\"请输入要删除的学号:\"",[36,153148,75],{"class":49},[36,153150,153151,153154,153156],{"class":38,"line":17540},[36,153152,153153],{"class":49},"    student ",[36,153155,54],{"class":53},[36,153157,153158],{"class":49}," find_student(students, student_id)\n",[36,153160,153161],{"class":38,"line":17545},[36,153162,194],{"emptyLinePlaceholder":193},[36,153164,153165,153167,153169,153171,153173],{"class":38,"line":17559},[36,153166,3850],{"class":53},[36,153168,152781],{"class":49},[36,153170,39669],{"class":53},[36,153172,39675],{"class":60},[36,153174,4488],{"class":49},[36,153176,153177,153179,153181,153184],{"class":38,"line":17564},[36,153178,33193],{"class":60},[36,153180,901],{"class":49},[36,153182,153183],{"class":998},"\"学生不存在\"",[36,153185,75],{"class":49},[36,153187,153188],{"class":38,"line":17570},[36,153189,153005],{"class":53},[36,153191,153192],{"class":38,"line":17575},[36,153193,194],{"emptyLinePlaceholder":193},[36,153195,153196],{"class":38,"line":17589},[36,153197,153198],{"class":49},"    students.remove(student)\n",[36,153200,153201],{"class":38,"line":17594},[36,153202,153105],{"class":49},[36,153204,153205,153207,153209,153212],{"class":38,"line":17599},[36,153206,32041],{"class":60},[36,153208,901],{"class":49},[36,153210,153211],{"class":998},"\"删除成功\"",[36,153213,75],{"class":49},[36,153215,153216],{"class":38,"line":17613},[36,153217,194],{"emptyLinePlaceholder":193},[36,153219,153220],{"class":38,"line":17625},[36,153221,194],{"emptyLinePlaceholder":193},[36,153223,153224,153226,153229],{"class":38,"line":17630},[36,153225,32689],{"class":53},[36,153227,153228],{"class":2713}," update_student",[36,153230,152605],{"class":49},[36,153232,153233,153235,153237,153239,153241,153244],{"class":38,"line":17643},[36,153234,152967],{"class":49},[36,153236,54],{"class":53},[36,153238,61347],{"class":60},[36,153240,901],{"class":49},[36,153242,153243],{"class":998},"\"请输入要修改的学号:\"",[36,153245,75],{"class":49},[36,153247,153248,153250,153252],{"class":38,"line":17648},[36,153249,153153],{"class":49},[36,153251,54],{"class":53},[36,153253,153158],{"class":49},[36,153255,153256],{"class":38,"line":17653},[36,153257,194],{"emptyLinePlaceholder":193},[36,153259,153260,153262,153264,153266,153268],{"class":38,"line":17658},[36,153261,3850],{"class":53},[36,153263,152781],{"class":49},[36,153265,39669],{"class":53},[36,153267,39675],{"class":60},[36,153269,4488],{"class":49},[36,153271,153272,153274,153276,153278],{"class":38,"line":17671},[36,153273,33193],{"class":60},[36,153275,901],{"class":49},[36,153277,153183],{"class":998},[36,153279,75],{"class":49},[36,153281,153282],{"class":38,"line":17676},[36,153283,153005],{"class":53},[36,153285,153286],{"class":38,"line":33375},[36,153287,194],{"emptyLinePlaceholder":193},[36,153289,153290,153292,153294,153296,153298,153301],{"class":38,"line":33381},[36,153291,153014],{"class":49},[36,153293,54],{"class":53},[36,153295,61347],{"class":60},[36,153297,901],{"class":49},[36,153299,153300],{"class":998},"\"请输入新姓名:\"",[36,153302,75],{"class":49},[36,153304,153305,153307,153309,153311,153314],{"class":38,"line":33387},[36,153306,153030],{"class":49},[36,153308,54],{"class":53},[36,153310,153035],{"class":49},[36,153312,153313],{"class":998},"\"请输入新年龄:\"",[36,153315,75],{"class":49},[36,153317,153318,153320,153322,153324,153327],{"class":38,"line":33393},[36,153319,153045],{"class":49},[36,153321,54],{"class":53},[36,153323,153050],{"class":49},[36,153325,153326],{"class":998},"\"请输入新成绩:\"",[36,153328,75],{"class":49},[36,153330,153331],{"class":38,"line":33399},[36,153332,194],{"emptyLinePlaceholder":193},[36,153334,153335,153338,153340,153342,153344],{"class":38,"line":33410},[36,153336,153337],{"class":49},"    student[",[36,153339,63421],{"class":998},[36,153341,5192],{"class":49},[36,153343,54],{"class":53},[36,153345,150439],{"class":49},[36,153347,153348,153350,153352,153354,153356],{"class":38,"line":33416},[36,153349,153337],{"class":49},[36,153351,69866],{"class":998},[36,153353,5192],{"class":49},[36,153355,54],{"class":53},[36,153357,150451],{"class":49},[36,153359,153360,153362,153364,153366,153368],{"class":38,"line":33436},[36,153361,153337],{"class":49},[36,153363,152116],{"class":998},[36,153365,5192],{"class":49},[36,153367,54],{"class":53},[36,153369,2329],{"class":49},[36,153371,153372],{"class":38,"line":33442},[36,153373,194],{"emptyLinePlaceholder":193},[36,153375,153376],{"class":38,"line":33453},[36,153377,153105],{"class":49},[36,153379,153380,153382,153384,153387],{"class":38,"line":33459},[36,153381,32041],{"class":60},[36,153383,901],{"class":49},[36,153385,153386],{"class":998},"\"修改成功\"",[36,153388,75],{"class":49},[36,153390,153391],{"class":38,"line":33465},[36,153392,194],{"emptyLinePlaceholder":193},[36,153394,153395],{"class":38,"line":33471},[36,153396,194],{"emptyLinePlaceholder":193},[36,153398,153399,153401,153404],{"class":38,"line":33477},[36,153400,32689],{"class":53},[36,153402,153403],{"class":2713}," query_student",[36,153405,152605],{"class":49},[36,153407,153408,153410,153412,153414,153416,153419],{"class":38,"line":33483},[36,153409,152967],{"class":49},[36,153411,54],{"class":53},[36,153413,61347],{"class":60},[36,153415,901],{"class":49},[36,153417,153418],{"class":998},"\"请输入要查询的学号:\"",[36,153420,75],{"class":49},[36,153422,153423,153425,153427],{"class":38,"line":33489},[36,153424,153153],{"class":49},[36,153426,54],{"class":53},[36,153428,153158],{"class":49},[36,153430,153431],{"class":38,"line":33495},[36,153432,194],{"emptyLinePlaceholder":193},[36,153434,153435,153437,153439,153441,153443],{"class":38,"line":33515},[36,153436,3850],{"class":53},[36,153438,152781],{"class":49},[36,153440,39669],{"class":53},[36,153442,39675],{"class":60},[36,153444,4488],{"class":49},[36,153446,153447,153449,153451,153453],{"class":38,"line":33521},[36,153448,33193],{"class":60},[36,153450,901],{"class":49},[36,153452,153183],{"class":998},[36,153454,75],{"class":49},[36,153456,153457],{"class":38,"line":33537},[36,153458,153005],{"class":53},[36,153460,153461],{"class":38,"line":33543},[36,153462,194],{"emptyLinePlaceholder":193},[36,153464,153465],{"class":38,"line":33557},[36,153466,153467],{"class":49},"    print_student(student)\n",[36,153469,153470],{"class":38,"line":33563},[36,153471,194],{"emptyLinePlaceholder":193},[36,153473,153474],{"class":38,"line":33578},[36,153475,194],{"emptyLinePlaceholder":193},[36,153477,153478,153480,153483],{"class":38,"line":33584},[36,153479,32689],{"class":53},[36,153481,153482],{"class":2713}," print_student",[36,153484,153485],{"class":49},"(student):\n",[36,153487,153488,153490],{"class":38,"line":33593},[36,153489,32041],{"class":60},[36,153491,152083],{"class":49},[36,153493,153494,153497,153499,153501,153504,153507,153509,153512],{"class":38,"line":33599},[36,153495,153496],{"class":53},"        f",[36,153498,1141],{"class":998},[36,153500,1775],{"class":60},[36,153502,153503],{"class":49},"student[",[36,153505,153506],{"class":998},"'student_id'",[36,153508,1819],{"class":49},[36,153510,153511],{"class":60},"}\\t",[36,153513,25878],{"class":998},[36,153515,153516,153518,153520,153522,153524,153527,153529,153531],{"class":38,"line":33608},[36,153517,153496],{"class":53},[36,153519,1141],{"class":998},[36,153521,1775],{"class":60},[36,153523,153503],{"class":49},[36,153525,153526],{"class":998},"'name'",[36,153528,1819],{"class":49},[36,153530,153511],{"class":60},[36,153532,25878],{"class":998},[36,153534,153535,153537,153539,153541,153543,153546,153548,153550],{"class":38,"line":33614},[36,153536,153496],{"class":53},[36,153538,1141],{"class":998},[36,153540,1775],{"class":60},[36,153542,153503],{"class":49},[36,153544,153545],{"class":998},"'age'",[36,153547,1819],{"class":49},[36,153549,153511],{"class":60},[36,153551,25878],{"class":998},[36,153553,153554,153556,153558,153560,153562,153565,153567,153569],{"class":38,"line":33620},[36,153555,153496],{"class":53},[36,153557,1141],{"class":998},[36,153559,1775],{"class":60},[36,153561,153503],{"class":49},[36,153563,153564],{"class":998},"'score'",[36,153566,1819],{"class":49},[36,153568,1825],{"class":60},[36,153570,25878],{"class":998},[36,153572,153573],{"class":38,"line":33629},[36,153574,153575],{"class":49},"    )\n",[36,153577,153578],{"class":38,"line":33635},[36,153579,194],{"emptyLinePlaceholder":193},[36,153581,153582],{"class":38,"line":33646},[36,153583,194],{"emptyLinePlaceholder":193},[36,153585,153586,153588,153591],{"class":38,"line":33652},[36,153587,32689],{"class":53},[36,153589,153590],{"class":2713}," show_all_students",[36,153592,152605],{"class":49},[36,153594,153595,153597,153599],{"class":38,"line":33671},[36,153596,3850],{"class":53},[36,153598,39672],{"class":53},[36,153600,152786],{"class":49},[36,153602,153603,153605,153607,153610],{"class":38,"line":33677},[36,153604,33193],{"class":60},[36,153606,901],{"class":49},[36,153608,153609],{"class":998},"\"暂无学生\"",[36,153611,75],{"class":49},[36,153613,153614],{"class":38,"line":33688},[36,153615,153005],{"class":53},[36,153617,153618],{"class":38,"line":33694},[36,153619,194],{"emptyLinePlaceholder":193},[36,153621,153622,153624,153626,153629,153631,153634,153636,153639,153641,153644],{"class":38,"line":33714},[36,153623,32041],{"class":60},[36,153625,901],{"class":49},[36,153627,153628],{"class":998},"\"学号",[36,153630,1980],{"class":60},[36,153632,153633],{"class":998},"姓名",[36,153635,1980],{"class":60},[36,153637,153638],{"class":998},"年龄",[36,153640,1980],{"class":60},[36,153642,153643],{"class":998},"成绩\"",[36,153645,75],{"class":49},[36,153647,153648,153650,153652,153654],{"class":38,"line":33730},[36,153649,3950],{"class":53},[36,153651,152781],{"class":49},[36,153653,26788],{"class":53},[36,153655,152786],{"class":49},[36,153657,153658],{"class":38,"line":33736},[36,153659,153660],{"class":49},"        print_student(student)\n",[36,153662,153663],{"class":38,"line":33750},[36,153664,194],{"emptyLinePlaceholder":193},[36,153666,153667],{"class":38,"line":33756},[36,153668,194],{"emptyLinePlaceholder":193},[36,153670,153671,153673,153675],{"class":38,"line":33762},[36,153672,32689],{"class":53},[36,153674,2723],{"class":2713},[36,153676,32695],{"class":49},[36,153678,153679,153682,153684],{"class":38,"line":33773},[36,153680,153681],{"class":49},"    students ",[36,153683,54],{"class":53},[36,153685,153686],{"class":49}," load_students()\n",[36,153688,153689],{"class":38,"line":33779},[36,153690,194],{"emptyLinePlaceholder":193},[36,153692,153693,153695,153697],{"class":38,"line":33785},[36,153694,3001],{"class":53},[36,153696,95936],{"class":60},[36,153698,4488],{"class":49},[36,153700,153701],{"class":38,"line":33795},[36,153702,153703],{"class":49},"        show_menu()\n",[36,153705,153706,153709,153711,153713,153715,153718],{"class":38,"line":33801},[36,153707,153708],{"class":49},"        choice ",[36,153710,54],{"class":53},[36,153712,61347],{"class":60},[36,153714,901],{"class":49},[36,153716,153717],{"class":998},"\"请输入操作:\"",[36,153719,75],{"class":49},[36,153721,153722],{"class":38,"line":33812},[36,153723,194],{"emptyLinePlaceholder":193},[36,153725,153726,153728,153731,153733,153736],{"class":38,"line":33818},[36,153727,3246],{"class":53},[36,153729,153730],{"class":49}," choice ",[36,153732,3698],{"class":53},[36,153734,153735],{"class":998}," \"1\"",[36,153737,4488],{"class":49},[36,153739,153740],{"class":38,"line":33828},[36,153741,153742],{"class":49},"            add_student(students)\n",[36,153744,153745,153748,153750,153752,153755],{"class":38,"line":33833},[36,153746,153747],{"class":53},"        elif",[36,153749,153730],{"class":49},[36,153751,3698],{"class":53},[36,153753,153754],{"class":998}," \"2\"",[36,153756,4488],{"class":49},[36,153758,153759],{"class":38,"line":33839},[36,153760,153761],{"class":49},"            delete_student(students)\n",[36,153763,153764,153766,153768,153770,153773],{"class":38,"line":33888},[36,153765,153747],{"class":53},[36,153767,153730],{"class":49},[36,153769,3698],{"class":53},[36,153771,153772],{"class":998}," \"3\"",[36,153774,4488],{"class":49},[36,153776,153777],{"class":38,"line":33935},[36,153778,153779],{"class":49},"            update_student(students)\n",[36,153781,153782,153784,153786,153788,153791],{"class":38,"line":33940},[36,153783,153747],{"class":53},[36,153785,153730],{"class":49},[36,153787,3698],{"class":53},[36,153789,153790],{"class":998}," \"4\"",[36,153792,4488],{"class":49},[36,153794,153795],{"class":38,"line":33946},[36,153796,153797],{"class":49},"            query_student(students)\n",[36,153799,153800,153802,153804,153806,153809],{"class":38,"line":33965},[36,153801,153747],{"class":53},[36,153803,153730],{"class":49},[36,153805,3698],{"class":53},[36,153807,153808],{"class":998}," \"5\"",[36,153810,4488],{"class":49},[36,153812,153813],{"class":38,"line":33971},[36,153814,153815],{"class":49},"            show_all_students(students)\n",[36,153817,153818,153820,153822,153824,153827],{"class":38,"line":33991},[36,153819,153747],{"class":53},[36,153821,153730],{"class":49},[36,153823,3698],{"class":53},[36,153825,153826],{"class":998}," \"0\"",[36,153828,4488],{"class":49},[36,153830,153831,153833,153835,153838],{"class":38,"line":33997},[36,153832,35392],{"class":60},[36,153834,901],{"class":49},[36,153836,153837],{"class":998},"\"退出系统\"",[36,153839,75],{"class":49},[36,153841,153842],{"class":38,"line":34003},[36,153843,115742],{"class":53},[36,153845,153846,153848],{"class":38,"line":34013},[36,153847,3283],{"class":53},[36,153849,4488],{"class":49},[36,153851,153852,153854,153856,153859],{"class":38,"line":34018},[36,153853,35392],{"class":60},[36,153855,901],{"class":49},[36,153857,153858],{"class":998},"\"输入错误\"",[36,153860,75],{"class":49},[36,153862,153863],{"class":38,"line":34024},[36,153864,194],{"emptyLinePlaceholder":193},[36,153866,153867],{"class":38,"line":34040},[36,153868,194],{"emptyLinePlaceholder":193},[36,153870,153871,153873,153875,153877,153879],{"class":38,"line":34085},[36,153872,2281],{"class":53},[36,153874,31962],{"class":60},[36,153876,102203],{"class":53},[36,153878,102206],{"class":998},[36,153880,4488],{"class":49},[36,153882,153883],{"class":38,"line":34091},[36,153884,102213],{"class":49},[14,153886,153887],{},"这个项目串联了：",[851,153889,153890,153893,153896,153899,153902,153904],{},[854,153891,153892],{},"菜单循环。",[854,153894,153895],{},"函数封装。",[854,153897,153898],{},"列表字典。",[854,153900,153901],{},"JSON 读写。",[854,153903,152371],{},[854,153905,153906,29130],{},[33,153907,153908],{},"if __name__ == \"__main__\"",[21,153910,153912],{"id":153911},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153914,153915],{},"可以进一步拆成两个类：",[851,153917,153918,153923],{},[854,153919,153920,153922],{},[33,153921,150212],{},"：表示单个学生。",[854,153924,153925,153927],{},[33,153926,152238],{},"：负责学生增删改查和文件保存。",[14,153929,153930],{},"示意代码：",[26,153932,153934],{"className":28,"code":153933,"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,153935,153936,153946,153950,153954,153958,153966,153973,153979,153985,153991,153995,154003,154009,154019,154029,154039,154049,154053,154057,154063,154071,154079,154087,154095,154103,154111],{"__ignoreMap":31},[36,153937,153938,153940,153942,153944],{"class":38,"line":39},[36,153939,31479],{"class":53},[36,153941,151796],{"class":49},[36,153943,31135],{"class":53},[36,153945,151801],{"class":49},[36,153947,153948],{"class":38,"line":46},[36,153949,194],{"emptyLinePlaceholder":193},[36,153951,153952],{"class":38,"line":78},[36,153953,194],{"emptyLinePlaceholder":193},[36,153955,153956],{"class":38,"line":125},[36,153957,151814],{"class":2713},[36,153959,153960,153962,153964],{"class":38,"line":131},[36,153961,15438],{"class":53},[36,153963,8645],{"class":2713},[36,153965,4488],{"class":49},[36,153967,153968,153971],{"class":38,"line":396},[36,153969,153970],{"class":49},"    student_id: ",[36,153972,151830],{"class":60},[36,153974,153975,153977],{"class":38,"line":407},[36,153976,151827],{"class":49},[36,153978,151830],{"class":60},[36,153980,153981,153983],{"class":38,"line":2061},[36,153982,151835],{"class":49},[36,153984,151838],{"class":60},[36,153986,153987,153989],{"class":38,"line":2067},[36,153988,151843],{"class":49},[36,153990,151846],{"class":60},[36,153992,153993],{"class":38,"line":2079},[36,153994,194],{"emptyLinePlaceholder":193},[36,153996,153997,153999,154001],{"class":38,"line":2362},[36,153998,31543],{"class":53},[36,154000,151994],{"class":2713},[36,154002,31549],{"class":49},[36,154004,154005,154007],{"class":38,"line":2367},[36,154006,15496],{"class":53},[36,154008,16316],{"class":49},[36,154010,154011,154013,154015,154017],{"class":38,"line":2373},[36,154012,152007],{"class":998},[36,154014,52179],{"class":49},[36,154016,31565],{"class":60},[36,154018,152014],{"class":49},[36,154020,154021,154023,154025,154027],{"class":38,"line":2378},[36,154022,152019],{"class":998},[36,154024,52179],{"class":49},[36,154026,31565],{"class":60},[36,154028,152026],{"class":49},[36,154030,154031,154033,154035,154037],{"class":38,"line":2392},[36,154032,152031],{"class":998},[36,154034,52179],{"class":49},[36,154036,31565],{"class":60},[36,154038,152038],{"class":49},[36,154040,154041,154043,154045,154047],{"class":38,"line":2397},[36,154042,152043],{"class":998},[36,154044,52179],{"class":49},[36,154046,31565],{"class":60},[36,154048,152050],{"class":49},[36,154050,154051],{"class":38,"line":2403},[36,154052,3278],{"class":49},[36,154054,154055],{"class":38,"line":2424},[36,154056,194],{"emptyLinePlaceholder":193},[36,154058,154059,154061],{"class":38,"line":2429},[36,154060,151658],{"class":2713},[36,154062,151661],{"class":60},[36,154064,154065,154067,154069],{"class":38,"line":2443},[36,154066,31543],{"class":53},[36,154068,152071],{"class":2713},[36,154070,152074],{"class":49},[36,154072,154073,154075,154077],{"class":38,"line":2448},[36,154074,15496],{"class":53},[36,154076,151678],{"class":60},[36,154078,152083],{"class":49},[36,154080,154081,154083,154085],{"class":38,"line":2477},[36,154082,152088],{"class":49},[36,154084,152091],{"class":998},[36,154086,88578],{"class":49},[36,154088,154089,154091,154093],{"class":38,"line":2482},[36,154090,152088],{"class":49},[36,154092,63421],{"class":998},[36,154094,88578],{"class":49},[36,154096,154097,154099,154101],{"class":38,"line":2499},[36,154098,152088],{"class":49},[36,154100,69866],{"class":998},[36,154102,88578],{"class":49},[36,154104,154105,154107,154109],{"class":38,"line":2504},[36,154106,152088],{"class":49},[36,154108,152116],{"class":998},[36,154110,88578],{"class":49},[36,154112,154113],{"class":38,"line":2509},[36,154114,38868],{"class":49},[14,154116,154117],{},"管理器示意：",[26,154119,154121],{"className":28,"code":154120,"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,154122,154123,154132,154140,154151,154155,154165,154178,154189,154196,154202,154206,154215,154224,154230,154237],{"__ignoreMap":31},[36,154124,154125,154127,154130],{"class":38,"line":39},[36,154126,15438],{"class":53},[36,154128,154129],{"class":2713}," StudentManager",[36,154131,4488],{"class":49},[36,154133,154134,154136,154138],{"class":38,"line":46},[36,154135,31543],{"class":53},[36,154137,31546],{"class":60},[36,154139,31549],{"class":49},[36,154141,154142,154144,154147,154149],{"class":38,"line":78},[36,154143,31587],{"class":60},[36,154145,154146],{"class":49},".students ",[36,154148,54],{"class":53},[36,154150,52580],{"class":49},[36,154152,154153],{"class":38,"line":125},[36,154154,194],{"emptyLinePlaceholder":193},[36,154156,154157,154159,154162],{"class":38,"line":131},[36,154158,31543],{"class":53},[36,154160,154161],{"class":2713}," find_by_id",[36,154163,154164],{"class":49},"(self, student_id):\n",[36,154166,154167,154169,154171,154173,154175],{"class":38,"line":396},[36,154168,4152],{"class":53},[36,154170,152781],{"class":49},[36,154172,26788],{"class":53},[36,154174,39615],{"class":60},[36,154176,154177],{"class":49},".students:\n",[36,154179,154180,154182,154185,154187],{"class":38,"line":407},[36,154181,5391],{"class":53},[36,154183,154184],{"class":49}," student.student_id ",[36,154186,3698],{"class":53},[36,154188,152802],{"class":49},[36,154190,154191,154194],{"class":38,"line":2061},[36,154192,154193],{"class":53},"                return",[36,154195,152809],{"class":49},[36,154197,154198,154200],{"class":38,"line":2067},[36,154199,15496],{"class":53},[36,154201,152816],{"class":60},[36,154203,154204],{"class":38,"line":2079},[36,154205,194],{"emptyLinePlaceholder":193},[36,154207,154208,154210,154212],{"class":38,"line":2362},[36,154209,31543],{"class":53},[36,154211,5957],{"class":2713},[36,154213,154214],{"class":49},"(self, student):\n",[36,154216,154217,154219,154221],{"class":38,"line":2367},[36,154218,3246],{"class":53},[36,154220,39615],{"class":60},[36,154222,154223],{"class":49},".find_by_id(student.student_id):\n",[36,154225,154226,154228],{"class":38,"line":2373},[36,154227,16476],{"class":53},[36,154229,126451],{"class":60},[36,154231,154232,154234],{"class":38,"line":2378},[36,154233,31587],{"class":60},[36,154235,154236],{"class":49},".students.append(student)\n",[36,154238,154239,154241],{"class":38,"line":2392},[36,154240,15496],{"class":53},[36,154242,154243],{"class":60}," True\n",[14,154245,154246],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[21,154248,154250],{"id":154249},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[868,154252,154254],{"id":154253},"_1251-数据结构","12.5.1 数据结构",[26,154256,154258],{"className":28,"code":154257,"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,154259,154260,154268,154299,154329,154358,154387],{"__ignoreMap":31},[36,154261,154262,154264,154266],{"class":38,"line":39},[36,154263,149109],{"class":49},[36,154265,54],{"class":53},[36,154267,56189],{"class":49},[36,154269,154270,154272,154274,154276,154278,154280,154283,154285,154288,154290,154292,154294,154297],{"class":38,"line":46},[36,154271,149029],{"class":49},[36,154273,148641],{"class":998},[36,154275,52179],{"class":49},[36,154277,149252],{"class":998},[36,154279,154],{"class":49},[36,154281,154282],{"class":998},"\"category\"",[36,154284,52179],{"class":49},[36,154286,154287],{"class":998},"\"手机\"",[36,154289,154],{"class":49},[36,154291,84826],{"class":998},[36,154293,52179],{"class":49},[36,154295,154296],{"class":60},"12000",[36,154298,5678],{"class":49},[36,154300,154301,154303,154305,154307,154309,154311,154313,154315,154318,154320,154322,154324,154327],{"class":38,"line":78},[36,154302,149029],{"class":49},[36,154304,148641],{"class":998},[36,154306,52179],{"class":49},[36,154308,149252],{"class":998},[36,154310,154],{"class":49},[36,154312,154282],{"class":998},[36,154314,52179],{"class":49},[36,154316,154317],{"class":998},"\"电脑\"",[36,154319,154],{"class":49},[36,154321,84826],{"class":998},[36,154323,52179],{"class":49},[36,154325,154326],{"class":60},"18000",[36,154328,5678],{"class":49},[36,154330,154331,154333,154335,154337,154339,154341,154343,154345,154347,154349,154351,154353,154356],{"class":38,"line":125},[36,154332,149029],{"class":49},[36,154334,148641],{"class":998},[36,154336,52179],{"class":49},[36,154338,149273],{"class":998},[36,154340,154],{"class":49},[36,154342,154282],{"class":998},[36,154344,52179],{"class":49},[36,154346,154287],{"class":998},[36,154348,154],{"class":49},[36,154350,84826],{"class":998},[36,154352,52179],{"class":49},[36,154354,154355],{"class":60},"15000",[36,154357,5678],{"class":49},[36,154359,154360,154362,154364,154366,154368,154370,154372,154374,154376,154378,154380,154382,154385],{"class":38,"line":131},[36,154361,149029],{"class":49},[36,154363,148641],{"class":998},[36,154365,52179],{"class":49},[36,154367,149273],{"class":998},[36,154369,154],{"class":49},[36,154371,154282],{"class":998},[36,154373,52179],{"class":49},[36,154375,154317],{"class":998},[36,154377,154],{"class":49},[36,154379,84826],{"class":998},[36,154381,52179],{"class":49},[36,154383,154384],{"class":60},"16000",[36,154386,5678],{"class":49},[36,154388,154389],{"class":38,"line":396},[36,154390,33988],{"class":49},[868,154392,154394],{"id":154393},"_1252-按日期统计","12.5.2 按日期统计",[26,154396,154398],{"className":28,"code":154397,"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,154399,154400,154409,154413,154424,154438,154451,154470,154474],{"__ignoreMap":31},[36,154401,154402,154405,154407],{"class":38,"line":39},[36,154403,154404],{"class":49},"daily_total ",[36,154406,54],{"class":53},[36,154408,88610],{"class":49},[36,154410,154411],{"class":38,"line":46},[36,154412,194],{"emptyLinePlaceholder":193},[36,154414,154415,154417,154419,154421],{"class":38,"line":78},[36,154416,3774],{"class":53},[36,154418,148853],{"class":49},[36,154420,26788],{"class":53},[36,154422,154423],{"class":49}," sales:\n",[36,154425,154426,154429,154431,154434,154436],{"class":38,"line":125},[36,154427,154428],{"class":49},"    date ",[36,154430,54],{"class":53},[36,154432,154433],{"class":49}," item[",[36,154435,148641],{"class":998},[36,154437,33988],{"class":49},[36,154439,154440,154443,154445,154447,154449],{"class":38,"line":131},[36,154441,154442],{"class":49},"    amount ",[36,154444,54],{"class":53},[36,154446,154433],{"class":49},[36,154448,84826],{"class":998},[36,154450,33988],{"class":49},[36,154452,154453,154456,154458,154461,154463,154465,154467],{"class":38,"line":396},[36,154454,154455],{"class":49},"    daily_total[date] ",[36,154457,54],{"class":53},[36,154459,154460],{"class":49}," daily_total.get(date, ",[36,154462,643],{"class":60},[36,154464,14458],{"class":49},[36,154466,1365],{"class":53},[36,154468,154469],{"class":49}," amount\n",[36,154471,154472],{"class":38,"line":407},[36,154473,194],{"emptyLinePlaceholder":193},[36,154475,154476,154478],{"class":38,"line":2061},[36,154477,199],{"class":60},[36,154479,154480],{"class":49},"(daily_total)\n",[868,154482,154484],{"id":154483},"_1253-按类别统计","12.5.3 按类别统计",[26,154486,154488],{"className":28,"code":154487,"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,154489,154490,154499,154503,154513,154526,154538,154556,154560],{"__ignoreMap":31},[36,154491,154492,154495,154497],{"class":38,"line":39},[36,154493,154494],{"class":49},"category_total ",[36,154496,54],{"class":53},[36,154498,88610],{"class":49},[36,154500,154501],{"class":38,"line":46},[36,154502,194],{"emptyLinePlaceholder":193},[36,154504,154505,154507,154509,154511],{"class":38,"line":78},[36,154506,3774],{"class":53},[36,154508,148853],{"class":49},[36,154510,26788],{"class":53},[36,154512,154423],{"class":49},[36,154514,154515,154518,154520,154522,154524],{"class":38,"line":125},[36,154516,154517],{"class":49},"    category ",[36,154519,54],{"class":53},[36,154521,154433],{"class":49},[36,154523,154282],{"class":998},[36,154525,33988],{"class":49},[36,154527,154528,154530,154532,154534,154536],{"class":38,"line":131},[36,154529,154442],{"class":49},[36,154531,54],{"class":53},[36,154533,154433],{"class":49},[36,154535,84826],{"class":998},[36,154537,33988],{"class":49},[36,154539,154540,154543,154545,154548,154550,154552,154554],{"class":38,"line":396},[36,154541,154542],{"class":49},"    category_total[category] ",[36,154544,54],{"class":53},[36,154546,154547],{"class":49}," category_total.get(category, ",[36,154549,643],{"class":60},[36,154551,14458],{"class":49},[36,154553,1365],{"class":53},[36,154555,154469],{"class":49},[36,154557,154558],{"class":38,"line":407},[36,154559,194],{"emptyLinePlaceholder":193},[36,154561,154562,154564],{"class":38,"line":2061},[36,154563,199],{"class":60},[36,154565,154566],{"class":49},"(category_total)\n",[868,154568,154570],{"id":154569},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[26,154572,154574],{"className":28,"code":154573,"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,154575,154576,154601],{"__ignoreMap":31},[36,154577,154578,154581,154583,154585,154588,154591,154594,154597,154599],{"class":38,"line":39},[36,154579,154580],{"class":49},"top_date, top_amount ",[36,154582,54],{"class":53},[36,154584,6698],{"class":60},[36,154586,154587],{"class":49},"(daily_total.items(), ",[36,154589,154590],{"class":416},"key",[36,154592,154593],{"class":53},"=lambda",[36,154595,154596],{"class":49}," item: item[",[36,154598,61],{"class":60},[36,154600,165],{"class":49},[36,154602,154603,154605],{"class":38,"line":46},[36,154604,199],{"class":60},[36,154606,154607],{"class":49},"(top_date, top_amount)\n",[21,154609,154611],{"id":154610},"_126-绘制柱状图","12.6 绘制柱状图",[26,154613,154615],{"className":28,"code":154614,"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,154616,154617,154631,154642,154646,154654,154666,154678,154689,154693,154697,154707,154718,154732,154737,154754,154771,154787,154791],{"__ignoreMap":31},[36,154618,154619,154621,154623,154625,154627,154629],{"class":38,"line":39},[36,154620,31479],{"class":53},[36,154622,148023],{"class":49},[36,154624,31135],{"class":53},[36,154626,148028],{"class":49},[36,154628,32125],{"class":53},[36,154630,148033],{"class":49},[36,154632,154633,154635,154637,154639],{"class":38,"line":46},[36,154634,31479],{"class":53},[36,154636,147882],{"class":49},[36,154638,31135],{"class":53},[36,154640,154641],{"class":49}," Bar\n",[36,154643,154644],{"class":38,"line":78},[36,154645,194],{"emptyLinePlaceholder":193},[36,154647,154648,154650,154652],{"class":38,"line":125},[36,154649,154494],{"class":49},[36,154651,54],{"class":53},[36,154653,16316],{"class":49},[36,154655,154656,154659,154661,154664],{"class":38,"line":131},[36,154657,154658],{"class":998},"    \"手机\"",[36,154660,52179],{"class":49},[36,154662,154663],{"class":60},"27000",[36,154665,32208],{"class":49},[36,154667,154668,154671,154673,154676],{"class":38,"line":396},[36,154669,154670],{"class":998},"    \"电脑\"",[36,154672,52179],{"class":49},[36,154674,154675],{"class":60},"34000",[36,154677,32208],{"class":49},[36,154679,154680,154683,154685,154687],{"class":38,"line":407},[36,154681,154682],{"class":998},"    \"耳机\"",[36,154684,52179],{"class":49},[36,154686,125043],{"class":60},[36,154688,32208],{"class":49},[36,154690,154691],{"class":38,"line":2061},[36,154692,2315],{"class":49},[36,154694,154695],{"class":38,"line":2067},[36,154696,194],{"emptyLinePlaceholder":193},[36,154698,154699,154702,154704],{"class":38,"line":2079},[36,154700,154701],{"class":49},"bar ",[36,154703,54],{"class":53},[36,154705,154706],{"class":49}," Bar()\n",[36,154708,154709,154712,154715],{"class":38,"line":2362},[36,154710,154711],{"class":49},"bar.add_xaxis(",[36,154713,154714],{"class":60},"list",[36,154716,154717],{"class":49},"(category_total.keys()))\n",[36,154719,154720,154723,154725,154727,154729],{"class":38,"line":2367},[36,154721,154722],{"class":49},"bar.add_yaxis(",[36,154724,147939],{"class":998},[36,154726,154],{"class":49},[36,154728,154714],{"class":60},[36,154730,154731],{"class":49},"(category_total.values()))\n",[36,154733,154734],{"class":38,"line":2373},[36,154735,154736],{"class":49},"bar.set_global_opts(\n",[36,154738,154739,154741,154743,154745,154747,154749,154752],{"class":38,"line":2378},[36,154740,148117],{"class":416},[36,154742,54],{"class":53},[36,154744,148122],{"class":49},[36,154746,52149],{"class":416},[36,154748,54],{"class":53},[36,154750,154751],{"class":998},"\"品类销售额\"",[36,154753,38789],{"class":49},[36,154755,154756,154758,154760,154762,154764,154766,154769],{"class":38,"line":2392},[36,154757,148136],{"class":416},[36,154759,54],{"class":53},[36,154761,148141],{"class":49},[36,154763,80552],{"class":416},[36,154765,54],{"class":53},[36,154767,154768],{"class":998},"\"品类\"",[36,154770,38789],{"class":49},[36,154772,154773,154775,154777,154779,154781,154783,154785],{"class":38,"line":2397},[36,154774,148155],{"class":416},[36,154776,54],{"class":53},[36,154778,148141],{"class":49},[36,154780,80552],{"class":416},[36,154782,54],{"class":53},[36,154784,147939],{"class":998},[36,154786,38789],{"class":49},[36,154788,154789],{"class":38,"line":2403},[36,154790,75],{"class":49},[36,154792,154793,154796,154799],{"class":38,"line":2424},[36,154794,154795],{"class":49},"bar.render(",[36,154797,154798],{"class":998},"\"category_sales.html\"",[36,154800,75],{"class":49},[21,154802,154804],{"id":154803},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154806,154807],{},"时间线适合展示不同日期、月份、年份的数据变化。",[26,154809,154811],{"className":28,"code":154810,"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,154812,154813,154827,154838,154842,154850,154874,154897,154922,154926,154930,154940,154944,154955,154964,154974,154988,155019,155024,155028],{"__ignoreMap":31},[36,154814,154815,154817,154819,154821,154823,154825],{"class":38,"line":39},[36,154816,31479],{"class":53},[36,154818,148023],{"class":49},[36,154820,31135],{"class":53},[36,154822,148028],{"class":49},[36,154824,32125],{"class":53},[36,154826,148033],{"class":49},[36,154828,154829,154831,154833,154835],{"class":38,"line":46},[36,154830,31479],{"class":53},[36,154832,147882],{"class":49},[36,154834,31135],{"class":53},[36,154836,154837],{"class":49}," Bar, Timeline\n",[36,154839,154840],{"class":38,"line":78},[36,154841,194],{"emptyLinePlaceholder":193},[36,154843,154844,154846,154848],{"class":38,"line":125},[36,154845,102302],{"class":49},[36,154847,54],{"class":53},[36,154849,16316],{"class":49},[36,154851,154852,154855,154858,154860,154862,154864,154866,154868,154870,154872],{"class":38,"line":131},[36,154853,154854],{"class":998},"    \"2024-10-01\"",[36,154856,154857],{"class":49},": {",[36,154859,154287],{"class":998},[36,154861,52179],{"class":49},[36,154863,154296],{"class":60},[36,154865,154],{"class":49},[36,154867,154317],{"class":998},[36,154869,52179],{"class":49},[36,154871,154326],{"class":60},[36,154873,5678],{"class":49},[36,154875,154876,154879,154881,154883,154885,154887,154889,154891,154893,154895],{"class":38,"line":396},[36,154877,154878],{"class":998},"    \"2024-10-02\"",[36,154880,154857],{"class":49},[36,154882,154287],{"class":998},[36,154884,52179],{"class":49},[36,154886,154355],{"class":60},[36,154888,154],{"class":49},[36,154890,154317],{"class":998},[36,154892,52179],{"class":49},[36,154894,154384],{"class":60},[36,154896,5678],{"class":49},[36,154898,154899,154902,154904,154906,154908,154911,154913,154915,154917,154920],{"class":38,"line":407},[36,154900,154901],{"class":998},"    \"2024-10-03\"",[36,154903,154857],{"class":49},[36,154905,154287],{"class":998},[36,154907,52179],{"class":49},[36,154909,154910],{"class":60},"17000",[36,154912,154],{"class":49},[36,154914,154317],{"class":998},[36,154916,52179],{"class":49},[36,154918,154919],{"class":60},"19000",[36,154921,5678],{"class":49},[36,154923,154924],{"class":38,"line":2061},[36,154925,2315],{"class":49},[36,154927,154928],{"class":38,"line":2067},[36,154929,194],{"emptyLinePlaceholder":193},[36,154931,154932,154935,154937],{"class":38,"line":2079},[36,154933,154934],{"class":49},"timeline ",[36,154936,54],{"class":53},[36,154938,154939],{"class":49}," Timeline()\n",[36,154941,154942],{"class":38,"line":2362},[36,154943,194],{"emptyLinePlaceholder":193},[36,154945,154946,154948,154951,154953],{"class":38,"line":2367},[36,154947,3774],{"class":53},[36,154949,154950],{"class":49}," date, category_data ",[36,154952,26788],{"class":53},[36,154954,149792],{"class":49},[36,154956,154957,154960,154962],{"class":38,"line":2373},[36,154958,154959],{"class":49},"    bar ",[36,154961,54],{"class":53},[36,154963,154706],{"class":49},[36,154965,154966,154969,154971],{"class":38,"line":2378},[36,154967,154968],{"class":49},"    bar.add_xaxis(",[36,154970,154714],{"class":60},[36,154972,154973],{"class":49},"(category_data.keys()))\n",[36,154975,154976,154979,154981,154983,154985],{"class":38,"line":2392},[36,154977,154978],{"class":49},"    bar.add_yaxis(",[36,154980,147939],{"class":998},[36,154982,154],{"class":49},[36,154984,154714],{"class":60},[36,154986,154987],{"class":49},"(category_data.values()))\n",[36,154989,154990,154993,154996,154998,155000,155002,155004,155006,155008,155010,155012,155014,155017],{"class":38,"line":2397},[36,154991,154992],{"class":49},"    bar.set_global_opts(",[36,154994,154995],{"class":416},"title_opts",[36,154997,54],{"class":53},[36,154999,148122],{"class":49},[36,155001,52149],{"class":416},[36,155003,54],{"class":53},[36,155005,949],{"class":53},[36,155007,1141],{"class":998},[36,155009,1775],{"class":60},[36,155011,74668],{"class":49},[36,155013,1825],{"class":60},[36,155015,155016],{"class":998},"销售额\"",[36,155018,31239],{"class":49},[36,155020,155021],{"class":38,"line":2403},[36,155022,155023],{"class":49},"    timeline.add(bar, date)\n",[36,155025,155026],{"class":38,"line":2424},[36,155027,194],{"emptyLinePlaceholder":193},[36,155029,155030,155033,155036],{"class":38,"line":2429},[36,155031,155032],{"class":49},"timeline.render(",[36,155034,155035],{"class":998},"\"timeline_sales.html\"",[36,155037,75],{"class":49},[21,155039,155041],{"id":155040},"_128-绘制地图","12.8 绘制地图",[14,155043,155044],{},"地图适合展示地区数据。",[26,155046,155048],{"className":28,"code":155047,"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,155049,155050,155064,155075,155079,155087,155100,155112,155125,155138,155142,155146,155156,155171,155176,155193,155212,155216],{"__ignoreMap":31},[36,155051,155052,155054,155056,155058,155060,155062],{"class":38,"line":39},[36,155053,31479],{"class":53},[36,155055,148023],{"class":49},[36,155057,31135],{"class":53},[36,155059,148028],{"class":49},[36,155061,32125],{"class":53},[36,155063,148033],{"class":49},[36,155065,155066,155068,155070,155072],{"class":38,"line":46},[36,155067,31479],{"class":53},[36,155069,147882],{"class":49},[36,155071,31135],{"class":53},[36,155073,155074],{"class":49}," Map\n",[36,155076,155077],{"class":38,"line":78},[36,155078,194],{"emptyLinePlaceholder":193},[36,155080,155081,155083,155085],{"class":38,"line":125},[36,155082,102302],{"class":49},[36,155084,54],{"class":53},[36,155086,56189],{"class":49},[36,155088,155089,155092,155094,155096,155098],{"class":38,"line":131},[36,155090,155091],{"class":49},"    (",[36,155093,70011],{"class":998},[36,155095,154],{"class":49},[36,155097,1697],{"class":60},[36,155099,38789],{"class":49},[36,155101,155102,155104,155106,155108,155110],{"class":38,"line":396},[36,155103,155091],{"class":49},[36,155105,70031],{"class":998},[36,155107,154],{"class":49},[36,155109,147956],{"class":60},[36,155111,38789],{"class":49},[36,155113,155114,155116,155119,155121,155123],{"class":38,"line":407},[36,155115,155091],{"class":49},[36,155117,155118],{"class":998},"\"广东\"",[36,155120,154],{"class":49},[36,155122,2472],{"class":60},[36,155124,38789],{"class":49},[36,155126,155127,155129,155132,155134,155136],{"class":38,"line":2061},[36,155128,155091],{"class":49},[36,155130,155131],{"class":998},"\"浙江\"",[36,155133,154],{"class":49},[36,155135,147961],{"class":60},[36,155137,38789],{"class":49},[36,155139,155140],{"class":38,"line":2067},[36,155141,33988],{"class":49},[36,155143,155144],{"class":38,"line":2079},[36,155145,194],{"emptyLinePlaceholder":193},[36,155147,155148,155151,155153],{"class":38,"line":2362},[36,155149,155150],{"class":49},"map_chart ",[36,155152,54],{"class":53},[36,155154,155155],{"class":49}," Map()\n",[36,155157,155158,155161,155163,155166,155169],{"class":38,"line":2367},[36,155159,155160],{"class":49},"map_chart.add(",[36,155162,147939],{"class":998},[36,155164,155165],{"class":49},", data, ",[36,155167,155168],{"class":998},"\"china\"",[36,155170,75],{"class":49},[36,155172,155173],{"class":38,"line":2373},[36,155174,155175],{"class":49},"map_chart.set_global_opts(\n",[36,155177,155178,155180,155182,155184,155186,155188,155191],{"class":38,"line":2378},[36,155179,148117],{"class":416},[36,155181,54],{"class":53},[36,155183,148122],{"class":49},[36,155185,52149],{"class":416},[36,155187,54],{"class":53},[36,155189,155190],{"class":998},"\"地区销售额\"",[36,155192,38789],{"class":49},[36,155194,155195,155198,155200,155203,155206,155208,155210],{"class":38,"line":2392},[36,155196,155197],{"class":416},"    visualmap_opts",[36,155199,54],{"class":53},[36,155201,155202],{"class":49},"opts.VisualMapOpts(",[36,155204,155205],{"class":416},"max_",[36,155207,54],{"class":53},[36,155209,2472],{"class":60},[36,155211,38789],{"class":49},[36,155213,155214],{"class":38,"line":2397},[36,155215,75],{"class":49},[36,155217,155218,155221,155224],{"class":38,"line":2403},[36,155219,155220],{"class":49},"map_chart.render(",[36,155222,155223],{"class":998},"\"map_sales.html\"",[36,155225,75],{"class":49},[14,155227,155228],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[21,155230,155232],{"id":155231},"_129-项目拆分建议","12.9 项目拆分建议",[14,155234,155235],{},"当代码超过一个文件时，可以这样组织：",[26,155237,155240],{"className":155238,"code":155239,"language":5935,"meta":31},[5933],"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,155241,155239],{"__ignoreMap":31},[14,155243,155244],{},"职责：",[851,155246,155247,155253,155259,155265],{},[854,155248,155249,155252],{},[33,155250,155251],{},"main.py","：程序入口。",[854,155254,155255,155258],{},[33,155256,155257],{},"file_utils.py","：读写 JSON。",[854,155260,155261,155264],{},[33,155262,155263],{},"sales_service.py","：统计销售数据。",[854,155266,155267,155270],{},[33,155268,155269],{},"chart_builder.py","：生成图表。",[21,155272,155274],{"id":155273},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,155276,155277],{},"语法基础：",[851,155279,155280,155283,155286,155289],{},[854,155281,155282],{},"会写变量、注释、输入输出。",[854,155284,155285],{},"会使用 int、float、str、bool。",[854,155287,155288],{},"会做类型转换。",[854,155290,155291],{},"会使用 f-string 格式化输出。",[14,155293,155294],{},"流程控制：",[851,155296,155297,155303,155309,155317],{},[854,155298,155299,155300,29130],{},"会写 ",[33,155301,155302],{},"if elif else",[854,155304,155299,155305,101662,155307,29130],{},[33,155306,109307],{},[33,155308,3774],{},[854,155310,155311,155312,101662,155314,29130],{},"理解 ",[33,155313,2803],{},[33,155315,155316],{},"continue",[854,155318,155319],{},"能写嵌套循环。",[14,155321,155322],{},"函数：",[851,155324,155325,155328,155331,155334],{},[854,155326,155327],{},"会定义和调用函数。",[854,155329,155330],{},"理解参数和返回值。",[854,155332,155333],{},"知道局部变量和全局变量。",[854,155335,155336],{},"会使用默认参数、关键字参数、不定长参数。",[14,155338,155339],{},"容器：",[851,155341,155342,155345,155348,155351,155354],{},[854,155343,155344],{},"会使用列表增删改查。",[854,155346,155347],{},"会遍历列表、字典。",[854,155349,155350],{},"会使用切片。",[854,155352,155353],{},"会用集合去重。",[854,155355,155356],{},"会处理列表嵌套字典。",[14,155358,155359],{},"文件和模块：",[851,155361,155362,155365,155368,155371,155374],{},[854,155363,155364],{},"会读写文本文件。",[854,155366,155367],{},"会读写 JSON。",[854,155369,155370],{},"会捕获常见异常。",[854,155372,155373],{},"会导入模块和第三方包。",[854,155375,155376],{},"会创建简单包结构。",[14,155378,155379],{},"项目能力：",[851,155381,155382,155385,155388,155391,155394],{},[854,155383,155384],{},"能把代码拆成函数。",[854,155386,155387],{},"能把数据保存到文件。",[854,155389,155390],{},"能处理用户输入错误。",[854,155392,155393],{},"能写一个完整菜单程序。",[854,155395,155396],{},"能用 pyecharts 生成图表。",[21,155398,155400],{"id":155399},"_1211-推荐练习顺序","12.11 推荐练习顺序",[851,155402,155403,155406,155409,155412,155415,155418,155421,155424],{},[854,155404,155405],{},"猜数字游戏。",[854,155407,155408],{},"ATM 菜单程序。",[854,155410,155411],{},"学生成绩统计。",[854,155413,155414],{},"学生管理系统函数版。",[854,155416,155417],{},"学生管理系统文件持久化版。",[854,155419,155420],{},"学生管理系统面向对象版。",[854,155422,155423],{},"销售数据统计。",[854,155425,155426],{},"销售数据可视化。",[21,155428,155430],{"id":155429},"_1212-常见学习误区","12.12 常见学习误区",[851,155432,155433,155436,155439,155442,155445,155448,155451],{},[854,155434,155435],{},"只看视频不敲代码。",[854,155437,155438],{},"一报错就复制错误去搜，不先读报错位置。",[854,155440,155441],{},"变量名随便写，后续自己看不懂。",[854,155443,155444],{},"所有代码都写在一个文件一个函数里。",[854,155446,155447],{},"不保存练习代码，复习时没有材料。",[854,155449,155450],{},"还没掌握列表字典就急着学框架。",[854,155452,155453],{},"不会读官方文档，只依赖教程。",[21,155455,155457],{"id":155456},"_1213-如何读报错","12.13 如何读报错",[14,155459,155460],{},"报错通常从下往上看最后几行。",[14,155462,15879],{},[26,155464,155467],{"className":155465,"code":155466,"language":5935,"meta":31},[5933],"ValueError: invalid literal for int() with base 10: 'abc'\n",[33,155468,155466],{"__ignoreMap":31},[14,155470,25344],{},[851,155472,155473,155479,155489],{},[854,155474,155475,155476,29130],{},"异常类型是 ",[33,155477,155478],{},"ValueError",[854,155480,107989,155481,155484,155485,155488],{},[33,155482,155483],{},"int()"," 无法把 ",[33,155486,155487],{},"'abc'"," 转成整数。",[854,155490,155491],{},"应该检查输入内容或增加异常处理。",[14,155493,155494],{},"再看文件名和行号：",[26,155496,155499],{"className":155497,"code":155498,"language":5935,"meta":31},[5933],"File \"main.py\", line 10, in \u003Cmodule>\n",[33,155500,155498],{"__ignoreMap":31},[14,155502,155503,155504,155506],{},"表示错误发生在 ",[33,155505,155251],{}," 第 10 行。",[21,155508,155510],{"id":155509},"_1214-后续学习方向","12.14 后续学习方向",[14,155512,155513],{},"Python 基础完成后，可以按兴趣选择方向：",[851,155515,155516,155528,155537,155549,155560,155569,155579],{},[854,155517,155518,155519,1104,155522,1104,155525,29130],{},"自动化办公：",[33,155520,155521],{},"openpyxl",[33,155523,155524],{},"python-docx",[33,155526,155527],{},"pdfplumber",[854,155529,155530,155531,1104,155533,1104,155535,29130],{},"数据分析：",[33,155532,101270],{},[33,155534,146829],{},[33,155536,146837],{},[854,155538,155539,155540,1104,155543,1104,155546,29130],{},"Web 后端：",[33,155541,155542],{},"Flask",[33,155544,155545],{},"FastAPI",[33,155547,155548],{},"Django",[854,155550,155551,155552,1104,155554,1104,155557,29130],{},"爬虫：",[33,155553,146814],{},[33,155555,155556],{},"BeautifulSoup",[33,155558,155559],{},"Scrapy",[854,155561,155562,155563,1104,155565,155568],{},"测试开发：",[33,155564,146861],{},[33,155566,155567],{},"selenium","、接口测试。",[854,155570,155571,155572,1104,155574,1104,155576,29130],{},"人工智能：",[33,155573,101270],{},[33,155575,146829],{},[33,155577,155578],{},"pytorch",[854,155580,155581,155582,1104,155584,1104,155587,29130],{},"运维脚本：",[33,155583,146430],{},[33,155585,155586],{},"subprocess",[33,155588,155589],{},"paramiko",[14,155591,155592],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[21,155594,155596],{"id":155595},"_1215-结课练习","12.15 结课练习",[851,155598,155599,155602,155605,155608,155611,155614,155617,155620],{},[854,155600,155601],{},"完成函数版学生管理系统。",[854,155603,155604],{},"给学生管理系统增加 JSON 持久化。",[854,155606,155607],{},"给学生管理系统增加异常处理。",[854,155609,155610],{},"把学生管理系统改成面向对象版。",[854,155612,155613],{},"使用 pyecharts 绘制学生成绩柱状图。",[854,155615,155616],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[854,155618,155619],{},"按品类统计销售额并绘制柱状图。",[854,155621,155622],{},"写一份自己的 Python 学习路线图。",[807,155624,155625],{},"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":46,"depth":46,"links":155627},[155628,155629,155632,155633,155634,155640,155641,155642,155643,155644,155645,155646,155647,155648,155649],{"id":152344,"depth":46,"text":152345},{"id":152394,"depth":46,"text":152395,"children":155630},[155631],{"id":152398,"depth":78,"text":152399},{"id":152437,"depth":46,"text":152438},{"id":153911,"depth":46,"text":153912},{"id":154249,"depth":46,"text":154250,"children":155635},[155636,155637,155638,155639],{"id":154253,"depth":78,"text":154254},{"id":154393,"depth":78,"text":154394},{"id":154483,"depth":78,"text":154484},{"id":154569,"depth":78,"text":154570},{"id":154610,"depth":46,"text":154611},{"id":154803,"depth":46,"text":154804},{"id":155040,"depth":46,"text":155041},{"id":155231,"depth":46,"text":155232},{"id":155273,"depth":46,"text":155274},{"id":155399,"depth":46,"text":155400},{"id":155429,"depth":46,"text":155430},{"id":155456,"depth":46,"text":155457},{"id":155509,"depth":46,"text":155510},{"id":155595,"depth":46,"text":155596},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152336,"description":823},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155656,"title":155657,"body":155658,"description":823,"extension":824,"meta":158127,"navigation":193,"path":158128,"seo":158129,"stem":158130,"__hash__":158131},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155659,"toc":158102},[155660,155663,155667,155670,155673,155693,155696,155719,155722,155725,155747,155750,155772,155776,155779,155819,155822,155943,155947,155950,155990,155993,156017,156020,156024,156027,156041,156074,156077,156112,156115,156138,156141,156174,156177,156179,156185,156260,156263,156269,156286,156326,156330,156333,156379,156381,156419,156422,156457,156460,156495,156498,156530,156533,156552,156556,156560,156673,156675,156750,156754,156800,156803,156829,156838,156842,156845,156908,156916,156944,156948,156988,157053,157057,157060,157099,157102,157147,157150,157211,157215,157242,157245,157273,157276,157280,157284,157349,157352,157390,157393,157425,157429,157528,157532,157535,157608,157611,157659,157663,157669,157709,157712,157759,157762,157811,157815,157817,157831,157833,158014,158018,158045,158065,158072,158076,158093,158099],[10,155661,155657],{"id":155662},"_2-基础语法变量与字符串",[21,155664,155666],{"id":155665},"_21-注释","2.1 注释",[14,155668,155669],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155671,155672],{},"单行注释：",[26,155674,155676],{"className":28,"code":155675,"language":30,"meta":31,"style":31},"# 这是单行注释\nprint(\"hello\")\n",[33,155677,155678,155683],{"__ignoreMap":31},[36,155679,155680],{"class":38,"line":39},[36,155681,155682],{"class":42},"# 这是单行注释\n",[36,155684,155685,155687,155689,155691],{"class":38,"line":46},[36,155686,199],{"class":60},[36,155688,901],{"class":49},[36,155690,6591],{"class":998},[36,155692,75],{"class":49},[14,155694,155695],{},"多行说明常用三引号：",[26,155697,155699],{"className":28,"code":155698,"language":30,"meta":31,"style":31},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[33,155700,155701,155705,155710,155715],{"__ignoreMap":31},[36,155702,155703],{"class":38,"line":39},[36,155704,96342],{"class":998},[36,155706,155707],{"class":38,"line":46},[36,155708,155709],{"class":998},"这是多行说明。\n",[36,155711,155712],{"class":38,"line":78},[36,155713,155714],{"class":998},"常用于文件顶部说明、函数说明等。\n",[36,155716,155717],{"class":38,"line":125},[36,155718,96342],{"class":998},[14,155720,155721],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155723,155724],{},"不好：",[26,155726,155728],{"className":28,"code":155727,"language":30,"meta":31,"style":31},"# age 加 1\nage = age + 1\n",[33,155729,155730,155735],{"__ignoreMap":31},[36,155731,155732],{"class":38,"line":39},[36,155733,155734],{"class":42},"# age 加 1\n",[36,155736,155737,155739,155741,155743,155745],{"class":38,"line":46},[36,155738,147190],{"class":49},[36,155740,54],{"class":53},[36,155742,16451],{"class":49},[36,155744,1365],{"class":53},[36,155746,56441],{"class":60},[14,155748,155749],{},"较好：",[26,155751,155753],{"className":28,"code":155752,"language":30,"meta":31,"style":31},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[33,155754,155755,155760],{"__ignoreMap":31},[36,155756,155757],{"class":38,"line":39},[36,155758,155759],{"class":42},"# 用户过完生日后，年龄增加一岁\n",[36,155761,155762,155764,155766,155768,155770],{"class":38,"line":46},[36,155763,147190],{"class":49},[36,155765,54],{"class":53},[36,155767,16451],{"class":49},[36,155769,1365],{"class":53},[36,155771,56441],{"class":60},[21,155773,155775],{"id":155774},"_22-字面量","2.2 字面量",[14,155777,155778],{},"字面量就是代码中直接写出来的数据。",[26,155780,155782],{"className":28,"code":155781,"language":30,"meta":31,"style":31},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[33,155783,155784,155791,155798,155805,155812],{"__ignoreMap":31},[36,155785,155786,155788],{"class":38,"line":39},[36,155787,67],{"class":60},[36,155789,155790],{"class":42},"          # 整数\n",[36,155792,155793,155795],{"class":38,"line":46},[36,155794,946],{"class":60},[36,155796,155797],{"class":42},"         # 小数\n",[36,155799,155800,155802],{"class":38,"line":78},[36,155801,6591],{"class":998},[36,155803,155804],{"class":42},"      # 字符串\n",[36,155806,155807,155809],{"class":38,"line":125},[36,155808,32218],{"class":60},[36,155810,155811],{"class":42},"         # 布尔值\n",[36,155813,155814,155816],{"class":38,"line":131},[36,155815,96330],{"class":60},[36,155817,155818],{"class":42},"         # 空值\n",[14,155820,155821],{},"常见字面量类型：",[1031,155823,155824,155834],{},[1034,155825,155826],{},[1037,155827,155828,155830,155832],{},[1040,155829,24481],{},[1040,155831,28237],{},[1040,155833,26614],{},[1078,155835,155836,155847,155858,155869,155881,155893,155905,155918,155930],{},[1037,155837,155838,155840,155844],{},[1083,155839,904],{},[1083,155841,155842],{},[33,155843,67],{},[1083,155845,155846],{},"整数",[1037,155848,155849,155851,155855],{},[1083,155850,478],{},[1083,155852,155853],{},[33,155854,946],{},[1083,155856,155857],{},"浮点数",[1037,155859,155860,155862,155866],{},[1083,155861,2049],{},[1083,155863,155864],{},[33,155865,6591],{},[1083,155867,155868],{},"字符串",[1037,155870,155871,155873,155879],{},[1083,155872,2104],{},[1083,155874,155875,1104,155877],{},[33,155876,32218],{},[33,155878,34729],{},[1083,155880,66757],{},[1037,155882,155883,155886,155890],{},[1083,155884,155885],{},"NoneType",[1083,155887,155888],{},[33,155889,96330],{},[1083,155891,155892],{},"空值",[1037,155894,155895,155897,155902],{},[1083,155896,154714],{},[1083,155898,155899],{},[33,155900,155901],{},"[1, 2, 3]",[1083,155903,155904],{},"列表",[1037,155906,155907,155910,155915],{},[1083,155908,155909],{},"tuple",[1083,155911,155912],{},[33,155913,155914],{},"(1, 2, 3)",[1083,155916,155917],{},"元组",[1037,155919,155920,155922,155927],{},[1083,155921,115190],{},[1083,155923,155924],{},[33,155925,155926],{},"{\"name\": \"张三\"}",[1083,155928,155929],{},"字典",[1037,155931,155932,155935,155940],{},[1083,155933,155934],{},"set",[1083,155936,155937],{},[33,155938,155939],{},"{1, 2, 3}",[1083,155941,155942],{},"集合",[21,155944,155946],{"id":155945},"_23-变量","2.3 变量",[14,155948,155949],{},"变量是保存数据的名字。",[26,155951,155953],{"className":28,"code":155952,"language":30,"meta":31,"style":31},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[33,155954,155955,155963,155971,155981],{"__ignoreMap":31},[36,155956,155957,155959,155961],{"class":38,"line":39},[36,155958,147180],{"class":49},[36,155960,54],{"class":53},[36,155962,149997],{"class":998},[36,155964,155965,155967,155969],{"class":38,"line":46},[36,155966,147190],{"class":49},[36,155968,54],{"class":53},[36,155970,147195],{"class":60},[36,155972,155973,155976,155978],{"class":38,"line":78},[36,155974,155975],{"class":49},"height ",[36,155977,54],{"class":53},[36,155979,155980],{"class":60}," 1.75\n",[36,155982,155983,155986,155988],{"class":38,"line":125},[36,155984,155985],{"class":49},"is_student ",[36,155987,54],{"class":53},[36,155989,154243],{"class":60},[14,155991,155992],{},"Python 的变量不需要提前声明类型：",[26,155994,155996],{"className":28,"code":155995,"language":30,"meta":31,"style":31},"score = 100\nscore = \"满分\"\n",[33,155997,155998,156008],{"__ignoreMap":31},[36,155999,156000,156003,156005],{"class":38,"line":39},[36,156001,156002],{"class":49},"score ",[36,156004,54],{"class":53},[36,156006,156007],{"class":60}," 100\n",[36,156009,156010,156012,156014],{"class":38,"line":46},[36,156011,156002],{"class":49},[36,156013,54],{"class":53},[36,156015,156016],{"class":998}," \"满分\"\n",[14,156018,156019],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[21,156021,156023],{"id":156022},"_24-变量命名规则","2.4 变量命名规则",[14,156025,156026],{},"硬性规则：",[851,156028,156029,156032,156035,156038],{},[854,156030,156031],{},"只能由字母、数字、下划线组成。",[854,156033,156034],{},"不能以数字开头。",[854,156036,156037],{},"不能使用 Python 关键字。",[854,156039,156040],{},"区分大小写。",[26,156042,156044],{"className":28,"code":156043,"language":30,"meta":31,"style":31},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[33,156045,156046,156055,156064],{"__ignoreMap":31},[36,156047,156048,156051,156053],{"class":38,"line":39},[36,156049,156050],{"class":49},"user_name ",[36,156052,54],{"class":53},[36,156054,147185],{"class":998},[36,156056,156057,156060,156062],{"class":38,"line":46},[36,156058,156059],{"class":49},"age2 ",[36,156061,54],{"class":53},[36,156063,147195],{"class":60},[36,156065,156066,156069,156071],{"class":38,"line":78},[36,156067,156068],{"class":49},"_token ",[36,156070,54],{"class":53},[36,156072,156073],{"class":998}," \"abc\"\n",[14,156075,156076],{},"错误写法：",[26,156078,156080],{"className":28,"code":156079,"language":30,"meta":31,"style":31},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[33,156081,156082,156091,156103],{"__ignoreMap":31},[36,156083,156084,156087,156089],{"class":38,"line":39},[36,156085,156086],{"class":78145},"2age",[36,156088,14308],{"class":53},[36,156090,147195],{"class":60},[36,156092,156093,156095,156097,156099,156101],{"class":38,"line":46},[36,156094,132228],{"class":49},[36,156096,1414],{"class":53},[36,156098,147180],{"class":49},[36,156100,54],{"class":53},[36,156102,147185],{"class":998},[36,156104,156105,156107,156109],{"class":38,"line":78},[36,156106,15438],{"class":53},[36,156108,14308],{"class":53},[36,156110,156111],{"class":998}," \"一班\"\n",[14,156113,156114],{},"查看关键字：",[26,156116,156118],{"className":28,"code":156117,"language":30,"meta":31,"style":31},"import keyword\n\nprint(keyword.kwlist)\n",[33,156119,156120,156127,156131],{"__ignoreMap":31},[36,156121,156122,156124],{"class":38,"line":39},[36,156123,31135],{"class":53},[36,156125,156126],{"class":49}," keyword\n",[36,156128,156129],{"class":38,"line":46},[36,156130,194],{"emptyLinePlaceholder":193},[36,156132,156133,156135],{"class":38,"line":78},[36,156134,199],{"class":60},[36,156136,156137],{"class":49},"(keyword.kwlist)\n",[14,156139,156140],{},"推荐命名风格：",[26,156142,156144],{"className":28,"code":156143,"language":30,"meta":31,"style":31},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[33,156145,156146,156155,156165],{"__ignoreMap":31},[36,156147,156148,156151,156153],{"class":38,"line":39},[36,156149,156150],{"class":49},"student_name ",[36,156152,54],{"class":53},[36,156154,149997],{"class":998},[36,156156,156157,156160,156162],{"class":38,"line":46},[36,156158,156159],{"class":49},"total_price ",[36,156161,54],{"class":53},[36,156163,156164],{"class":60}," 99.8\n",[36,156166,156167,156170,156172],{"class":38,"line":78},[36,156168,156169],{"class":49},"is_finished ",[36,156171,54],{"class":53},[36,156173,126451],{"class":60},[14,156175,156176],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[21,156178,51474],{"id":51473},[14,156180,105010,156181,156184],{},[33,156182,156183],{},"type()"," 查看数据类型：",[26,156186,156188],{"className":28,"code":156187,"language":30,"meta":31,"style":31},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[33,156189,156190,156204,156218,156232,156246],{"__ignoreMap":31},[36,156191,156192,156194,156196,156198,156200,156202],{"class":38,"line":39},[36,156193,199],{"class":60},[36,156195,901],{"class":49},[36,156197,103751],{"class":60},[36,156199,901],{"class":49},[36,156201,67],{"class":60},[36,156203,31239],{"class":49},[36,156205,156206,156208,156210,156212,156214,156216],{"class":38,"line":46},[36,156207,199],{"class":60},[36,156209,901],{"class":49},[36,156211,103751],{"class":60},[36,156213,901],{"class":49},[36,156215,946],{"class":60},[36,156217,31239],{"class":49},[36,156219,156220,156222,156224,156226,156228,156230],{"class":38,"line":78},[36,156221,199],{"class":60},[36,156223,901],{"class":49},[36,156225,103751],{"class":60},[36,156227,901],{"class":49},[36,156229,6591],{"class":998},[36,156231,31239],{"class":49},[36,156233,156234,156236,156238,156240,156242,156244],{"class":38,"line":125},[36,156235,199],{"class":60},[36,156237,901],{"class":49},[36,156239,103751],{"class":60},[36,156241,901],{"class":49},[36,156243,32218],{"class":60},[36,156245,31239],{"class":49},[36,156247,156248,156250,156252,156254,156256,156258],{"class":38,"line":131},[36,156249,199],{"class":60},[36,156251,901],{"class":49},[36,156253,103751],{"class":60},[36,156255,901],{"class":49},[36,156257,96330],{"class":60},[36,156259,31239],{"class":49},[14,156261,156262],{},"输出类似：",[26,156264,156267],{"className":156265,"code":156266,"language":5935,"meta":31},[5933],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[33,156268,156266],{"__ignoreMap":31},[14,156270,9772,156271,107927,156273,156275,156276,156278,156279,22244,156281,156278,156283,156285],{},[33,156272,2104],{},[33,156274,904],{}," 的子类，",[33,156277,32218],{}," 可以当作 ",[33,156280,61],{},[33,156282,34729],{},[33,156284,643],{},"，但业务代码中不要滥用。",[26,156287,156289],{"className":28,"code":156288,"language":30,"meta":31,"style":31},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[33,156290,156291,156309],{"__ignoreMap":31},[36,156292,156293,156295,156297,156299,156301,156303,156306],{"class":38,"line":39},[36,156294,199],{"class":60},[36,156296,901],{"class":49},[36,156298,32218],{"class":60},[36,156300,46308],{"class":53},[36,156302,25863],{"class":60},[36,156304,156305],{"class":49},")   ",[36,156307,156308],{"class":42},"# 2\n",[36,156310,156311,156313,156315,156317,156319,156321,156323],{"class":38,"line":46},[36,156312,199],{"class":60},[36,156314,901],{"class":49},[36,156316,34729],{"class":60},[36,156318,46308],{"class":53},[36,156320,25863],{"class":60},[36,156322,46550],{"class":49},[36,156324,156325],{"class":42},"# 1\n",[21,156327,156329],{"id":156328},"_26-类型转换","2.6 类型转换",[14,156331,156332],{},"常用转换函数：",[26,156334,156336],{"className":28,"code":156335,"language":30,"meta":31,"style":31},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[33,156337,156338,156348,156359,156369],{"__ignoreMap":31},[36,156339,156340,156342,156344,156346],{"class":38,"line":39},[36,156341,904],{"class":60},[36,156343,901],{"class":49},[36,156345,55058],{"class":998},[36,156347,75],{"class":49},[36,156349,156350,156352,156354,156357],{"class":38,"line":46},[36,156351,478],{"class":60},[36,156353,901],{"class":49},[36,156355,156356],{"class":998},"\"3.14\"",[36,156358,75],{"class":49},[36,156360,156361,156363,156365,156367],{"class":38,"line":78},[36,156362,2049],{"class":60},[36,156364,901],{"class":49},[36,156366,67],{"class":60},[36,156368,75],{"class":49},[36,156370,156371,156373,156375,156377],{"class":38,"line":125},[36,156372,2104],{"class":60},[36,156374,901],{"class":49},[36,156376,61],{"class":60},[36,156378,75],{"class":49},[14,156380,15879],{},[26,156382,156384],{"className":28,"code":156383,"language":30,"meta":31,"style":31},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[33,156385,156386,156395,156406],{"__ignoreMap":31},[36,156387,156388,156390,156392],{"class":38,"line":39},[36,156389,147190],{"class":49},[36,156391,54],{"class":53},[36,156393,156394],{"class":998}," \"18\"\n",[36,156396,156397,156399,156401,156403],{"class":38,"line":46},[36,156398,147190],{"class":49},[36,156400,54],{"class":53},[36,156402,3132],{"class":60},[36,156404,156405],{"class":49},"(age)\n",[36,156407,156408,156410,156413,156415,156417],{"class":38,"line":78},[36,156409,199],{"class":60},[36,156411,156412],{"class":49},"(age ",[36,156414,1365],{"class":53},[36,156416,25863],{"class":60},[36,156418,75],{"class":49},[14,156420,156421],{},"输入得到的内容永远是字符串：",[26,156423,156425],{"className":28,"code":156424,"language":30,"meta":31,"style":31},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[33,156426,156427,156443],{"__ignoreMap":31},[36,156428,156429,156432,156434,156436,156438,156441],{"class":38,"line":39},[36,156430,156431],{"class":49},"num ",[36,156433,54],{"class":53},[36,156435,61347],{"class":60},[36,156437,901],{"class":49},[36,156439,156440],{"class":998},"\"请输入数字:\"",[36,156442,75],{"class":49},[36,156444,156445,156447,156449,156451,156454],{"class":38,"line":46},[36,156446,199],{"class":60},[36,156448,901],{"class":49},[36,156450,103751],{"class":60},[36,156452,156453],{"class":49},"(num))  ",[36,156455,156456],{"class":42},"# str\n",[14,156458,156459],{},"如果要做数学运算，必须转换：",[26,156461,156463],{"className":28,"code":156462,"language":30,"meta":31,"style":31},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[33,156464,156465,156483],{"__ignoreMap":31},[36,156466,156467,156469,156471,156473,156475,156477,156479,156481],{"class":38,"line":39},[36,156468,156431],{"class":49},[36,156470,54],{"class":53},[36,156472,3132],{"class":60},[36,156474,901],{"class":49},[36,156476,54563],{"class":60},[36,156478,901],{"class":49},[36,156480,156440],{"class":998},[36,156482,31239],{"class":49},[36,156484,156485,156487,156489,156491,156493],{"class":38,"line":46},[36,156486,199],{"class":60},[36,156488,46361],{"class":49},[36,156490,1365],{"class":53},[36,156492,2788],{"class":60},[36,156494,75],{"class":49},[14,156496,156497],{},"常见错误：",[26,156499,156501],{"className":28,"code":156500,"language":30,"meta":31,"style":31},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[33,156502,156503,156516],{"__ignoreMap":31},[36,156504,156505,156507,156509,156511,156513],{"class":38,"line":39},[36,156506,904],{"class":60},[36,156508,901],{"class":49},[36,156510,156356],{"class":998},[36,156512,156305],{"class":49},[36,156514,156515],{"class":42},"# 错误\n",[36,156517,156518,156520,156522,156525,156528],{"class":38,"line":46},[36,156519,904],{"class":60},[36,156521,901],{"class":49},[36,156523,156524],{"class":998},"\"abc\"",[36,156526,156527],{"class":49},")    ",[36,156529,156515],{"class":42},[14,156531,156532],{},"正确写法：",[26,156534,156536],{"className":28,"code":156535,"language":30,"meta":31,"style":31},"num = float(\"3.14\")\n",[33,156537,156538],{"__ignoreMap":31},[36,156539,156540,156542,156544,156546,156548,156550],{"class":38,"line":39},[36,156541,156431],{"class":49},[36,156543,54],{"class":53},[36,156545,110441],{"class":60},[36,156547,901],{"class":49},[36,156549,156356],{"class":998},[36,156551,75],{"class":49},[21,156553,156555],{"id":156554},"_27-运算符","2.7 运算符",[868,156557,156559],{"id":156558},"_271-算术运算符","2.7.1 算术运算符",[1031,156561,156562,156573],{},[1034,156563,156564],{},[1037,156565,156566,156569,156571],{},[1040,156567,156568],{},"运算符",[1040,156570,26614],{},[1040,156572,28237],{},[1078,156574,156575,156589,156603,156617,156631,156645,156659],{},[1037,156576,156577,156581,156584],{},[1083,156578,156579],{},[33,156580,1365],{},[1083,156582,156583],{},"加法",[1083,156585,156586],{},[33,156587,156588],{},"1 + 2",[1037,156590,156591,156595,156598],{},[1083,156592,156593],{},[33,156594,1414],{},[1083,156596,156597],{},"减法",[1083,156599,156600],{},[33,156601,156602],{},"5 - 3",[1037,156604,156605,156609,156612],{},[1083,156606,156607],{},[33,156608,1339],{},[1083,156610,156611],{},"乘法",[1083,156613,156614],{},[33,156615,156616],{},"2 * 3",[1037,156618,156619,156623,156626],{},[1083,156620,156621],{},[33,156622,1466],{},[1083,156624,156625],{},"除法，结果是浮点数",[1083,156627,156628],{},[33,156629,156630],{},"5 \u002F 2",[1037,156632,156633,156637,156640],{},[1083,156634,156635],{},[33,156636,34071],{},[1083,156638,156639],{},"整除",[1083,156641,156642],{},[33,156643,156644],{},"5 \u002F\u002F 2",[1037,156646,156647,156651,156654],{},[1083,156648,156649],{},[33,156650,1214],{},[1083,156652,156653],{},"取余",[1083,156655,156656],{},[33,156657,156658],{},"5 % 2",[1037,156660,156661,156665,156668],{},[1083,156662,156663],{},[33,156664,11408],{},[1083,156666,156667],{},"幂运算",[1083,156669,156670],{},[33,156671,156672],{},"2 ** 3",[14,156674,15879],{},[26,156676,156678],{"className":28,"code":156677,"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,156679,156680,156698,156715,156732],{"__ignoreMap":31},[36,156681,156682,156684,156686,156688,156691,156693,156695],{"class":38,"line":39},[36,156683,199],{"class":60},[36,156685,901],{"class":49},[36,156687,157],{"class":60},[36,156689,156690],{"class":53}," \u002F",[36,156692,15499],{"class":60},[36,156694,156305],{"class":49},[36,156696,156697],{"class":42},"# 2.5\n",[36,156699,156700,156702,156704,156706,156709,156711,156713],{"class":38,"line":46},[36,156701,199],{"class":60},[36,156703,901],{"class":49},[36,156705,157],{"class":60},[36,156707,156708],{"class":53}," \u002F\u002F",[36,156710,15499],{"class":60},[36,156712,46550],{"class":49},[36,156714,156308],{"class":42},[36,156716,156717,156719,156721,156723,156726,156728,156730],{"class":38,"line":78},[36,156718,199],{"class":60},[36,156720,901],{"class":49},[36,156722,157],{"class":60},[36,156724,156725],{"class":53}," %",[36,156727,15499],{"class":60},[36,156729,156305],{"class":49},[36,156731,156325],{"class":42},[36,156733,156734,156736,156738,156740,156743,156745,156747],{"class":38,"line":125},[36,156735,199],{"class":60},[36,156737,901],{"class":49},[36,156739,181],{"class":60},[36,156741,156742],{"class":53}," **",[36,156744,78812],{"class":60},[36,156746,46550],{"class":49},[36,156748,156749],{"class":42},"# 8\n",[868,156751,156753],{"id":156752},"_272-赋值运算符","2.7.2 赋值运算符",[26,156755,156757],{"className":28,"code":156756,"language":30,"meta":31,"style":31},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[33,156758,156759,156767,156775,156783,156791],{"__ignoreMap":31},[36,156760,156761,156763,156765],{"class":38,"line":39},[36,156762,156431],{"class":49},[36,156764,54],{"class":53},[36,156766,59170],{"class":60},[36,156768,156769,156771,156773],{"class":38,"line":46},[36,156770,156431],{"class":49},[36,156772,10224],{"class":53},[36,156774,55169],{"class":60},[36,156776,156777,156779,156781],{"class":38,"line":78},[36,156778,156431],{"class":49},[36,156780,150896],{"class":53},[36,156782,48465],{"class":60},[36,156784,156785,156787,156789],{"class":38,"line":125},[36,156786,156431],{"class":49},[36,156788,137792],{"class":53},[36,156790,120680],{"class":60},[36,156792,156793,156795,156798],{"class":38,"line":131},[36,156794,156431],{"class":49},[36,156796,156797],{"class":53},"\u002F=",[36,156799,48465],{"class":60},[14,156801,156802],{},"等价关系：",[26,156804,156806],{"className":28,"code":156805,"language":30,"meta":31,"style":31},"num += 1\nnum = num + 1\n",[33,156807,156808,156816],{"__ignoreMap":31},[36,156809,156810,156812,156814],{"class":38,"line":39},[36,156811,156431],{"class":49},[36,156813,10224],{"class":53},[36,156815,56441],{"class":60},[36,156817,156818,156820,156822,156825,156827],{"class":38,"line":46},[36,156819,156431],{"class":49},[36,156821,54],{"class":53},[36,156823,156824],{"class":49}," num ",[36,156826,1365],{"class":53},[36,156828,56441],{"class":60},[14,156830,156831,156832,101662,156835,29130],{},"Python 没有 ",[33,156833,156834],{},"num++",[33,156836,156837],{},"num--",[868,156839,156841],{"id":156840},"_273-比较运算符","2.7.3 比较运算符",[14,156843,156844],{},"比较运算结果是布尔值。",[26,156846,156848],{"className":28,"code":156847,"language":30,"meta":31,"style":31},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[33,156849,156850,156864,156879,156893],{"__ignoreMap":31},[36,156851,156852,156854,156856,156858,156860,156862],{"class":38,"line":39},[36,156853,199],{"class":60},[36,156855,901],{"class":49},[36,156857,332],{"class":60},[36,156859,26967],{"class":53},[36,156861,2898],{"class":60},[36,156863,75],{"class":49},[36,156865,156866,156868,156870,156872,156875,156877],{"class":38,"line":46},[36,156867,199],{"class":60},[36,156869,901],{"class":49},[36,156871,332],{"class":60},[36,156873,156874],{"class":53}," >=",[36,156876,2788],{"class":60},[36,156878,75],{"class":49},[36,156880,156881,156883,156885,156887,156889,156891],{"class":38,"line":78},[36,156882,199],{"class":60},[36,156884,901],{"class":49},[36,156886,332],{"class":60},[36,156888,102203],{"class":53},[36,156890,2833],{"class":60},[36,156892,75],{"class":49},[36,156894,156895,156897,156899,156901,156904,156906],{"class":38,"line":125},[36,156896,199],{"class":60},[36,156898,901],{"class":49},[36,156900,332],{"class":60},[36,156902,156903],{"class":53}," !=",[36,156905,2833],{"class":60},[36,156907,75],{"class":49},[14,156909,156910,156911,156913,156914,29130],{},"注意：判断相等用 ",[33,156912,3698],{},"，赋值用 ",[33,156915,54],{},[26,156917,156919],{"className":28,"code":156918,"language":30,"meta":31,"style":31},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[33,156920,156921,156933],{"__ignoreMap":31},[36,156922,156923,156925,156927,156930],{"class":38,"line":39},[36,156924,147190],{"class":49},[36,156926,54],{"class":53},[36,156928,156929],{"class":60}," 18",[36,156931,156932],{"class":42},"       # 赋值\n",[36,156934,156935,156937,156939,156941],{"class":38,"line":46},[36,156936,147190],{"class":49},[36,156938,3698],{"class":53},[36,156940,156929],{"class":60},[36,156942,156943],{"class":42},"      # 判断是否相等\n",[868,156945,156947],{"id":156946},"_274-逻辑运算符","2.7.4 逻辑运算符",[1031,156949,156950,156958],{},[1034,156951,156952],{},[1037,156953,156954,156956],{},[1040,156955,156568],{},[1040,156957,26614],{},[1078,156959,156960,156969,156978],{},[1037,156961,156962,156966],{},[1083,156963,156964],{},[33,156965,31204],{},[1083,156967,156968],{},"并且",[1037,156970,156971,156975],{},[1083,156972,156973],{},[33,156974,115734],{},[1083,156976,156977],{},"或者",[1037,156979,156980,156985],{},[1083,156981,156982],{},[33,156983,156984],{},"not",[1083,156986,156987],{},"取反",[26,156989,156991],{"className":28,"code":156990,"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,156992,156993,157001,157010,157014,157029,157043],{"__ignoreMap":31},[36,156994,156995,156997,156999],{"class":38,"line":39},[36,156996,147190],{"class":49},[36,156998,54],{"class":53},[36,157000,88807],{"class":60},[36,157002,157003,157006,157008],{"class":38,"line":46},[36,157004,157005],{"class":49},"has_ticket ",[36,157007,54],{"class":53},[36,157009,154243],{"class":60},[36,157011,157012],{"class":38,"line":78},[36,157013,194],{"emptyLinePlaceholder":193},[36,157015,157016,157018,157020,157022,157024,157026],{"class":38,"line":125},[36,157017,199],{"class":60},[36,157019,156412],{"class":49},[36,157021,2460],{"class":53},[36,157023,156929],{"class":60},[36,157025,121073],{"class":53},[36,157027,157028],{"class":49}," has_ticket)\n",[36,157030,157031,157033,157035,157037,157039,157041],{"class":38,"line":131},[36,157032,199],{"class":60},[36,157034,156412],{"class":49},[36,157036,1789],{"class":53},[36,157038,156929],{"class":60},[36,157040,114845],{"class":53},[36,157042,157028],{"class":49},[36,157044,157045,157047,157049,157051],{"class":38,"line":396},[36,157046,199],{"class":60},[36,157048,901],{"class":49},[36,157050,156984],{"class":53},[36,157052,157028],{"class":49},[21,157054,157056],{"id":157055},"_28-字符串定义","2.8 字符串定义",[14,157058,157059],{},"三种常见写法：",[26,157061,157063],{"className":28,"code":157062,"language":30,"meta":31,"style":31},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[33,157064,157065,157075,157084,157094],{"__ignoreMap":31},[36,157066,157067,157070,157072],{"class":38,"line":39},[36,157068,157069],{"class":49},"name1 ",[36,157071,54],{"class":53},[36,157073,157074],{"class":998}," '小明'\n",[36,157076,157077,157080,157082],{"class":38,"line":46},[36,157078,157079],{"class":49},"name2 ",[36,157081,54],{"class":53},[36,157083,149997],{"class":998},[36,157085,157086,157089,157091],{"class":38,"line":78},[36,157087,157088],{"class":49},"text ",[36,157090,54],{"class":53},[36,157092,157093],{"class":998}," \"\"\"这是多行字符串\n",[36,157095,157096],{"class":38,"line":125},[36,157097,157098],{"class":998},"可以换行\"\"\"\n",[14,157100,157101],{},"字符串中包含引号：",[26,157103,157105],{"className":28,"code":157104,"language":30,"meta":31,"style":31},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[33,157106,157107,157117,157127],{"__ignoreMap":31},[36,157108,157109,157112,157114],{"class":38,"line":39},[36,157110,157111],{"class":49},"msg ",[36,157113,54],{"class":53},[36,157115,157116],{"class":998}," \"他说:'你好'\"\n",[36,157118,157119,157122,157124],{"class":38,"line":46},[36,157120,157121],{"class":49},"msg2 ",[36,157123,54],{"class":53},[36,157125,157126],{"class":998}," '他说:\"你好\"'\n",[36,157128,157129,157132,157134,157137,157140,157143,157145],{"class":38,"line":78},[36,157130,157131],{"class":49},"msg3 ",[36,157133,54],{"class":53},[36,157135,157136],{"class":998}," \"他说:",[36,157138,157139],{"class":60},"\\\"",[36,157141,157142],{"class":998},"你好",[36,157144,157139],{"class":60},[36,157146,25878],{"class":998},[14,157148,157149],{},"常见转义字符：",[1031,157151,157152,157161],{},[1034,157153,157154],{},[1037,157155,157156,157159],{},[1040,157157,157158],{},"写法",[1040,157160,101344],{},[1078,157162,157163,157173,157182,157192,157201],{},[1037,157164,157165,157170],{},[1083,157166,157167],{},[33,157168,157169],{},"\\n",[1083,157171,157172],{},"换行",[1037,157174,157175,157179],{},[1083,157176,157177],{},[33,157178,1980],{},[1083,157180,157181],{},"制表符",[1037,157183,157184,157189],{},[1083,157185,157186],{},[33,157187,157188],{},"\\\\",[1083,157190,157191],{},"反斜杠",[1037,157193,157194,157198],{},[1083,157195,157196],{},[33,157197,157139],{},[1083,157199,157200],{},"双引号",[1037,157202,157203,157208],{},[1083,157204,157205],{},[33,157206,157207],{},"\\'",[1083,157209,157210],{},"单引号",[21,157212,157214],{"id":157213},"_29-字符串拼接","2.9 字符串拼接",[26,157216,157218],{"className":28,"code":157217,"language":30,"meta":31,"style":31},"name = \"小明\"\nprint(\"你好，\" + name)\n",[33,157219,157220,157228],{"__ignoreMap":31},[36,157221,157222,157224,157226],{"class":38,"line":39},[36,157223,147180],{"class":49},[36,157225,54],{"class":53},[36,157227,149997],{"class":998},[36,157229,157230,157232,157234,157237,157239],{"class":38,"line":46},[36,157231,199],{"class":60},[36,157233,901],{"class":49},[36,157235,157236],{"class":998},"\"你好，\"",[36,157238,46308],{"class":53},[36,157240,157241],{"class":49}," name)\n",[14,157243,157244],{},"字符串只能和字符串拼接：",[26,157246,157248],{"className":28,"code":157247,"language":30,"meta":31,"style":31},"age = 18\nprint(\"年龄:\" + str(age))\n",[33,157249,157250,157258],{"__ignoreMap":31},[36,157251,157252,157254,157256],{"class":38,"line":39},[36,157253,147190],{"class":49},[36,157255,54],{"class":53},[36,157257,147195],{"class":60},[36,157259,157260,157262,157264,157266,157268,157270],{"class":38,"line":46},[36,157261,199],{"class":60},[36,157263,901],{"class":49},[36,157265,147161],{"class":998},[36,157267,46308],{"class":53},[36,157269,74661],{"class":60},[36,157271,157272],{"class":49},"(age))\n",[14,157274,157275],{},"更推荐使用格式化字符串。",[21,157277,157279],{"id":157278},"_210-字符串格式化","2.10 字符串格式化",[868,157281,157283],{"id":157282},"_2101-百分号格式化","2.10.1 百分号格式化",[26,157285,157287],{"className":28,"code":157286,"language":30,"meta":31,"style":31},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[33,157288,157289,157297,157305,157314,157318],{"__ignoreMap":31},[36,157290,157291,157293,157295],{"class":38,"line":39},[36,157292,147180],{"class":49},[36,157294,54],{"class":53},[36,157296,149997],{"class":998},[36,157298,157299,157301,157303],{"class":38,"line":46},[36,157300,147190],{"class":49},[36,157302,54],{"class":53},[36,157304,147195],{"class":60},[36,157306,157307,157309,157311],{"class":38,"line":78},[36,157308,156002],{"class":49},[36,157310,54],{"class":53},[36,157312,157313],{"class":60}," 95.5\n",[36,157315,157316],{"class":38,"line":125},[36,157317,194],{"emptyLinePlaceholder":193},[36,157319,157320,157322,157324,157327,157330,157333,157336,157339,157342,157344,157346],{"class":38,"line":131},[36,157321,199],{"class":60},[36,157323,901],{"class":49},[36,157325,157326],{"class":998},"\"姓名:",[36,157328,157329],{"class":60},"%s",[36,157331,157332],{"class":998}," 年龄:",[36,157334,157335],{"class":60},"%d",[36,157337,157338],{"class":998}," 分数:",[36,157340,157341],{"class":60},"%.1f",[36,157343,1141],{"class":998},[36,157345,156725],{"class":53},[36,157347,157348],{"class":49}," (name, age, score))\n",[14,157350,157351],{},"常用占位符：",[1031,157353,157354,157363],{},[1034,157355,157356],{},[1037,157357,157358,157361],{},[1040,157359,157360],{},"占位符",[1040,157362,26614],{},[1078,157364,157365,157373,157381],{},[1037,157366,157367,157371],{},[1083,157368,157369],{},[33,157370,157329],{},[1083,157372,155868],{},[1037,157374,157375,157379],{},[1083,157376,157377],{},[33,157378,157335],{},[1083,157380,155846],{},[1037,157382,157383,157388],{},[1083,157384,157385],{},[33,157386,157387],{},"%f",[1083,157389,155857],{},[14,157391,157392],{},"精度控制：",[26,157394,157396],{"className":28,"code":157395,"language":30,"meta":31,"style":31},"price = 12.3456\nprint(\"%.2f\" % price)\n",[33,157397,157398,157407],{"__ignoreMap":31},[36,157399,157400,157402,157404],{"class":38,"line":39},[36,157401,147325],{"class":49},[36,157403,54],{"class":53},[36,157405,157406],{"class":60}," 12.3456\n",[36,157408,157409,157411,157413,157415,157418,157420,157422],{"class":38,"line":46},[36,157410,199],{"class":60},[36,157412,901],{"class":49},[36,157414,1141],{"class":998},[36,157416,157417],{"class":60},"%.2f",[36,157419,1141],{"class":998},[36,157421,156725],{"class":53},[36,157423,157424],{"class":49}," price)\n",[868,157426,157428],{"id":157427},"_2102-format方法","2.10.2 format方法",[26,157430,157432],{"className":28,"code":157431,"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,157433,157434,157442,157450,157454,157473,157493],{"__ignoreMap":31},[36,157435,157436,157438,157440],{"class":38,"line":39},[36,157437,147180],{"class":49},[36,157439,54],{"class":53},[36,157441,149997],{"class":998},[36,157443,157444,157446,157448],{"class":38,"line":46},[36,157445,147190],{"class":49},[36,157447,54],{"class":53},[36,157449,147195],{"class":60},[36,157451,157452],{"class":38,"line":78},[36,157453,194],{"emptyLinePlaceholder":193},[36,157455,157456,157458,157460,157462,157464,157466,157468,157470],{"class":38,"line":125},[36,157457,199],{"class":60},[36,157459,901],{"class":49},[36,157461,157326],{"class":998},[36,157463,33201],{"class":60},[36,157465,157332],{"class":998},[36,157467,33201],{"class":60},[36,157469,1141],{"class":998},[36,157471,157472],{"class":49},".format(name, age))\n",[36,157474,157475,157477,157479,157481,157484,157486,157489,157491],{"class":38,"line":131},[36,157476,199],{"class":60},[36,157478,901],{"class":49},[36,157480,157326],{"class":998},[36,157482,157483],{"class":60},"{0}",[36,157485,157332],{"class":998},[36,157487,157488],{"class":60},"{1}",[36,157490,1141],{"class":998},[36,157492,157472],{"class":49},[36,157494,157495,157497,157499,157501,157504,157506,157509,157511,157514,157516,157518,157521,157523,157525],{"class":38,"line":396},[36,157496,199],{"class":60},[36,157498,901],{"class":49},[36,157500,157326],{"class":998},[36,157502,157503],{"class":60},"{name}",[36,157505,157332],{"class":998},[36,157507,157508],{"class":60},"{age}",[36,157510,1141],{"class":998},[36,157512,157513],{"class":49},".format(",[36,157515,80552],{"class":416},[36,157517,54],{"class":53},[36,157519,157520],{"class":49},"name, ",[36,157522,70963],{"class":416},[36,157524,54],{"class":53},[36,157526,157527],{"class":49},"age))\n",[868,157529,157531],{"id":157530},"_2103-f-string","2.10.3 f-string",[14,157533,157534],{},"推荐写法：",[26,157536,157538],{"className":28,"code":157537,"language":30,"meta":31,"style":31},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[33,157539,157540,157548,157556,157564,157568],{"__ignoreMap":31},[36,157541,157542,157544,157546],{"class":38,"line":39},[36,157543,147180],{"class":49},[36,157545,54],{"class":53},[36,157547,149997],{"class":998},[36,157549,157550,157552,157554],{"class":38,"line":46},[36,157551,147190],{"class":49},[36,157553,54],{"class":53},[36,157555,147195],{"class":60},[36,157557,157558,157560,157562],{"class":38,"line":78},[36,157559,156002],{"class":49},[36,157561,54],{"class":53},[36,157563,157313],{"class":60},[36,157565,157566],{"class":38,"line":125},[36,157567,194],{"emptyLinePlaceholder":193},[36,157569,157570,157572,157574,157576,157578,157580,157582,157584,157586,157588,157590,157592,157594,157596,157599,157602,157604,157606],{"class":38,"line":131},[36,157571,199],{"class":60},[36,157573,901],{"class":49},[36,157575,949],{"class":53},[36,157577,157326],{"class":998},[36,157579,1775],{"class":60},[36,157581,80552],{"class":49},[36,157583,1825],{"class":60},[36,157585,157332],{"class":998},[36,157587,1775],{"class":60},[36,157589,70963],{"class":49},[36,157591,1825],{"class":60},[36,157593,157338],{"class":998},[36,157595,1775],{"class":60},[36,157597,157598],{"class":49},"score",[36,157600,157601],{"class":53},":.1f",[36,157603,1825],{"class":60},[36,157605,1141],{"class":998},[36,157607,75],{"class":49},[14,157609,157610],{},"表达式也可以放进去：",[26,157612,157614],{"className":28,"code":157613,"language":30,"meta":31,"style":31},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[33,157615,157616,157624,157632],{"__ignoreMap":31},[36,157617,157618,157620,157622],{"class":38,"line":39},[36,157619,147325],{"class":49},[36,157621,54],{"class":53},[36,157623,147330],{"class":60},[36,157625,157626,157628,157630],{"class":38,"line":46},[36,157627,147335],{"class":49},[36,157629,54],{"class":53},[36,157631,55169],{"class":60},[36,157633,157634,157636,157638,157640,157643,157645,157647,157649,157652,157654,157657],{"class":38,"line":78},[36,157635,199],{"class":60},[36,157637,901],{"class":49},[36,157639,949],{"class":53},[36,157641,157642],{"class":998},"\"总价:",[36,157644,1775],{"class":60},[36,157646,147325],{"class":49},[36,157648,1339],{"class":53},[36,157650,157651],{"class":49}," count",[36,157653,1825],{"class":60},[36,157655,157656],{"class":998},"元\"",[36,157658,75],{"class":49},[21,157660,157662],{"id":157661},"_211-input输入","2.11 input输入",[14,157664,157665,157668],{},[33,157666,157667],{},"input()"," 会暂停程序，等待用户输入。",[26,157670,157672],{"className":28,"code":157671,"language":30,"meta":31,"style":31},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[33,157673,157674,157688],{"__ignoreMap":31},[36,157675,157676,157678,157680,157682,157684,157686],{"class":38,"line":39},[36,157677,147180],{"class":49},[36,157679,54],{"class":53},[36,157681,61347],{"class":60},[36,157683,901],{"class":49},[36,157685,153023],{"class":998},[36,157687,75],{"class":49},[36,157689,157690,157692,157694,157696,157699,157701,157703,157705,157707],{"class":38,"line":46},[36,157691,199],{"class":60},[36,157693,901],{"class":49},[36,157695,949],{"class":53},[36,157697,157698],{"class":998},"\"你好，",[36,157700,1775],{"class":60},[36,157702,80552],{"class":49},[36,157704,1825],{"class":60},[36,157706,1141],{"class":998},[36,157708,75],{"class":49},[14,157710,157711],{},"输入整数：",[26,157713,157715],{"className":28,"code":157714,"language":30,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[33,157716,157717,157735],{"__ignoreMap":31},[36,157718,157719,157721,157723,157725,157727,157729,157731,157733],{"class":38,"line":39},[36,157720,147190],{"class":49},[36,157722,54],{"class":53},[36,157724,3132],{"class":60},[36,157726,901],{"class":49},[36,157728,54563],{"class":60},[36,157730,901],{"class":49},[36,157732,153038],{"class":998},[36,157734,31239],{"class":49},[36,157736,157737,157739,157741,157743,157746,157748,157750,157752,157755,157757],{"class":38,"line":46},[36,157738,199],{"class":60},[36,157740,901],{"class":49},[36,157742,949],{"class":53},[36,157744,157745],{"class":998},"\"明年你",[36,157747,1775],{"class":60},[36,157749,147190],{"class":49},[36,157751,1365],{"class":53},[36,157753,157754],{"class":60}," 1}",[36,157756,150048],{"class":998},[36,157758,75],{"class":49},[14,157760,157761],{},"输入小数：",[26,157763,157765],{"className":28,"code":157764,"language":30,"meta":31,"style":31},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[33,157766,157767,157786],{"__ignoreMap":31},[36,157768,157769,157771,157773,157775,157777,157779,157781,157784],{"class":38,"line":39},[36,157770,155975],{"class":49},[36,157772,54],{"class":53},[36,157774,110441],{"class":60},[36,157776,901],{"class":49},[36,157778,54563],{"class":60},[36,157780,901],{"class":49},[36,157782,157783],{"class":998},"\"请输入身高:\"",[36,157785,31239],{"class":49},[36,157787,157788,157790,157792,157794,157797,157799,157801,157804,157806,157809],{"class":38,"line":46},[36,157789,199],{"class":60},[36,157791,901],{"class":49},[36,157793,949],{"class":53},[36,157795,157796],{"class":998},"\"身高:",[36,157798,1775],{"class":60},[36,157800,25726],{"class":49},[36,157802,157803],{"class":53},":.2f",[36,157805,1825],{"class":60},[36,157807,157808],{"class":998},"米\"",[36,157810,75],{"class":49},[21,157812,157814],{"id":157813},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157816,123936],{},[851,157818,157819,157822,157825,157828],{},[854,157820,157821],{},"输入商品单价。",[854,157823,157824],{},"输入购买数量。",[854,157826,157827],{},"输入折扣，例如 0.8 表示八折。",[854,157829,157830],{},"输出最终金额，保留两位小数。",[14,157832,10782],{},[26,157834,157836],{"className":28,"code":157835,"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,157837,157838,157857,157876,157896,157900,157920,157924,157947,157968,157990],{"__ignoreMap":31},[36,157839,157840,157842,157844,157846,157848,157850,157852,157855],{"class":38,"line":39},[36,157841,147325],{"class":49},[36,157843,54],{"class":53},[36,157845,110441],{"class":60},[36,157847,901],{"class":49},[36,157849,54563],{"class":60},[36,157851,901],{"class":49},[36,157853,157854],{"class":998},"\"请输入商品单价:\"",[36,157856,31239],{"class":49},[36,157858,157859,157861,157863,157865,157867,157869,157871,157874],{"class":38,"line":46},[36,157860,147335],{"class":49},[36,157862,54],{"class":53},[36,157864,3132],{"class":60},[36,157866,901],{"class":49},[36,157868,54563],{"class":60},[36,157870,901],{"class":49},[36,157872,157873],{"class":998},"\"请输入购买数量:\"",[36,157875,31239],{"class":49},[36,157877,157878,157881,157883,157885,157887,157889,157891,157894],{"class":38,"line":78},[36,157879,157880],{"class":49},"discount ",[36,157882,54],{"class":53},[36,157884,110441],{"class":60},[36,157886,901],{"class":49},[36,157888,54563],{"class":60},[36,157890,901],{"class":49},[36,157892,157893],{"class":998},"\"请输入折扣:\"",[36,157895,31239],{"class":49},[36,157897,157898],{"class":38,"line":125},[36,157899,194],{"emptyLinePlaceholder":193},[36,157901,157902,157905,157907,157910,157912,157915,157917],{"class":38,"line":131},[36,157903,157904],{"class":49},"total ",[36,157906,54],{"class":53},[36,157908,157909],{"class":49}," price ",[36,157911,1339],{"class":53},[36,157913,157914],{"class":49}," count ",[36,157916,1339],{"class":53},[36,157918,157919],{"class":49}," discount\n",[36,157921,157922],{"class":38,"line":396},[36,157923,194],{"emptyLinePlaceholder":193},[36,157925,157926,157928,157930,157932,157935,157937,157939,157941,157943,157945],{"class":38,"line":407},[36,157927,199],{"class":60},[36,157929,901],{"class":49},[36,157931,949],{"class":53},[36,157933,157934],{"class":998},"\"商品单价:",[36,157936,1775],{"class":60},[36,157938,80557],{"class":49},[36,157940,157803],{"class":53},[36,157942,1825],{"class":60},[36,157944,1141],{"class":998},[36,157946,75],{"class":49},[36,157948,157949,157951,157953,157955,157958,157960,157962,157964,157966],{"class":38,"line":2061},[36,157950,199],{"class":60},[36,157952,901],{"class":49},[36,157954,949],{"class":53},[36,157956,157957],{"class":998},"\"购买数量:",[36,157959,1775],{"class":60},[36,157961,85176],{"class":49},[36,157963,1825],{"class":60},[36,157965,1141],{"class":998},[36,157967,75],{"class":49},[36,157969,157970,157972,157974,157976,157979,157981,157984,157986,157988],{"class":38,"line":2067},[36,157971,199],{"class":60},[36,157973,901],{"class":49},[36,157975,949],{"class":53},[36,157977,157978],{"class":998},"\"折扣:",[36,157980,1775],{"class":60},[36,157982,157983],{"class":49},"discount",[36,157985,1825],{"class":60},[36,157987,1141],{"class":998},[36,157989,75],{"class":49},[36,157991,157992,157994,157996,157998,158001,158003,158006,158008,158010,158012],{"class":38,"line":2079},[36,157993,199],{"class":60},[36,157995,901],{"class":49},[36,157997,949],{"class":53},[36,157999,158000],{"class":998},"\"应付金额:",[36,158002,1775],{"class":60},[36,158004,158005],{"class":49},"total",[36,158007,157803],{"class":53},[36,158009,1825],{"class":60},[36,158011,157656],{"class":998},[36,158013,75],{"class":49},[21,158015,158017],{"id":158016},"_213-易错点","2.13 易错点",[851,158019,158020,158025,158031,158039,158042],{},[854,158021,158022,158024],{},[33,158023,157667],{}," 的结果是字符串，做运算前要转换。",[854,158026,158027,158028,29130],{},"字符串拼接时，数字要先 ",[33,158029,158030],{},"str()",[854,158032,158033,158035,158036,158038],{},[33,158034,54],{}," 是赋值，",[33,158037,3698],{}," 是比较。",[854,158040,158041],{},"Python 没有自增自减运算符。",[854,158043,158044],{},"浮点数计算可能有精度误差：",[26,158046,158048],{"className":28,"code":158047,"language":30,"meta":31,"style":31},"print(0.1 + 0.2)\n",[33,158049,158050],{"__ignoreMap":31},[36,158051,158052,158054,158056,158058,158060,158063],{"class":38,"line":39},[36,158053,199],{"class":60},[36,158055,901],{"class":49},[36,158057,86952],{"class":60},[36,158059,46308],{"class":53},[36,158061,158062],{"class":60}," 0.2",[36,158064,75],{"class":49},[14,158066,158067,158068,158071],{},"金额计算如果要求严格，可以后续学习 ",[33,158069,158070],{},"decimal"," 模块。",[21,158073,158075],{"id":158074},"_214-本章练习","2.14 本章练习",[851,158077,158078,158081,158084,158087,158090],{},[854,158079,158080],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[854,158082,158083],{},"输入圆的半径，计算面积，保留两位小数。",[854,158085,158086],{},"输入工资和奖金，计算总收入。",[854,158088,158089],{},"输入摄氏温度，转换为华氏温度。",[854,158091,158092],{},"写一个 BMI 计算程序：",[26,158094,158097],{"className":158095,"code":158096,"language":5935,"meta":31},[5933],"BMI = 体重kg \u002F 身高m ** 2\n",[33,158098,158096],{"__ignoreMap":31},[807,158100,158101],{},"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":46,"depth":46,"links":158103},[158104,158105,158106,158107,158108,158109,158110,158116,158117,158118,158123,158124,158125,158126],{"id":155665,"depth":46,"text":155666},{"id":155774,"depth":46,"text":155775},{"id":155945,"depth":46,"text":155946},{"id":156022,"depth":46,"text":156023},{"id":51473,"depth":46,"text":51474},{"id":156328,"depth":46,"text":156329},{"id":156554,"depth":46,"text":156555,"children":158111},[158112,158113,158114,158115],{"id":156558,"depth":78,"text":156559},{"id":156752,"depth":78,"text":156753},{"id":156840,"depth":78,"text":156841},{"id":156946,"depth":78,"text":156947},{"id":157055,"depth":46,"text":157056},{"id":157213,"depth":46,"text":157214},{"id":157278,"depth":46,"text":157279,"children":158119},[158120,158121,158122],{"id":157282,"depth":78,"text":157283},{"id":157427,"depth":78,"text":157428},{"id":157530,"depth":78,"text":157531},{"id":157661,"depth":46,"text":157662},{"id":157813,"depth":46,"text":157814},{"id":158016,"depth":46,"text":158017},{"id":158074,"depth":46,"text":158075},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155657,"description":823},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158133,"title":158134,"body":158135,"description":823,"extension":824,"meta":159771,"navigation":193,"path":159772,"seo":159773,"stem":159774,"__hash__":159775},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158136,"toc":159752},[158137,158140,158144,158147,158162,158165,158193,158197,158247,158249,158265,158268,158294,158297,158301,158368,158371,158387,158391,158394,158512,158515,158522,158571,158577,158581,158584,158697,158700,158704,158708,158711,158761,158765,158768,158818,158822,158825,158863,158867,158870,158916,158919,158954,158958,158963,158966,159012,159014,159081,159085,159091,159202,159211,159215,159217,159228,159230,159396,159400,159402,159416,159418,159632,159636,159655,159672,159675,159721,159725,159749],[10,158138,158134],{"id":158139},"_3-判断语句",[21,158141,158143],{"id":158142},"_31-布尔值","3.1 布尔值",[14,158145,158146],{},"判断语句依赖布尔值：",[26,158148,158150],{"className":28,"code":158149,"language":30,"meta":31,"style":31},"True\nFalse\n",[33,158151,158152,158157],{"__ignoreMap":31},[36,158153,158154],{"class":38,"line":39},[36,158155,158156],{"class":60},"True\n",[36,158158,158159],{"class":38,"line":46},[36,158160,158161],{"class":60},"False\n",[14,158163,158164],{},"比较表达式会产生布尔值：",[26,158166,158168],{"className":28,"code":158167,"language":30,"meta":31,"style":31},"age = 18\nprint(age >= 18)  # True\n",[33,158169,158170,158178],{"__ignoreMap":31},[36,158171,158172,158174,158176],{"class":38,"line":39},[36,158173,147190],{"class":49},[36,158175,54],{"class":53},[36,158177,147195],{"class":60},[36,158179,158180,158182,158184,158186,158188,158190],{"class":38,"line":46},[36,158181,199],{"class":60},[36,158183,156412],{"class":49},[36,158185,2460],{"class":53},[36,158187,156929],{"class":60},[36,158189,46550],{"class":49},[36,158191,158192],{"class":42},"# True\n",[21,158194,158196],{"id":158195},"_32-if基础语法","3.2 if基础语法",[26,158198,158200],{"className":28,"code":158199,"language":30,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[33,158201,158202,158220,158224,158236],{"__ignoreMap":31},[36,158203,158204,158206,158208,158210,158212,158214,158216,158218],{"class":38,"line":39},[36,158205,147190],{"class":49},[36,158207,54],{"class":53},[36,158209,3132],{"class":60},[36,158211,901],{"class":49},[36,158213,54563],{"class":60},[36,158215,901],{"class":49},[36,158217,153038],{"class":998},[36,158219,31239],{"class":49},[36,158221,158222],{"class":38,"line":46},[36,158223,194],{"emptyLinePlaceholder":193},[36,158225,158226,158228,158230,158232,158234],{"class":38,"line":78},[36,158227,2281],{"class":53},[36,158229,16451],{"class":49},[36,158231,2460],{"class":53},[36,158233,156929],{"class":60},[36,158235,4488],{"class":49},[36,158237,158238,158240,158242,158245],{"class":38,"line":125},[36,158239,32041],{"class":60},[36,158241,901],{"class":49},[36,158243,158244],{"class":998},"\"可以进入网吧\"",[36,158246,75],{"class":49},[14,158248,9772],{},[851,158250,158251,158256,158259,158262],{},[854,158252,158253,158255],{},[33,158254,2281],{}," 后面是条件表达式。",[854,158257,158258],{},"条件后面必须写冒号。",[854,158260,158261],{},"条件成立时执行缩进代码块。",[854,158263,158264],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,158266,158267],{},"错误示例：",[26,158269,158271],{"className":28,"code":158270,"language":30,"meta":31,"style":31},"if age >= 18\n    print(\"可以进入\")\n",[33,158272,158273,158283],{"__ignoreMap":31},[36,158274,158275,158277,158279,158281],{"class":38,"line":39},[36,158276,2281],{"class":53},[36,158278,16451],{"class":49},[36,158280,2460],{"class":53},[36,158282,147195],{"class":60},[36,158284,158285,158287,158289,158292],{"class":38,"line":46},[36,158286,32041],{"class":60},[36,158288,901],{"class":49},[36,158290,158291],{"class":998},"\"可以进入\"",[36,158293,75],{"class":49},[14,158295,158296],{},"缺少冒号。",[21,158298,158300],{"id":158299},"_33-if-else","3.3 if else",[26,158302,158304],{"className":28,"code":158303,"language":30,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[33,158305,158306,158324,158328,158340,158351,158357],{"__ignoreMap":31},[36,158307,158308,158310,158312,158314,158316,158318,158320,158322],{"class":38,"line":39},[36,158309,147190],{"class":49},[36,158311,54],{"class":53},[36,158313,3132],{"class":60},[36,158315,901],{"class":49},[36,158317,54563],{"class":60},[36,158319,901],{"class":49},[36,158321,153038],{"class":998},[36,158323,31239],{"class":49},[36,158325,158326],{"class":38,"line":46},[36,158327,194],{"emptyLinePlaceholder":193},[36,158329,158330,158332,158334,158336,158338],{"class":38,"line":78},[36,158331,2281],{"class":53},[36,158333,16451],{"class":49},[36,158335,2460],{"class":53},[36,158337,156929],{"class":60},[36,158339,4488],{"class":49},[36,158341,158342,158344,158346,158349],{"class":38,"line":125},[36,158343,32041],{"class":60},[36,158345,901],{"class":49},[36,158347,158348],{"class":998},"\"成年人\"",[36,158350,75],{"class":49},[36,158352,158353,158355],{"class":38,"line":131},[36,158354,2451],{"class":53},[36,158356,4488],{"class":49},[36,158358,158359,158361,158363,158366],{"class":38,"line":396},[36,158360,32041],{"class":60},[36,158362,901],{"class":49},[36,158364,158365],{"class":998},"\"未成年人\"",[36,158367,75],{"class":49},[14,158369,158370],{},"执行逻辑：",[851,158372,158373,158379,158384],{},[854,158374,158375,158376,158378],{},"条件成立，执行 ",[33,158377,2281],{}," 代码块。",[854,158380,158381,158382,158378],{},"条件不成立，执行 ",[33,158383,2451],{},[854,158385,158386],{},"两个代码块只会执行其中一个。",[21,158388,158390],{"id":158389},"_34-if-elif-else","3.4 if elif else",[14,158392,158393],{},"多条件判断：",[26,158395,158397],{"className":28,"code":158396,"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,158398,158399,158417,158421,158435,158446,158460,158471,158484,158495,158501],{"__ignoreMap":31},[36,158400,158401,158403,158405,158407,158409,158411,158413,158415],{"class":38,"line":39},[36,158402,156002],{"class":49},[36,158404,54],{"class":53},[36,158406,3132],{"class":60},[36,158408,901],{"class":49},[36,158410,54563],{"class":60},[36,158412,901],{"class":49},[36,158414,153053],{"class":998},[36,158416,31239],{"class":49},[36,158418,158419],{"class":38,"line":46},[36,158420,194],{"emptyLinePlaceholder":193},[36,158422,158423,158425,158428,158430,158433],{"class":38,"line":78},[36,158424,2281],{"class":53},[36,158426,158427],{"class":49}," score ",[36,158429,2460],{"class":53},[36,158431,158432],{"class":60}," 90",[36,158434,4488],{"class":49},[36,158436,158437,158439,158441,158444],{"class":38,"line":125},[36,158438,32041],{"class":60},[36,158440,901],{"class":49},[36,158442,158443],{"class":998},"\"优秀\"",[36,158445,75],{"class":49},[36,158447,158448,158451,158453,158455,158458],{"class":38,"line":131},[36,158449,158450],{"class":53},"elif",[36,158452,158427],{"class":49},[36,158454,2460],{"class":53},[36,158456,158457],{"class":60}," 80",[36,158459,4488],{"class":49},[36,158461,158462,158464,158466,158469],{"class":38,"line":396},[36,158463,32041],{"class":60},[36,158465,901],{"class":49},[36,158467,158468],{"class":998},"\"良好\"",[36,158470,75],{"class":49},[36,158472,158473,158475,158477,158479,158482],{"class":38,"line":407},[36,158474,158450],{"class":53},[36,158476,158427],{"class":49},[36,158478,2460],{"class":53},[36,158480,158481],{"class":60}," 60",[36,158483,4488],{"class":49},[36,158485,158486,158488,158490,158493],{"class":38,"line":2061},[36,158487,32041],{"class":60},[36,158489,901],{"class":49},[36,158491,158492],{"class":998},"\"及格\"",[36,158494,75],{"class":49},[36,158496,158497,158499],{"class":38,"line":2067},[36,158498,2451],{"class":53},[36,158500,4488],{"class":49},[36,158502,158503,158505,158507,158510],{"class":38,"line":2079},[36,158504,32041],{"class":60},[36,158506,901],{"class":49},[36,158508,158509],{"class":998},"\"不及格\"",[36,158511,75],{"class":49},[14,158513,158514],{},"注意判断顺序很重要。",[14,158516,158517,158518,158521],{},"如果把 ",[33,158519,158520],{},"score >= 60"," 放在最前面：",[26,158523,158525],{"className":28,"code":158524,"language":30,"meta":31,"style":31},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[33,158526,158527,158539,158549,158561],{"__ignoreMap":31},[36,158528,158529,158531,158533,158535,158537],{"class":38,"line":39},[36,158530,2281],{"class":53},[36,158532,158427],{"class":49},[36,158534,2460],{"class":53},[36,158536,158481],{"class":60},[36,158538,4488],{"class":49},[36,158540,158541,158543,158545,158547],{"class":38,"line":46},[36,158542,32041],{"class":60},[36,158544,901],{"class":49},[36,158546,158492],{"class":998},[36,158548,75],{"class":49},[36,158550,158551,158553,158555,158557,158559],{"class":38,"line":78},[36,158552,158450],{"class":53},[36,158554,158427],{"class":49},[36,158556,2460],{"class":53},[36,158558,158432],{"class":60},[36,158560,4488],{"class":49},[36,158562,158563,158565,158567,158569],{"class":38,"line":125},[36,158564,32041],{"class":60},[36,158566,901],{"class":49},[36,158568,158443],{"class":998},[36,158570,75],{"class":49},[14,158572,158573,158574,158576],{},"成绩 95 会先满足 ",[33,158575,158520],{},"，后面的优秀分支就不会执行。",[21,158578,158580],{"id":158579},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,158582,158583],{},"嵌套判断就是在一个判断内部再写判断。",[26,158585,158587],{"className":28,"code":158586,"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,158588,158589,158607,158622,158626,158638,158652,158662,158669,158680,158686],{"__ignoreMap":31},[36,158590,158591,158593,158595,158597,158599,158601,158603,158605],{"class":38,"line":39},[36,158592,147190],{"class":49},[36,158594,54],{"class":53},[36,158596,3132],{"class":60},[36,158598,901],{"class":49},[36,158600,54563],{"class":60},[36,158602,901],{"class":49},[36,158604,153038],{"class":998},[36,158606,31239],{"class":49},[36,158608,158609,158611,158613,158615,158617,158620],{"class":38,"line":46},[36,158610,157005],{"class":49},[36,158612,54],{"class":53},[36,158614,61347],{"class":60},[36,158616,901],{"class":49},[36,158618,158619],{"class":998},"\"是否有票(y\u002Fn):\"",[36,158621,75],{"class":49},[36,158623,158624],{"class":38,"line":78},[36,158625,194],{"emptyLinePlaceholder":193},[36,158627,158628,158630,158632,158634,158636],{"class":38,"line":125},[36,158629,2281],{"class":53},[36,158631,16451],{"class":49},[36,158633,2460],{"class":53},[36,158635,156929],{"class":60},[36,158637,4488],{"class":49},[36,158639,158640,158642,158645,158647,158650],{"class":38,"line":131},[36,158641,3850],{"class":53},[36,158643,158644],{"class":49}," has_ticket ",[36,158646,3698],{"class":53},[36,158648,158649],{"class":998}," \"y\"",[36,158651,4488],{"class":49},[36,158653,158654,158656,158658,158660],{"class":38,"line":396},[36,158655,33193],{"class":60},[36,158657,901],{"class":49},[36,158659,158291],{"class":998},[36,158661,75],{"class":49},[36,158663,158664,158667],{"class":38,"line":407},[36,158665,158666],{"class":53},"    else",[36,158668,4488],{"class":49},[36,158670,158671,158673,158675,158678],{"class":38,"line":2061},[36,158672,33193],{"class":60},[36,158674,901],{"class":49},[36,158676,158677],{"class":998},"\"请先买票\"",[36,158679,75],{"class":49},[36,158681,158682,158684],{"class":38,"line":2067},[36,158683,2451],{"class":53},[36,158685,4488],{"class":49},[36,158687,158688,158690,158692,158695],{"class":38,"line":2079},[36,158689,32041],{"class":60},[36,158691,901],{"class":49},[36,158693,158694],{"class":998},"\"未成年人禁止进入\"",[36,158696,75],{"class":49},[14,158698,158699],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[21,158701,158703],{"id":158702},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[868,158705,158707],{"id":158706},"_361-and","3.6.1 and",[14,158709,158710],{},"两个条件都成立才成立。",[26,158712,158714],{"className":28,"code":158713,"language":30,"meta":31,"style":31},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[33,158715,158716,158724,158732,158736,158751],{"__ignoreMap":31},[36,158717,158718,158720,158722],{"class":38,"line":39},[36,158719,147190],{"class":49},[36,158721,54],{"class":53},[36,158723,88807],{"class":60},[36,158725,158726,158728,158730],{"class":38,"line":46},[36,158727,157005],{"class":49},[36,158729,54],{"class":53},[36,158731,154243],{"class":60},[36,158733,158734],{"class":38,"line":78},[36,158735,194],{"emptyLinePlaceholder":193},[36,158737,158738,158740,158742,158744,158746,158748],{"class":38,"line":125},[36,158739,2281],{"class":53},[36,158741,16451],{"class":49},[36,158743,2460],{"class":53},[36,158745,156929],{"class":60},[36,158747,121073],{"class":53},[36,158749,158750],{"class":49}," has_ticket:\n",[36,158752,158753,158755,158757,158759],{"class":38,"line":131},[36,158754,32041],{"class":60},[36,158756,901],{"class":49},[36,158758,158291],{"class":998},[36,158760,75],{"class":49},[868,158762,158764],{"id":158763},"_362-or","3.6.2 or",[14,158766,158767],{},"只要一个条件成立就成立。",[26,158769,158771],{"className":28,"code":158770,"language":30,"meta":31,"style":31},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[33,158772,158773,158782,158791,158795,158807],{"__ignoreMap":31},[36,158774,158775,158778,158780],{"class":38,"line":39},[36,158776,158777],{"class":49},"is_vip ",[36,158779,54],{"class":53},[36,158781,126451],{"class":60},[36,158783,158784,158787,158789],{"class":38,"line":46},[36,158785,158786],{"class":49},"coupon ",[36,158788,54],{"class":53},[36,158790,154243],{"class":60},[36,158792,158793],{"class":38,"line":78},[36,158794,194],{"emptyLinePlaceholder":193},[36,158796,158797,158799,158802,158804],{"class":38,"line":125},[36,158798,2281],{"class":53},[36,158800,158801],{"class":49}," is_vip ",[36,158803,115734],{"class":53},[36,158805,158806],{"class":49}," coupon:\n",[36,158808,158809,158811,158813,158816],{"class":38,"line":131},[36,158810,32041],{"class":60},[36,158812,901],{"class":49},[36,158814,158815],{"class":998},"\"可以享受优惠\"",[36,158817,75],{"class":49},[868,158819,158821],{"id":158820},"_363-not","3.6.3 not",[14,158823,158824],{},"取反。",[26,158826,158828],{"className":28,"code":158827,"language":30,"meta":31,"style":31},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[33,158829,158830,158839,158843,158852],{"__ignoreMap":31},[36,158831,158832,158835,158837],{"class":38,"line":39},[36,158833,158834],{"class":49},"is_closed ",[36,158836,54],{"class":53},[36,158838,126451],{"class":60},[36,158840,158841],{"class":38,"line":46},[36,158842,194],{"emptyLinePlaceholder":193},[36,158844,158845,158847,158849],{"class":38,"line":78},[36,158846,2281],{"class":53},[36,158848,39672],{"class":53},[36,158850,158851],{"class":49}," is_closed:\n",[36,158853,158854,158856,158858,158861],{"class":38,"line":125},[36,158855,32041],{"class":60},[36,158857,901],{"class":49},[36,158859,158860],{"class":998},"\"店铺营业中\"",[36,158862,75],{"class":49},[21,158864,158866],{"id":158865},"_37-链式比较","3.7 链式比较",[14,158868,158869],{},"Python 支持链式比较：",[26,158871,158873],{"className":28,"code":158872,"language":30,"meta":31,"style":31},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[33,158874,158875,158884,158888,158905],{"__ignoreMap":31},[36,158876,158877,158879,158881],{"class":38,"line":39},[36,158878,156002],{"class":49},[36,158880,54],{"class":53},[36,158882,158883],{"class":60}," 85\n",[36,158885,158886],{"class":38,"line":46},[36,158887,194],{"emptyLinePlaceholder":193},[36,158889,158890,158892,158894,158897,158899,158901,158903],{"class":38,"line":78},[36,158891,2281],{"class":53},[36,158893,4842],{"class":60},[36,158895,158896],{"class":53}," \u003C=",[36,158898,158427],{"class":49},[36,158900,2338],{"class":53},[36,158902,6501],{"class":60},[36,158904,4488],{"class":49},[36,158906,158907,158909,158911,158914],{"class":38,"line":125},[36,158908,32041],{"class":60},[36,158910,901],{"class":49},[36,158912,158913],{"class":998},"\"成绩合法\"",[36,158915,75],{"class":49},[14,158917,158918],{},"等价于：",[26,158920,158922],{"className":28,"code":158921,"language":30,"meta":31,"style":31},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[33,158923,158924,158944],{"__ignoreMap":31},[36,158925,158926,158928,158930,158932,158934,158936,158938,158940,158942],{"class":38,"line":39},[36,158927,2281],{"class":53},[36,158929,158427],{"class":49},[36,158931,2460],{"class":53},[36,158933,4842],{"class":60},[36,158935,121073],{"class":53},[36,158937,158427],{"class":49},[36,158939,2338],{"class":53},[36,158941,6501],{"class":60},[36,158943,4488],{"class":49},[36,158945,158946,158948,158950,158952],{"class":38,"line":46},[36,158947,32041],{"class":60},[36,158949,901],{"class":49},[36,158951,158913],{"class":998},[36,158953,75],{"class":49},[21,158955,158957],{"id":158956},"_38-真值和假值","3.8 真值和假值",[14,158959,117111,158960,158962],{},[33,158961,2281],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158964,158965],{},"假值：",[26,158967,158969],{"className":28,"code":158968,"language":30,"meta":31,"style":31},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[33,158970,158971,158975,158980,158984,158988,158993,158997,159001,159006],{"__ignoreMap":31},[36,158972,158973],{"class":38,"line":39},[36,158974,158161],{"class":60},[36,158976,158977],{"class":38,"line":46},[36,158978,158979],{"class":60},"None\n",[36,158981,158982],{"class":38,"line":78},[36,158983,3834],{"class":60},[36,158985,158986],{"class":38,"line":125},[36,158987,33084],{"class":60},[36,158989,158990],{"class":38,"line":131},[36,158991,158992],{"class":998},"\"\"\n",[36,158994,158995],{"class":38,"line":396},[36,158996,33099],{"class":49},[36,158998,158999],{"class":38,"line":407},[36,159000,2726],{"class":49},[36,159002,159003],{"class":38,"line":2061},[36,159004,159005],{"class":49},"{}\n",[36,159007,159008,159010],{"class":38,"line":2067},[36,159009,155934],{"class":60},[36,159011,2726],{"class":49},[14,159013,15879],{},[26,159015,159017],{"className":28,"code":159016,"language":30,"meta":31,"style":31},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[33,159018,159019,159033,159037,159044,159064,159070],{"__ignoreMap":31},[36,159020,159021,159023,159025,159027,159029,159031],{"class":38,"line":39},[36,159022,147180],{"class":49},[36,159024,54],{"class":53},[36,159026,61347],{"class":60},[36,159028,901],{"class":49},[36,159030,153023],{"class":998},[36,159032,75],{"class":49},[36,159034,159035],{"class":38,"line":46},[36,159036,194],{"emptyLinePlaceholder":193},[36,159038,159039,159041],{"class":38,"line":78},[36,159040,2281],{"class":53},[36,159042,159043],{"class":49}," name:\n",[36,159045,159046,159048,159050,159052,159054,159056,159058,159060,159062],{"class":38,"line":125},[36,159047,32041],{"class":60},[36,159049,901],{"class":49},[36,159051,949],{"class":53},[36,159053,157698],{"class":998},[36,159055,1775],{"class":60},[36,159057,80552],{"class":49},[36,159059,1825],{"class":60},[36,159061,1141],{"class":998},[36,159063,75],{"class":49},[36,159065,159066,159068],{"class":38,"line":131},[36,159067,2451],{"class":53},[36,159069,4488],{"class":49},[36,159071,159072,159074,159076,159079],{"class":38,"line":396},[36,159073,32041],{"class":60},[36,159075,901],{"class":49},[36,159077,159078],{"class":998},"\"姓名不能为空\"",[36,159080,75],{"class":49},[21,159082,159084],{"id":159083},"_39-match语句","3.9 match语句",[14,159086,159087,159088,159090],{},"Python 3.10 开始支持 ",[33,159089,72007],{},"。它适合处理固定选项。",[26,159092,159094],{"className":28,"code":159093,"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,159095,159096,159112,159116,159123,159133,159144,159153,159164,159173,159184,159191],{"__ignoreMap":31},[36,159097,159098,159101,159103,159105,159107,159110],{"class":38,"line":39},[36,159099,159100],{"class":49},"command ",[36,159102,54],{"class":53},[36,159104,61347],{"class":60},[36,159106,901],{"class":49},[36,159108,159109],{"class":998},"\"请输入命令:\"",[36,159111,75],{"class":49},[36,159113,159114],{"class":38,"line":46},[36,159115,194],{"emptyLinePlaceholder":193},[36,159117,159118,159120],{"class":38,"line":78},[36,159119,72007],{"class":53},[36,159121,159122],{"class":49}," command:\n",[36,159124,159125,159128,159131],{"class":38,"line":125},[36,159126,159127],{"class":53},"    case",[36,159129,159130],{"class":998}," \"start\"",[36,159132,4488],{"class":49},[36,159134,159135,159137,159139,159142],{"class":38,"line":131},[36,159136,33193],{"class":60},[36,159138,901],{"class":49},[36,159140,159141],{"class":998},"\"启动\"",[36,159143,75],{"class":49},[36,159145,159146,159148,159151],{"class":38,"line":396},[36,159147,159127],{"class":53},[36,159149,159150],{"class":998}," \"stop\"",[36,159152,4488],{"class":49},[36,159154,159155,159157,159159,159162],{"class":38,"line":407},[36,159156,33193],{"class":60},[36,159158,901],{"class":49},[36,159160,159161],{"class":998},"\"停止\"",[36,159163,75],{"class":49},[36,159165,159166,159168,159171],{"class":38,"line":2061},[36,159167,159127],{"class":53},[36,159169,159170],{"class":998}," \"restart\"",[36,159172,4488],{"class":49},[36,159174,159175,159177,159179,159182],{"class":38,"line":2067},[36,159176,33193],{"class":60},[36,159178,901],{"class":49},[36,159180,159181],{"class":998},"\"重启\"",[36,159183,75],{"class":49},[36,159185,159186,159188],{"class":38,"line":2079},[36,159187,159127],{"class":53},[36,159189,159190],{"class":49}," _:\n",[36,159192,159193,159195,159197,159200],{"class":38,"line":2362},[36,159194,33193],{"class":60},[36,159196,901],{"class":49},[36,159198,159199],{"class":998},"\"未知命令\"",[36,159201,75],{"class":49},[14,159203,159204,159205,159207,159208,159210],{},"入门阶段掌握 ",[33,159206,155302],{}," 更重要，",[33,159209,72007],{}," 可以作为补充。",[21,159212,159214],{"id":159213},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,159216,123936],{},[851,159218,159219,159222,159225],{},[854,159220,159221],{},"输入成绩。",[854,159223,159224],{},"判断成绩是否合法。",[854,159226,159227],{},"输出等级。",[14,159229,10782],{},[26,159231,159233],{"className":28,"code":159232,"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,159234,159235,159253,159257,159275,159286,159298,159309,159321,159332,159345,159356,159368,159379,159385],{"__ignoreMap":31},[36,159236,159237,159239,159241,159243,159245,159247,159249,159251],{"class":38,"line":39},[36,159238,156002],{"class":49},[36,159240,54],{"class":53},[36,159242,110441],{"class":60},[36,159244,901],{"class":49},[36,159246,54563],{"class":60},[36,159248,901],{"class":49},[36,159250,153053],{"class":998},[36,159252,31239],{"class":49},[36,159254,159255],{"class":38,"line":46},[36,159256,194],{"emptyLinePlaceholder":193},[36,159258,159259,159261,159263,159265,159267,159269,159271,159273],{"class":38,"line":78},[36,159260,2281],{"class":53},[36,159262,39672],{"class":53},[36,159264,4842],{"class":60},[36,159266,158896],{"class":53},[36,159268,158427],{"class":49},[36,159270,2338],{"class":53},[36,159272,6501],{"class":60},[36,159274,4488],{"class":49},[36,159276,159277,159279,159281,159284],{"class":38,"line":125},[36,159278,32041],{"class":60},[36,159280,901],{"class":49},[36,159282,159283],{"class":998},"\"成绩不合法\"",[36,159285,75],{"class":49},[36,159287,159288,159290,159292,159294,159296],{"class":38,"line":131},[36,159289,158450],{"class":53},[36,159291,158427],{"class":49},[36,159293,2460],{"class":53},[36,159295,158432],{"class":60},[36,159297,4488],{"class":49},[36,159299,159300,159302,159304,159307],{"class":38,"line":396},[36,159301,32041],{"class":60},[36,159303,901],{"class":49},[36,159305,159306],{"class":998},"\"等级:A\"",[36,159308,75],{"class":49},[36,159310,159311,159313,159315,159317,159319],{"class":38,"line":407},[36,159312,158450],{"class":53},[36,159314,158427],{"class":49},[36,159316,2460],{"class":53},[36,159318,158457],{"class":60},[36,159320,4488],{"class":49},[36,159322,159323,159325,159327,159330],{"class":38,"line":2061},[36,159324,32041],{"class":60},[36,159326,901],{"class":49},[36,159328,159329],{"class":998},"\"等级:B\"",[36,159331,75],{"class":49},[36,159333,159334,159336,159338,159340,159343],{"class":38,"line":2067},[36,159335,158450],{"class":53},[36,159337,158427],{"class":49},[36,159339,2460],{"class":53},[36,159341,159342],{"class":60}," 70",[36,159344,4488],{"class":49},[36,159346,159347,159349,159351,159354],{"class":38,"line":2079},[36,159348,32041],{"class":60},[36,159350,901],{"class":49},[36,159352,159353],{"class":998},"\"等级:C\"",[36,159355,75],{"class":49},[36,159357,159358,159360,159362,159364,159366],{"class":38,"line":2362},[36,159359,158450],{"class":53},[36,159361,158427],{"class":49},[36,159363,2460],{"class":53},[36,159365,158481],{"class":60},[36,159367,4488],{"class":49},[36,159369,159370,159372,159374,159377],{"class":38,"line":2367},[36,159371,32041],{"class":60},[36,159373,901],{"class":49},[36,159375,159376],{"class":998},"\"等级:D\"",[36,159378,75],{"class":49},[36,159380,159381,159383],{"class":38,"line":2373},[36,159382,2451],{"class":53},[36,159384,4488],{"class":49},[36,159386,159387,159389,159391,159394],{"class":38,"line":2378},[36,159388,32041],{"class":60},[36,159390,901],{"class":49},[36,159392,159393],{"class":998},"\"等级:E\"",[36,159395,75],{"class":49},[21,159397,159399],{"id":159398},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,159401,123936],{},[851,159403,159404,159407,159410,159413],{},[854,159405,159406],{},"输入消费金额。",[854,159408,159409],{},"输入会员等级，普通、银卡、金卡。",[854,159411,159412],{},"普通不打折，银卡 9 折，金卡 8 折。",[854,159414,159415],{},"满 500 再减 50。",[14,159417,10782],{},[26,159419,159421],{"className":28,"code":159420,"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,159422,159423,159443,159459,159463,159471,159475,159489,159499,159512,159521,159534,159542,159548,159559,159563,159577,159581,159595,159605,159609],{"__ignoreMap":31},[36,159424,159425,159428,159430,159432,159434,159436,159438,159441],{"class":38,"line":39},[36,159426,159427],{"class":49},"amount ",[36,159429,54],{"class":53},[36,159431,110441],{"class":60},[36,159433,901],{"class":49},[36,159435,54563],{"class":60},[36,159437,901],{"class":49},[36,159439,159440],{"class":998},"\"请输入消费金额:\"",[36,159442,31239],{"class":49},[36,159444,159445,159448,159450,159452,159454,159457],{"class":38,"line":46},[36,159446,159447],{"class":49},"level ",[36,159449,54],{"class":53},[36,159451,61347],{"class":60},[36,159453,901],{"class":49},[36,159455,159456],{"class":998},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[36,159458,75],{"class":49},[36,159460,159461],{"class":38,"line":78},[36,159462,194],{"emptyLinePlaceholder":193},[36,159464,159465,159467,159469],{"class":38,"line":125},[36,159466,157880],{"class":49},[36,159468,54],{"class":53},[36,159470,56441],{"class":60},[36,159472,159473],{"class":38,"line":131},[36,159474,194],{"emptyLinePlaceholder":193},[36,159476,159477,159479,159482,159484,159487],{"class":38,"line":396},[36,159478,2281],{"class":53},[36,159480,159481],{"class":49}," level ",[36,159483,3698],{"class":53},[36,159485,159486],{"class":998}," \"银卡\"",[36,159488,4488],{"class":49},[36,159490,159491,159494,159496],{"class":38,"line":407},[36,159492,159493],{"class":49},"    discount ",[36,159495,54],{"class":53},[36,159497,159498],{"class":60}," 0.9\n",[36,159500,159501,159503,159505,159507,159510],{"class":38,"line":2061},[36,159502,158450],{"class":53},[36,159504,159481],{"class":49},[36,159506,3698],{"class":53},[36,159508,159509],{"class":998}," \"金卡\"",[36,159511,4488],{"class":49},[36,159513,159514,159516,159518],{"class":38,"line":2067},[36,159515,159493],{"class":49},[36,159517,54],{"class":53},[36,159519,159520],{"class":60}," 0.8\n",[36,159522,159523,159525,159527,159529,159532],{"class":38,"line":2079},[36,159524,158450],{"class":53},[36,159526,159481],{"class":49},[36,159528,3698],{"class":53},[36,159530,159531],{"class":998}," \"普通\"",[36,159533,4488],{"class":49},[36,159535,159536,159538,159540],{"class":38,"line":2362},[36,159537,159493],{"class":49},[36,159539,54],{"class":53},[36,159541,56441],{"class":60},[36,159543,159544,159546],{"class":38,"line":2367},[36,159545,2451],{"class":53},[36,159547,4488],{"class":49},[36,159549,159550,159552,159554,159557],{"class":38,"line":2373},[36,159551,32041],{"class":60},[36,159553,901],{"class":49},[36,159555,159556],{"class":998},"\"会员等级输入错误，按普通会员计算\"",[36,159558,75],{"class":49},[36,159560,159561],{"class":38,"line":2378},[36,159562,194],{"emptyLinePlaceholder":193},[36,159564,159565,159568,159570,159573,159575],{"class":38,"line":2392},[36,159566,159567],{"class":49},"pay ",[36,159569,54],{"class":53},[36,159571,159572],{"class":49}," amount ",[36,159574,1339],{"class":53},[36,159576,157919],{"class":49},[36,159578,159579],{"class":38,"line":2397},[36,159580,194],{"emptyLinePlaceholder":193},[36,159582,159583,159585,159588,159590,159593],{"class":38,"line":2403},[36,159584,2281],{"class":53},[36,159586,159587],{"class":49}," pay ",[36,159589,2460],{"class":53},[36,159591,159592],{"class":60}," 500",[36,159594,4488],{"class":49},[36,159596,159597,159600,159602],{"class":38,"line":2424},[36,159598,159599],{"class":49},"    pay ",[36,159601,150896],{"class":53},[36,159603,159604],{"class":60}," 50\n",[36,159606,159607],{"class":38,"line":2429},[36,159608,194],{"emptyLinePlaceholder":193},[36,159610,159611,159613,159615,159617,159619,159621,159624,159626,159628,159630],{"class":38,"line":2443},[36,159612,199],{"class":60},[36,159614,901],{"class":49},[36,159616,949],{"class":53},[36,159618,158000],{"class":998},[36,159620,1775],{"class":60},[36,159622,159623],{"class":49},"pay",[36,159625,157803],{"class":53},[36,159627,1825],{"class":60},[36,159629,157656],{"class":998},[36,159631,75],{"class":49},[21,159633,159635],{"id":159634},"_312-易错点","3.12 易错点",[851,159637,159638,159641,159644,159647,159652],{},[854,159639,159640],{},"冒号不能漏。",[854,159642,159643],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[854,159645,159646],{},"多分支判断要注意顺序。",[854,159648,159649,159650,29130],{},"判断相等用 ",[33,159651,3698],{},[854,159653,159654],{},"字符串比较区分大小写：",[26,159656,159658],{"className":28,"code":159657,"language":30,"meta":31,"style":31},"\"Y\" == \"y\"  # False\n",[33,159659,159660],{"__ignoreMap":31},[36,159661,159662,159665,159667,159669],{"class":38,"line":39},[36,159663,159664],{"class":998},"\"Y\"",[36,159666,102203],{"class":53},[36,159668,158649],{"class":998},[36,159670,159671],{"class":42},"  # False\n",[14,159673,159674],{},"可转换后再判断：",[26,159676,159678],{"className":28,"code":159677,"language":30,"meta":31,"style":31},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[33,159679,159680,159697,159710],{"__ignoreMap":31},[36,159681,159682,159685,159687,159689,159691,159694],{"class":38,"line":39},[36,159683,159684],{"class":49},"answer ",[36,159686,54],{"class":53},[36,159688,61347],{"class":60},[36,159690,901],{"class":49},[36,159692,159693],{"class":998},"\"是否继续(y\u002Fn):\"",[36,159695,159696],{"class":49},").lower()\n",[36,159698,159699,159701,159704,159706,159708],{"class":38,"line":46},[36,159700,2281],{"class":53},[36,159702,159703],{"class":49}," answer ",[36,159705,3698],{"class":53},[36,159707,158649],{"class":998},[36,159709,4488],{"class":49},[36,159711,159712,159714,159716,159719],{"class":38,"line":78},[36,159713,32041],{"class":60},[36,159715,901],{"class":49},[36,159717,159718],{"class":998},"\"继续\"",[36,159720,75],{"class":49},[21,159722,159724],{"id":159723},"_313-本章练习","3.13 本章练习",[851,159726,159727,159730,159733,159736,159746],{},[854,159728,159729],{},"输入年龄，判断是否成年。",[854,159731,159732],{},"输入年份，判断是否为闰年。",[854,159734,159735],{},"输入三个数字，输出最大值。",[854,159737,159738,159739,159742,159743,159745],{},"写登录判断：用户名是 ",[33,159740,159741],{},"admin"," 且密码是 ",[33,159744,15828],{}," 才登录成功。",[854,159747,159748],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[807,159750,159751],{},"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":46,"depth":46,"links":159753},[159754,159755,159756,159757,159758,159759,159764,159765,159766,159767,159768,159769,159770],{"id":158142,"depth":46,"text":158143},{"id":158195,"depth":46,"text":158196},{"id":158299,"depth":46,"text":158300},{"id":158389,"depth":46,"text":158390},{"id":158579,"depth":46,"text":158580},{"id":158702,"depth":46,"text":158703,"children":159760},[159761,159762,159763],{"id":158706,"depth":78,"text":158707},{"id":158763,"depth":78,"text":158764},{"id":158820,"depth":78,"text":158821},{"id":158865,"depth":46,"text":158866},{"id":158956,"depth":46,"text":158957},{"id":159083,"depth":46,"text":159084},{"id":159213,"depth":46,"text":159214},{"id":159398,"depth":46,"text":159399},{"id":159634,"depth":46,"text":159635},{"id":159723,"depth":46,"text":159724},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158134,"description":823},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159777,"title":159778,"body":159779,"description":823,"extension":824,"meta":161548,"navigation":193,"path":161549,"seo":161550,"stem":161551,"__hash__":161552},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159780,"toc":161528},[159781,159784,159788,159794,159797,159814,159818,159820,159837,159839,159884,159886,159903,159907,159910,159976,159979,159997,160001,160162,160171,160175,160179,160184,160231,160233,160239,160243,160248,160295,160297,160303,160307,160312,160348,160351,160398,160402,160408,160466,160471,160502,160507,160511,160566,160569,160641,160644,160703,160707,160710,160785,160788,160792,160898,160901,160927,160931,160943,161012,161015,161107,161111,161113,161124,161126,161256,161260,161462,161470,161474,161504,161508,161525],[10,159782,159778],{"id":159783},"_4-循环语句",[21,159785,159787],{"id":159786},"_41-为什么需要循环","4.1 为什么需要循环",[14,159789,159790,159791,159793],{},"如果要输出 1 到 100，不应该写 100 行 ",[33,159792,147116],{},"，而应该用循环。",[14,159795,159796],{},"循环适合处理重复任务：",[851,159798,159799,159802,159805,159808,159811],{},[854,159800,159801],{},"重复输出。",[854,159803,159804],{},"重复输入。",[854,159806,159807],{},"遍历数据。",[854,159809,159810],{},"持续执行菜单。",[854,159812,159813],{},"批量处理文件或数据。",[21,159815,159817],{"id":159816},"_42-while循环","4.2 while循环",[14,159819,5929],{},[26,159821,159823],{"className":28,"code":159822,"language":30,"meta":31,"style":31},"while 条件:\n    循环体\n",[33,159824,159825,159832],{"__ignoreMap":31},[36,159826,159827,159829],{"class":38,"line":39},[36,159828,109307],{"class":53},[36,159830,159831],{"class":49}," 条件:\n",[36,159833,159834],{"class":38,"line":46},[36,159835,159836],{"class":49},"    循环体\n",[14,159838,15879],{},[26,159840,159842],{"className":28,"code":159841,"language":30,"meta":31,"style":31},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[33,159843,159844,159852,159856,159868,159875],{"__ignoreMap":31},[36,159845,159846,159848,159850],{"class":38,"line":39},[36,159847,100792],{"class":49},[36,159849,54],{"class":53},[36,159851,56441],{"class":60},[36,159853,159854],{"class":38,"line":46},[36,159855,194],{"emptyLinePlaceholder":193},[36,159857,159858,159860,159862,159864,159866],{"class":38,"line":78},[36,159859,109307],{"class":53},[36,159861,10185],{"class":49},[36,159863,2338],{"class":53},[36,159865,2898],{"class":60},[36,159867,4488],{"class":49},[36,159869,159870,159872],{"class":38,"line":125},[36,159871,32041],{"class":60},[36,159873,159874],{"class":49},"(i)\n",[36,159876,159877,159880,159882],{"class":38,"line":131},[36,159878,159879],{"class":49},"    i ",[36,159881,10224],{"class":53},[36,159883,56441],{"class":60},[14,159885,81671],{},[851,159887,159888,159894,159897,159900],{},[854,159889,159890,159891,29130],{},"判断条件 ",[33,159892,159893],{},"i \u003C= 5",[854,159895,159896],{},"条件成立，执行循环体。",[854,159898,159899],{},"执行完后回到条件判断。",[854,159901,159902],{},"条件不成立，退出循环。",[21,159904,159906],{"id":159905},"_43-while累加","4.3 while累加",[14,159908,159909],{},"计算 1 到 100 的和：",[26,159911,159913],{"className":28,"code":159912,"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,159914,159915,159923,159931,159935,159947,159957,159965,159969],{"__ignoreMap":31},[36,159916,159917,159919,159921],{"class":38,"line":39},[36,159918,100792],{"class":49},[36,159920,54],{"class":53},[36,159922,56441],{"class":60},[36,159924,159925,159927,159929],{"class":38,"line":46},[36,159926,157904],{"class":49},[36,159928,54],{"class":53},[36,159930,48075],{"class":60},[36,159932,159933],{"class":38,"line":78},[36,159934,194],{"emptyLinePlaceholder":193},[36,159936,159937,159939,159941,159943,159945],{"class":38,"line":125},[36,159938,109307],{"class":53},[36,159940,10185],{"class":49},[36,159942,2338],{"class":53},[36,159944,6501],{"class":60},[36,159946,4488],{"class":49},[36,159948,159949,159952,159954],{"class":38,"line":131},[36,159950,159951],{"class":49},"    total ",[36,159953,10224],{"class":53},[36,159955,159956],{"class":49}," i\n",[36,159958,159959,159961,159963],{"class":38,"line":396},[36,159960,159879],{"class":49},[36,159962,10224],{"class":53},[36,159964,56441],{"class":60},[36,159966,159967],{"class":38,"line":407},[36,159968,194],{"emptyLinePlaceholder":193},[36,159970,159971,159973],{"class":38,"line":2061},[36,159972,199],{"class":60},[36,159974,159975],{"class":49},"(total)\n",[14,159977,159978],{},"核心思想：",[851,159980,159981,159986,159991],{},[854,159982,159983,159985],{},[33,159984,1326],{}," 控制循环次数。",[854,159987,159988,159990],{},[33,159989,158005],{}," 保存累加结果。",[854,159992,159993,159994,159996],{},"每轮循环都要更新 ",[33,159995,1326],{},"，否则可能死循环。",[21,159998,160000],{"id":159999},"_44-while猜数字","4.4 while猜数字",[26,160002,160004],{"className":28,"code":160003,"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,160005,160006,160012,160016,160033,160041,160045,160053,160073,160082,160086,160098,160109,160119,160130,160136,160158],{"__ignoreMap":31},[36,160007,160008,160010],{"class":38,"line":39},[36,160009,31135],{"class":53},[36,160011,46070],{"class":49},[36,160013,160014],{"class":38,"line":46},[36,160015,194],{"emptyLinePlaceholder":193},[36,160017,160018,160020,160022,160025,160027,160029,160031],{"class":38,"line":78},[36,160019,159684],{"class":49},[36,160021,54],{"class":53},[36,160023,160024],{"class":49}," random.randint(",[36,160026,61],{"class":60},[36,160028,154],{"class":49},[36,160030,67],{"class":60},[36,160032,75],{"class":49},[36,160034,160035,160037,160039],{"class":38,"line":125},[36,160036,147335],{"class":49},[36,160038,54],{"class":53},[36,160040,48075],{"class":60},[36,160042,160043],{"class":38,"line":131},[36,160044,194],{"emptyLinePlaceholder":193},[36,160046,160047,160049,160051],{"class":38,"line":396},[36,160048,109307],{"class":53},[36,160050,95936],{"class":60},[36,160052,4488],{"class":49},[36,160054,160055,160058,160060,160062,160064,160066,160068,160071],{"class":38,"line":407},[36,160056,160057],{"class":49},"    guess ",[36,160059,54],{"class":53},[36,160061,3132],{"class":60},[36,160063,901],{"class":49},[36,160065,54563],{"class":60},[36,160067,901],{"class":49},[36,160069,160070],{"class":998},"\"请输入1到100之间的数字:\"",[36,160072,31239],{"class":49},[36,160074,160075,160078,160080],{"class":38,"line":2061},[36,160076,160077],{"class":49},"    count ",[36,160079,10224],{"class":53},[36,160081,56441],{"class":60},[36,160083,160084],{"class":38,"line":2067},[36,160085,194],{"emptyLinePlaceholder":193},[36,160087,160088,160090,160093,160095],{"class":38,"line":2079},[36,160089,3850],{"class":53},[36,160091,160092],{"class":49}," guess ",[36,160094,1839],{"class":53},[36,160096,160097],{"class":49}," answer:\n",[36,160099,160100,160102,160104,160107],{"class":38,"line":2362},[36,160101,33193],{"class":60},[36,160103,901],{"class":49},[36,160105,160106],{"class":998},"\"猜大了\"",[36,160108,75],{"class":49},[36,160110,160111,160113,160115,160117],{"class":38,"line":2367},[36,160112,40035],{"class":53},[36,160114,160092],{"class":49},[36,160116,1789],{"class":53},[36,160118,160097],{"class":49},[36,160120,160121,160123,160125,160128],{"class":38,"line":2373},[36,160122,33193],{"class":60},[36,160124,901],{"class":49},[36,160126,160127],{"class":998},"\"猜小了\"",[36,160129,75],{"class":49},[36,160131,160132,160134],{"class":38,"line":2378},[36,160133,158666],{"class":53},[36,160135,4488],{"class":49},[36,160137,160138,160140,160142,160144,160147,160149,160151,160153,160156],{"class":38,"line":2392},[36,160139,33193],{"class":60},[36,160141,901],{"class":49},[36,160143,949],{"class":53},[36,160145,160146],{"class":998},"\"猜对了，一共猜了",[36,160148,1775],{"class":60},[36,160150,85176],{"class":49},[36,160152,1825],{"class":60},[36,160154,160155],{"class":998},"次\"",[36,160157,75],{"class":49},[36,160159,160160],{"class":38,"line":2397},[36,160161,32369],{"class":53},[14,160163,160164,160167,160168,160170],{},[33,160165,160166],{},"while True"," 表示无限循环，通常配合 ",[33,160169,2803],{}," 使用。",[21,160172,160174],{"id":160173},"_45-break和continue","4.5 break和continue",[868,160176,160178],{"id":160177},"_451-break","4.5.1 break",[14,160180,160181,160183],{},[33,160182,2803],{}," 直接结束整个循环。",[26,160185,160187],{"className":28,"code":160186,"language":30,"meta":31,"style":31},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[33,160188,160189,160209,160221,160225],{"__ignoreMap":31},[36,160190,160191,160193,160195,160197,160199,160201,160203,160205,160207],{"class":38,"line":39},[36,160192,3774],{"class":53},[36,160194,10185],{"class":49},[36,160196,26788],{"class":53},[36,160198,33185],{"class":60},[36,160200,901],{"class":49},[36,160202,61],{"class":60},[36,160204,154],{"class":49},[36,160206,1230],{"class":60},[36,160208,31528],{"class":49},[36,160210,160211,160213,160215,160217,160219],{"class":38,"line":46},[36,160212,3850],{"class":53},[36,160214,10185],{"class":49},[36,160216,3698],{"class":53},[36,160218,78812],{"class":60},[36,160220,4488],{"class":49},[36,160222,160223],{"class":38,"line":78},[36,160224,32369],{"class":53},[36,160226,160227,160229],{"class":38,"line":125},[36,160228,32041],{"class":60},[36,160230,159874],{"class":49},[14,160232,147101],{},[26,160234,160237],{"className":160235,"code":160236,"language":5935,"meta":31},[5933],"1\n2\n",[33,160238,160236],{"__ignoreMap":31},[868,160240,160242],{"id":160241},"_452-continue","4.5.2 continue",[14,160244,160245,160247],{},[33,160246,155316],{}," 跳过本轮剩余代码，进入下一轮循环。",[26,160249,160251],{"className":28,"code":160250,"language":30,"meta":31,"style":31},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[33,160252,160253,160273,160285,160289],{"__ignoreMap":31},[36,160254,160255,160257,160259,160261,160263,160265,160267,160269,160271],{"class":38,"line":39},[36,160256,3774],{"class":53},[36,160258,10185],{"class":49},[36,160260,26788],{"class":53},[36,160262,33185],{"class":60},[36,160264,901],{"class":49},[36,160266,61],{"class":60},[36,160268,154],{"class":49},[36,160270,1230],{"class":60},[36,160272,31528],{"class":49},[36,160274,160275,160277,160279,160281,160283],{"class":38,"line":46},[36,160276,3850],{"class":53},[36,160278,10185],{"class":49},[36,160280,3698],{"class":53},[36,160282,78812],{"class":60},[36,160284,4488],{"class":49},[36,160286,160287],{"class":38,"line":78},[36,160288,149156],{"class":53},[36,160290,160291,160293],{"class":38,"line":125},[36,160292,32041],{"class":60},[36,160294,159874],{"class":49},[14,160296,147101],{},[26,160298,160301],{"className":160299,"code":160300,"language":5935,"meta":31},[5933],"1\n2\n4\n5\n",[33,160302,160300],{"__ignoreMap":31},[21,160304,160306],{"id":160305},"_46-for循环","4.6 for循环",[14,160308,160309,160311],{},[33,160310,3774],{}," 常用于遍历序列。",[26,160313,160315],{"className":28,"code":160314,"language":30,"meta":31,"style":31},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[33,160316,160317,160326,160330,160341],{"__ignoreMap":31},[36,160318,160319,160321,160323],{"class":38,"line":39},[36,160320,147180],{"class":49},[36,160322,54],{"class":53},[36,160324,160325],{"class":998}," \"python\"\n",[36,160327,160328],{"class":38,"line":46},[36,160329,194],{"emptyLinePlaceholder":193},[36,160331,160332,160334,160337,160339],{"class":38,"line":78},[36,160333,3774],{"class":53},[36,160335,160336],{"class":49}," ch ",[36,160338,26788],{"class":53},[36,160340,159043],{"class":49},[36,160342,160343,160345],{"class":38,"line":125},[36,160344,32041],{"class":60},[36,160346,160347],{"class":49},"(ch)\n",[14,160349,160350],{},"遍历列表：",[26,160352,160354],{"className":28,"code":160353,"language":30,"meta":31,"style":31},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[33,160355,160356,160378,160382,160392],{"__ignoreMap":31},[36,160357,160358,160361,160363,160365,160367,160369,160371,160373,160376],{"class":38,"line":39},[36,160359,160360],{"class":49},"students ",[36,160362,54],{"class":53},[36,160364,52968],{"class":49},[36,160366,150532],{"class":998},[36,160368,154],{"class":49},[36,160370,151580],{"class":998},[36,160372,154],{"class":49},[36,160374,160375],{"class":998},"\"小刚\"",[36,160377,33988],{"class":49},[36,160379,160380],{"class":38,"line":46},[36,160381,194],{"emptyLinePlaceholder":193},[36,160383,160384,160386,160388,160390],{"class":38,"line":78},[36,160385,3774],{"class":53},[36,160387,152781],{"class":49},[36,160389,26788],{"class":53},[36,160391,152786],{"class":49},[36,160393,160394,160396],{"class":38,"line":125},[36,160395,32041],{"class":60},[36,160397,150686],{"class":49},[21,160399,160401],{"id":160400},"_47-range函数","4.7 range函数",[14,160403,160404,160407],{},[33,160405,160406],{},"range()"," 用于生成整数序列。",[26,160409,160411],{"className":28,"code":160410,"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,160412,160413,160427,160445],{"__ignoreMap":31},[36,160414,160415,160417,160419,160421,160424],{"class":38,"line":39},[36,160416,34158],{"class":60},[36,160418,901],{"class":49},[36,160420,157],{"class":60},[36,160422,160423],{"class":49},")          ",[36,160425,160426],{"class":42},"# 0,1,2,3,4\n",[36,160428,160429,160431,160433,160435,160437,160439,160442],{"class":38,"line":46},[36,160430,34158],{"class":60},[36,160432,901],{"class":49},[36,160434,61],{"class":60},[36,160436,154],{"class":49},[36,160438,157],{"class":60},[36,160440,160441],{"class":49},")       ",[36,160443,160444],{"class":42},"# 1,2,3,4\n",[36,160446,160447,160449,160451,160453,160455,160457,160459,160461,160463],{"class":38,"line":78},[36,160448,34158],{"class":60},[36,160450,901],{"class":49},[36,160452,61],{"class":60},[36,160454,154],{"class":49},[36,160456,332],{"class":60},[36,160458,154],{"class":49},[36,160460,181],{"class":60},[36,160462,156305],{"class":49},[36,160464,160465],{"class":42},"# 1,3,5,7,9\n",[14,160467,160468,160469,25363],{},"配合 ",[33,160470,3774],{},[26,160472,160474],{"className":28,"code":160473,"language":30,"meta":31,"style":31},"for i in range(1, 6):\n    print(i)\n",[33,160475,160476,160496],{"__ignoreMap":31},[36,160477,160478,160480,160482,160484,160486,160488,160490,160492,160494],{"class":38,"line":39},[36,160479,3774],{"class":53},[36,160481,10185],{"class":49},[36,160483,26788],{"class":53},[36,160485,33185],{"class":60},[36,160487,901],{"class":49},[36,160489,61],{"class":60},[36,160491,154],{"class":49},[36,160493,1230],{"class":60},[36,160495,31528],{"class":49},[36,160497,160498,160500],{"class":38,"line":46},[36,160499,32041],{"class":60},[36,160501,159874],{"class":49},[14,160503,9772,160504,160506],{},[33,160505,34158],{}," 的结束值不包含在内。",[21,160508,160510],{"id":160509},"_48-for循环求和","4.8 for循环求和",[26,160512,160514],{"className":28,"code":160513,"language":30,"meta":31,"style":31},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[33,160515,160516,160524,160528,160548,160556,160560],{"__ignoreMap":31},[36,160517,160518,160520,160522],{"class":38,"line":39},[36,160519,157904],{"class":49},[36,160521,54],{"class":53},[36,160523,48075],{"class":60},[36,160525,160526],{"class":38,"line":46},[36,160527,194],{"emptyLinePlaceholder":193},[36,160529,160530,160532,160534,160536,160538,160540,160542,160544,160546],{"class":38,"line":78},[36,160531,3774],{"class":53},[36,160533,10185],{"class":49},[36,160535,26788],{"class":53},[36,160537,33185],{"class":60},[36,160539,901],{"class":49},[36,160541,61],{"class":60},[36,160543,154],{"class":49},[36,160545,1223],{"class":60},[36,160547,31528],{"class":49},[36,160549,160550,160552,160554],{"class":38,"line":125},[36,160551,159951],{"class":49},[36,160553,10224],{"class":53},[36,160555,159956],{"class":49},[36,160557,160558],{"class":38,"line":131},[36,160559,194],{"emptyLinePlaceholder":193},[36,160561,160562,160564],{"class":38,"line":396},[36,160563,199],{"class":60},[36,160565,159975],{"class":49},[14,160567,160568],{},"求偶数和：",[26,160570,160572],{"className":28,"code":160571,"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,160573,160574,160582,160586,160606,160622,160631,160635],{"__ignoreMap":31},[36,160575,160576,160578,160580],{"class":38,"line":39},[36,160577,157904],{"class":49},[36,160579,54],{"class":53},[36,160581,48075],{"class":60},[36,160583,160584],{"class":38,"line":46},[36,160585,194],{"emptyLinePlaceholder":193},[36,160587,160588,160590,160592,160594,160596,160598,160600,160602,160604],{"class":38,"line":78},[36,160589,3774],{"class":53},[36,160591,10185],{"class":49},[36,160593,26788],{"class":53},[36,160595,33185],{"class":60},[36,160597,901],{"class":49},[36,160599,61],{"class":60},[36,160601,154],{"class":49},[36,160603,1223],{"class":60},[36,160605,31528],{"class":49},[36,160607,160608,160610,160612,160614,160616,160618,160620],{"class":38,"line":125},[36,160609,3850],{"class":53},[36,160611,10185],{"class":49},[36,160613,1214],{"class":53},[36,160615,15499],{"class":60},[36,160617,102203],{"class":53},[36,160619,4842],{"class":60},[36,160621,4488],{"class":49},[36,160623,160624,160627,160629],{"class":38,"line":131},[36,160625,160626],{"class":49},"        total ",[36,160628,10224],{"class":53},[36,160630,159956],{"class":49},[36,160632,160633],{"class":38,"line":396},[36,160634,194],{"emptyLinePlaceholder":193},[36,160636,160637,160639],{"class":38,"line":407},[36,160638,199],{"class":60},[36,160640,159975],{"class":49},[14,160642,160643],{},"也可以：",[26,160645,160647],{"className":28,"code":160646,"language":30,"meta":31,"style":31},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[33,160648,160649,160657,160661,160685,160693,160697],{"__ignoreMap":31},[36,160650,160651,160653,160655],{"class":38,"line":39},[36,160652,157904],{"class":49},[36,160654,54],{"class":53},[36,160656,48075],{"class":60},[36,160658,160659],{"class":38,"line":46},[36,160660,194],{"emptyLinePlaceholder":193},[36,160662,160663,160665,160667,160669,160671,160673,160675,160677,160679,160681,160683],{"class":38,"line":78},[36,160664,3774],{"class":53},[36,160666,10185],{"class":49},[36,160668,26788],{"class":53},[36,160670,33185],{"class":60},[36,160672,901],{"class":49},[36,160674,181],{"class":60},[36,160676,154],{"class":49},[36,160678,1223],{"class":60},[36,160680,154],{"class":49},[36,160682,181],{"class":60},[36,160684,31528],{"class":49},[36,160686,160687,160689,160691],{"class":38,"line":125},[36,160688,159951],{"class":49},[36,160690,10224],{"class":53},[36,160692,159956],{"class":49},[36,160694,160695],{"class":38,"line":131},[36,160696,194],{"emptyLinePlaceholder":193},[36,160698,160699,160701],{"class":38,"line":396},[36,160700,199],{"class":60},[36,160702,159975],{"class":49},[21,160704,160706],{"id":160705},"_49-循环嵌套","4.9 循环嵌套",[14,160708,160709],{},"嵌套循环就是循环里面再写循环。",[26,160711,160713],{"className":28,"code":160712,"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,160714,160715,160735,160755],{"__ignoreMap":31},[36,160716,160717,160719,160721,160723,160725,160727,160729,160731,160733],{"class":38,"line":39},[36,160718,3774],{"class":53},[36,160720,10185],{"class":49},[36,160722,26788],{"class":53},[36,160724,33185],{"class":60},[36,160726,901],{"class":49},[36,160728,61],{"class":60},[36,160730,154],{"class":49},[36,160732,186],{"class":60},[36,160734,31528],{"class":49},[36,160736,160737,160739,160741,160743,160745,160747,160749,160751,160753],{"class":38,"line":46},[36,160738,3950],{"class":53},[36,160740,10247],{"class":49},[36,160742,26788],{"class":53},[36,160744,33185],{"class":60},[36,160746,901],{"class":49},[36,160748,61],{"class":60},[36,160750,154],{"class":49},[36,160752,186],{"class":60},[36,160754,31528],{"class":49},[36,160756,160757,160759,160761,160763,160766,160768,160770,160772,160775,160777,160779,160781,160783],{"class":38,"line":78},[36,160758,33193],{"class":60},[36,160760,901],{"class":49},[36,160762,949],{"class":53},[36,160764,160765],{"class":998},"\"i=",[36,160767,1775],{"class":60},[36,160769,1326],{"class":49},[36,160771,1825],{"class":60},[36,160773,160774],{"class":998},", j=",[36,160776,1775],{"class":60},[36,160778,1351],{"class":49},[36,160780,1825],{"class":60},[36,160782,1141],{"class":998},[36,160784,75],{"class":49},[14,160786,160787],{},"外层循环执行一次，内层循环执行完整一轮。",[21,160789,160791],{"id":160790},"_410-九九乘法表","4.10 九九乘法表",[26,160793,160795],{"className":28,"code":160794,"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,160796,160797,160817,160840,160892],{"__ignoreMap":31},[36,160798,160799,160801,160803,160805,160807,160809,160811,160813,160815],{"class":38,"line":39},[36,160800,3774],{"class":53},[36,160802,10185],{"class":49},[36,160804,26788],{"class":53},[36,160806,33185],{"class":60},[36,160808,901],{"class":49},[36,160810,61],{"class":60},[36,160812,154],{"class":49},[36,160814,332],{"class":60},[36,160816,31528],{"class":49},[36,160818,160819,160821,160823,160825,160827,160829,160831,160834,160836,160838],{"class":38,"line":46},[36,160820,3950],{"class":53},[36,160822,10247],{"class":49},[36,160824,26788],{"class":53},[36,160826,33185],{"class":60},[36,160828,901],{"class":49},[36,160830,61],{"class":60},[36,160832,160833],{"class":49},", i ",[36,160835,1365],{"class":53},[36,160837,25863],{"class":60},[36,160839,31528],{"class":49},[36,160841,160842,160844,160846,160848,160850,160852,160854,160856,160858,160860,160862,160864,160866,160868,160870,160872,160874,160876,160878,160880,160882,160884,160886,160888,160890],{"class":38,"line":78},[36,160843,33193],{"class":60},[36,160845,901],{"class":49},[36,160847,949],{"class":53},[36,160849,1141],{"class":998},[36,160851,1775],{"class":60},[36,160853,1351],{"class":49},[36,160855,1825],{"class":60},[36,160857,1339],{"class":998},[36,160859,1775],{"class":60},[36,160861,1326],{"class":49},[36,160863,1825],{"class":60},[36,160865,54],{"class":998},[36,160867,1775],{"class":60},[36,160869,100792],{"class":49},[36,160871,1339],{"class":53},[36,160873,4159],{"class":49},[36,160875,1825],{"class":60},[36,160877,1141],{"class":998},[36,160879,154],{"class":49},[36,160881,46543],{"class":416},[36,160883,54],{"class":53},[36,160885,1141],{"class":998},[36,160887,1980],{"class":60},[36,160889,1141],{"class":998},[36,160891,75],{"class":49},[36,160893,160894,160896],{"class":38,"line":125},[36,160895,32041],{"class":60},[36,160897,2726],{"class":49},[14,160899,160900],{},"关键点：",[851,160902,160903,160909,160915,160921],{},[854,160904,160905,160906,160908],{},"外层 ",[33,160907,1326],{}," 控制行。",[854,160910,160911,160912,160914],{},"内层 ",[33,160913,1351],{}," 控制列。",[854,160916,160917,160918,160920],{},"每行结束后用 ",[33,160919,147116],{}," 换行。",[854,160922,160923,160926],{},[33,160924,160925],{},"end=\"\\t\""," 让同一行的内容横向排列。",[21,160928,160930],{"id":160929},"_411-循环else","4.11 循环else",[14,160932,160933,160934,160936,160937,160939,160940,160942],{},"Python 的循环可以带 ",[33,160935,2451],{},"。当循环正常结束时执行 ",[33,160938,2451],{},"，如果被 ",[33,160941,2803],{}," 打断，则不执行。",[26,160944,160946],{"className":28,"code":160945,"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,160947,160948,160968,160980,160991,160995,161001],{"__ignoreMap":31},[36,160949,160950,160952,160954,160956,160958,160960,160962,160964,160966],{"class":38,"line":39},[36,160951,3774],{"class":53},[36,160953,10185],{"class":49},[36,160955,26788],{"class":53},[36,160957,33185],{"class":60},[36,160959,901],{"class":49},[36,160961,61],{"class":60},[36,160963,154],{"class":49},[36,160965,1230],{"class":60},[36,160967,31528],{"class":49},[36,160969,160970,160972,160974,160976,160978],{"class":38,"line":46},[36,160971,3850],{"class":53},[36,160973,10185],{"class":49},[36,160975,3698],{"class":53},[36,160977,2788],{"class":60},[36,160979,4488],{"class":49},[36,160981,160982,160984,160986,160989],{"class":38,"line":78},[36,160983,33193],{"class":60},[36,160985,901],{"class":49},[36,160987,160988],{"class":998},"\"找到了\"",[36,160990,75],{"class":49},[36,160992,160993],{"class":38,"line":125},[36,160994,32369],{"class":53},[36,160996,160997,160999],{"class":38,"line":131},[36,160998,2451],{"class":53},[36,161000,4488],{"class":49},[36,161002,161003,161005,161007,161010],{"class":38,"line":396},[36,161004,32041],{"class":60},[36,161006,901],{"class":49},[36,161008,161009],{"class":998},"\"没找到\"",[36,161011,75],{"class":49},[14,161013,161014],{},"常用于搜索。",[26,161016,161018],{"className":28,"code":161017,"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,161019,161020,161041,161050,161054,161066,161077,161087,161091,161097],{"__ignoreMap":31},[36,161021,161022,161025,161027,161029,161031,161033,161035,161037,161039],{"class":38,"line":39},[36,161023,161024],{"class":49},"names ",[36,161026,54],{"class":53},[36,161028,52968],{"class":49},[36,161030,150532],{"class":998},[36,161032,154],{"class":49},[36,161034,151580],{"class":998},[36,161036,154],{"class":49},[36,161038,160375],{"class":998},[36,161040,33988],{"class":49},[36,161042,161043,161045,161047],{"class":38,"line":46},[36,161044,112222],{"class":49},[36,161046,54],{"class":53},[36,161048,161049],{"class":998}," \"小李\"\n",[36,161051,161052],{"class":38,"line":78},[36,161053,194],{"emptyLinePlaceholder":193},[36,161055,161056,161058,161061,161063],{"class":38,"line":125},[36,161057,3774],{"class":53},[36,161059,161060],{"class":49}," name ",[36,161062,26788],{"class":53},[36,161064,161065],{"class":49}," names:\n",[36,161067,161068,161070,161072,161074],{"class":38,"line":131},[36,161069,3850],{"class":53},[36,161071,161060],{"class":49},[36,161073,3698],{"class":53},[36,161075,161076],{"class":49}," target:\n",[36,161078,161079,161081,161083,161085],{"class":38,"line":396},[36,161080,33193],{"class":60},[36,161082,901],{"class":49},[36,161084,160988],{"class":998},[36,161086,75],{"class":49},[36,161088,161089],{"class":38,"line":407},[36,161090,32369],{"class":53},[36,161092,161093,161095],{"class":38,"line":2061},[36,161094,2451],{"class":53},[36,161096,4488],{"class":49},[36,161098,161099,161101,161103,161105],{"class":38,"line":2067},[36,161100,32041],{"class":60},[36,161102,901],{"class":49},[36,161104,161009],{"class":998},[36,161106,75],{"class":49},[21,161108,161110],{"id":161109},"_412-小案例登录重试","4.12 小案例：登录重试",[14,161112,123936],{},[851,161114,161115,161118,161121],{},[854,161116,161117],{},"用户最多输入 3 次密码。",[854,161119,161120],{},"密码正确则登录成功。",[854,161122,161123],{},"3 次都错误则锁定账号。",[14,161125,10782],{},[26,161127,161129],{"className":28,"code":161128,"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,161130,161131,161141,161145,161161,161177,161181,161193,161204,161208,161214,161239,161245],{"__ignoreMap":31},[36,161132,161133,161136,161138],{"class":38,"line":39},[36,161134,161135],{"class":49},"password ",[36,161137,54],{"class":53},[36,161139,161140],{"class":998}," \"123456\"\n",[36,161142,161143],{"class":38,"line":46},[36,161144,194],{"emptyLinePlaceholder":193},[36,161146,161147,161149,161151,161153,161155,161157,161159],{"class":38,"line":78},[36,161148,3774],{"class":53},[36,161150,10185],{"class":49},[36,161152,26788],{"class":53},[36,161154,33185],{"class":60},[36,161156,901],{"class":49},[36,161158,162],{"class":60},[36,161160,31528],{"class":49},[36,161162,161163,161166,161168,161170,161172,161175],{"class":38,"line":125},[36,161164,161165],{"class":49},"    user_password ",[36,161167,54],{"class":53},[36,161169,61347],{"class":60},[36,161171,901],{"class":49},[36,161173,161174],{"class":998},"\"请输入密码:\"",[36,161176,75],{"class":49},[36,161178,161179],{"class":38,"line":131},[36,161180,194],{"emptyLinePlaceholder":193},[36,161182,161183,161185,161188,161190],{"class":38,"line":396},[36,161184,3850],{"class":53},[36,161186,161187],{"class":49}," user_password ",[36,161189,3698],{"class":53},[36,161191,161192],{"class":49}," password:\n",[36,161194,161195,161197,161199,161202],{"class":38,"line":407},[36,161196,33193],{"class":60},[36,161198,901],{"class":49},[36,161200,161201],{"class":998},"\"登录成功\"",[36,161203,75],{"class":49},[36,161205,161206],{"class":38,"line":2061},[36,161207,32369],{"class":53},[36,161209,161210,161212],{"class":38,"line":2067},[36,161211,158666],{"class":53},[36,161213,4488],{"class":49},[36,161215,161216,161218,161220,161222,161225,161228,161230,161232,161234,161237],{"class":38,"line":2079},[36,161217,33193],{"class":60},[36,161219,901],{"class":49},[36,161221,949],{"class":53},[36,161223,161224],{"class":998},"\"密码错误，还剩",[36,161226,161227],{"class":60},"{2",[36,161229,53013],{"class":53},[36,161231,3781],{"class":49},[36,161233,1825],{"class":60},[36,161235,161236],{"class":998},"次机会\"",[36,161238,75],{"class":49},[36,161240,161241,161243],{"class":38,"line":2362},[36,161242,2451],{"class":53},[36,161244,4488],{"class":49},[36,161246,161247,161249,161251,161254],{"class":38,"line":2367},[36,161248,32041],{"class":60},[36,161250,901],{"class":49},[36,161252,161253],{"class":998},"\"账号已锁定\"",[36,161255,75],{"class":49},[21,161257,161259],{"id":161258},"_413-小案例菜单程序","4.13 小案例：菜单程序",[26,161261,161263],{"className":28,"code":161262,"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,161264,161265,161273,161284,161295,161306,161317,161328,161332,161347,161351,161363,161374,161386,161397,161409,161420,161432,161442,161446,161452],{"__ignoreMap":31},[36,161266,161267,161269,161271],{"class":38,"line":39},[36,161268,109307],{"class":53},[36,161270,95936],{"class":60},[36,161272,4488],{"class":49},[36,161274,161275,161277,161279,161282],{"class":38,"line":46},[36,161276,32041],{"class":60},[36,161278,901],{"class":49},[36,161280,161281],{"class":998},"\"====== 菜单 ======\"",[36,161283,75],{"class":49},[36,161285,161286,161288,161290,161293],{"class":38,"line":78},[36,161287,32041],{"class":60},[36,161289,901],{"class":49},[36,161291,161292],{"class":998},"\"1. 查询余额\"",[36,161294,75],{"class":49},[36,161296,161297,161299,161301,161304],{"class":38,"line":125},[36,161298,32041],{"class":60},[36,161300,901],{"class":49},[36,161302,161303],{"class":998},"\"2. 存款\"",[36,161305,75],{"class":49},[36,161307,161308,161310,161312,161315],{"class":38,"line":131},[36,161309,32041],{"class":60},[36,161311,901],{"class":49},[36,161313,161314],{"class":998},"\"3. 取款\"",[36,161316,75],{"class":49},[36,161318,161319,161321,161323,161326],{"class":38,"line":396},[36,161320,32041],{"class":60},[36,161322,901],{"class":49},[36,161324,161325],{"class":998},"\"0. 退出\"",[36,161327,75],{"class":49},[36,161329,161330],{"class":38,"line":407},[36,161331,194],{"emptyLinePlaceholder":193},[36,161333,161334,161337,161339,161341,161343,161345],{"class":38,"line":2061},[36,161335,161336],{"class":49},"    choice ",[36,161338,54],{"class":53},[36,161340,61347],{"class":60},[36,161342,901],{"class":49},[36,161344,153717],{"class":998},[36,161346,75],{"class":49},[36,161348,161349],{"class":38,"line":2067},[36,161350,194],{"emptyLinePlaceholder":193},[36,161352,161353,161355,161357,161359,161361],{"class":38,"line":2079},[36,161354,3850],{"class":53},[36,161356,153730],{"class":49},[36,161358,3698],{"class":53},[36,161360,153735],{"class":998},[36,161362,4488],{"class":49},[36,161364,161365,161367,161369,161372],{"class":38,"line":2362},[36,161366,33193],{"class":60},[36,161368,901],{"class":49},[36,161370,161371],{"class":998},"\"余额为1000元\"",[36,161373,75],{"class":49},[36,161375,161376,161378,161380,161382,161384],{"class":38,"line":2367},[36,161377,40035],{"class":53},[36,161379,153730],{"class":49},[36,161381,3698],{"class":53},[36,161383,153754],{"class":998},[36,161385,4488],{"class":49},[36,161387,161388,161390,161392,161395],{"class":38,"line":2373},[36,161389,33193],{"class":60},[36,161391,901],{"class":49},[36,161393,161394],{"class":998},"\"存款功能\"",[36,161396,75],{"class":49},[36,161398,161399,161401,161403,161405,161407],{"class":38,"line":2378},[36,161400,40035],{"class":53},[36,161402,153730],{"class":49},[36,161404,3698],{"class":53},[36,161406,153772],{"class":998},[36,161408,4488],{"class":49},[36,161410,161411,161413,161415,161418],{"class":38,"line":2392},[36,161412,33193],{"class":60},[36,161414,901],{"class":49},[36,161416,161417],{"class":998},"\"取款功能\"",[36,161419,75],{"class":49},[36,161421,161422,161424,161426,161428,161430],{"class":38,"line":2397},[36,161423,40035],{"class":53},[36,161425,153730],{"class":49},[36,161427,3698],{"class":53},[36,161429,153826],{"class":998},[36,161431,4488],{"class":49},[36,161433,161434,161436,161438,161440],{"class":38,"line":2403},[36,161435,33193],{"class":60},[36,161437,901],{"class":49},[36,161439,153837],{"class":998},[36,161441,75],{"class":49},[36,161443,161444],{"class":38,"line":2424},[36,161445,32369],{"class":53},[36,161447,161448,161450],{"class":38,"line":2429},[36,161449,158666],{"class":53},[36,161451,4488],{"class":49},[36,161453,161454,161456,161458,161460],{"class":38,"line":2443},[36,161455,33193],{"class":60},[36,161457,901],{"class":49},[36,161459,153858],{"class":998},[36,161461,75],{"class":49},[14,161463,161464,161465,161467,161468,29130],{},"菜单类程序通常使用 ",[33,161466,160166],{},"，用户选择退出时 ",[33,161469,2803],{},[21,161471,161473],{"id":161472},"_414-易错点","4.14 易错点",[851,161475,161476,161481,161487,161495,161501],{},[854,161477,161478,161480],{},[33,161479,109307],{}," 循环必须更新控制变量。",[854,161482,161483,161486],{},[33,161484,161485],{},"range(1, 10)"," 不包含 10。",[854,161488,161489,161491,161492,161494],{},[33,161490,2803],{}," 结束整个循环，",[33,161493,155316],{}," 只跳过本轮。",[854,161496,161497,161498,161500],{},"嵌套循环中，",[33,161499,2803],{}," 只跳出当前所在的一层循环。",[854,161502,161503],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[21,161505,161507],{"id":161506},"_415-本章练习","4.15 本章练习",[851,161509,161510,161513,161516,161519,161522],{},[854,161511,161512],{},"输出 1 到 100。",[854,161514,161515],{},"计算 1 到 100 的偶数和。",[854,161517,161518],{},"输出 100 以内能被 3 和 5 同时整除的数。",[854,161520,161521],{},"编写猜数字游戏，限制最多猜 7 次。",[854,161523,161524],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[807,161526,161527],{},"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":46,"depth":46,"links":161529},[161530,161531,161532,161533,161534,161538,161539,161540,161541,161542,161543,161544,161545,161546,161547],{"id":159786,"depth":46,"text":159787},{"id":159816,"depth":46,"text":159817},{"id":159905,"depth":46,"text":159906},{"id":159999,"depth":46,"text":160000},{"id":160173,"depth":46,"text":160174,"children":161535},[161536,161537],{"id":160177,"depth":78,"text":160178},{"id":160241,"depth":78,"text":160242},{"id":160305,"depth":46,"text":160306},{"id":160400,"depth":46,"text":160401},{"id":160509,"depth":46,"text":160510},{"id":160705,"depth":46,"text":160706},{"id":160790,"depth":46,"text":160791},{"id":160929,"depth":46,"text":160930},{"id":161109,"depth":46,"text":161110},{"id":161258,"depth":46,"text":161259},{"id":161472,"depth":46,"text":161473},{"id":161506,"depth":46,"text":161507},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159778,"description":823},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161554,"title":161555,"body":161556,"description":823,"extension":824,"meta":163561,"navigation":193,"path":163562,"seo":163563,"stem":163564,"__hash__":163565},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161557,"toc":163541},[161558,161561,161565,161568,161571,161585,161588,161602,161606,161608,161627,161629,161676,161678,161692,161696,161770,161773,161777,161780,161839,161847,161850,161903,161906,161910,161915,161970,161978,162028,162032,162037,162045,162144,162150,162154,162159,162162,162173,162214,162227,162231,162234,162270,162273,162286,162289,162349,162353,162357,162360,162411,162415,162418,162465,162471,162537,162540,162544,162547,162663,162666,162670,162673,162779,162783,162786,162824,162827,162869,162872,162932,162935,162939,163403,163406,163410,163437,163443,163504,163508,163538],[10,161559,161555],{"id":161560},"_5-函数基础",[21,161562,161564],{"id":161563},"_51-为什么需要函数","5.1 为什么需要函数",[14,161566,161567],{},"函数用于封装一段可以重复使用的代码。",[14,161569,161570],{},"不使用函数的问题：",[851,161572,161573,161576,161579,161582],{},[854,161574,161575],{},"重复代码多。",[854,161577,161578],{},"修改逻辑时容易漏改。",[854,161580,161581],{},"主流程不清晰。",[854,161583,161584],{},"程序越写越长，难以维护。",[14,161586,161587],{},"使用函数后的好处：",[851,161589,161590,161593,161596,161599],{},[854,161591,161592],{},"提高复用性。",[854,161594,161595],{},"提高可读性。",[854,161597,161598],{},"便于调试。",[854,161600,161601],{},"便于分工。",[21,161603,161605],{"id":161604},"_52-函数定义","5.2 函数定义",[14,161607,5929],{},[26,161609,161611],{"className":28,"code":161610,"language":30,"meta":31,"style":31},"def 函数名():\n    函数体\n",[33,161612,161613,161622],{"__ignoreMap":31},[36,161614,161615,161617,161620],{"class":38,"line":39},[36,161616,32689],{"class":53},[36,161618,161619],{"class":2713}," 函数名",[36,161621,32695],{"class":49},[36,161623,161624],{"class":38,"line":46},[36,161625,161626],{"class":49},"    函数体\n",[14,161628,15879],{},[26,161630,161632],{"className":28,"code":161631,"language":30,"meta":31,"style":31},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[33,161633,161634,161643,161653,161663,161667,161671],{"__ignoreMap":31},[36,161635,161636,161638,161641],{"class":38,"line":39},[36,161637,32689],{"class":53},[36,161639,161640],{"class":2713}," say_hello",[36,161642,32695],{"class":49},[36,161644,161645,161647,161649,161651],{"class":38,"line":46},[36,161646,32041],{"class":60},[36,161648,901],{"class":49},[36,161650,6591],{"class":998},[36,161652,75],{"class":49},[36,161654,161655,161657,161659,161661],{"class":38,"line":78},[36,161656,32041],{"class":60},[36,161658,901],{"class":49},[36,161660,147283],{"class":998},[36,161662,75],{"class":49},[36,161664,161665],{"class":38,"line":125},[36,161666,194],{"emptyLinePlaceholder":193},[36,161668,161669],{"class":38,"line":131},[36,161670,194],{"emptyLinePlaceholder":193},[36,161672,161673],{"class":38,"line":396},[36,161674,161675],{"class":49},"say_hello()\n",[14,161677,9772],{},[851,161679,161680,161683,161686,161689],{},[854,161681,161682],{},"函数必须先定义，再调用。",[854,161684,161685],{},"函数名遵循变量命名规则。",[854,161687,161688],{},"函数体需要缩进。",[854,161690,161691],{},"函数不调用就不会执行。",[21,161693,161695],{"id":161694},"_53-函数调用","5.3 函数调用",[26,161697,161699],{"className":28,"code":161698,"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,161700,161701,161710,161721,161732,161743,161753,161757,161761,161766],{"__ignoreMap":31},[36,161702,161703,161705,161708],{"class":38,"line":39},[36,161704,32689],{"class":53},[36,161706,161707],{"class":2713}," print_menu",[36,161709,32695],{"class":49},[36,161711,161712,161714,161716,161719],{"class":38,"line":46},[36,161713,32041],{"class":60},[36,161715,901],{"class":49},[36,161717,161718],{"class":998},"\"1. 查询\"",[36,161720,75],{"class":49},[36,161722,161723,161725,161727,161730],{"class":38,"line":78},[36,161724,32041],{"class":60},[36,161726,901],{"class":49},[36,161728,161729],{"class":998},"\"2. 添加\"",[36,161731,75],{"class":49},[36,161733,161734,161736,161738,161741],{"class":38,"line":125},[36,161735,32041],{"class":60},[36,161737,901],{"class":49},[36,161739,161740],{"class":998},"\"3. 删除\"",[36,161742,75],{"class":49},[36,161744,161745,161747,161749,161751],{"class":38,"line":131},[36,161746,32041],{"class":60},[36,161748,901],{"class":49},[36,161750,161325],{"class":998},[36,161752,75],{"class":49},[36,161754,161755],{"class":38,"line":396},[36,161756,194],{"emptyLinePlaceholder":193},[36,161758,161759],{"class":38,"line":407},[36,161760,194],{"emptyLinePlaceholder":193},[36,161762,161763],{"class":38,"line":2061},[36,161764,161765],{"class":49},"print_menu()\n",[36,161767,161768],{"class":38,"line":2067},[36,161769,161765],{"class":49},[14,161771,161772],{},"函数可以多次调用，每次调用都会执行函数体。",[21,161774,161776],{"id":161775},"_54-参数","5.4 参数",[14,161778,161779],{},"参数用于向函数传递数据。",[26,161781,161783],{"className":28,"code":161782,"language":30,"meta":31,"style":31},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[33,161784,161785,161794,161814,161818,161822,161831],{"__ignoreMap":31},[36,161786,161787,161789,161791],{"class":38,"line":39},[36,161788,32689],{"class":53},[36,161790,161640],{"class":2713},[36,161792,161793],{"class":49},"(name):\n",[36,161795,161796,161798,161800,161802,161804,161806,161808,161810,161812],{"class":38,"line":46},[36,161797,32041],{"class":60},[36,161799,901],{"class":49},[36,161801,949],{"class":53},[36,161803,157698],{"class":998},[36,161805,1775],{"class":60},[36,161807,80552],{"class":49},[36,161809,1825],{"class":60},[36,161811,1141],{"class":998},[36,161813,75],{"class":49},[36,161815,161816],{"class":38,"line":78},[36,161817,194],{"emptyLinePlaceholder":193},[36,161819,161820],{"class":38,"line":125},[36,161821,194],{"emptyLinePlaceholder":193},[36,161823,161824,161827,161829],{"class":38,"line":131},[36,161825,161826],{"class":49},"say_hello(",[36,161828,150532],{"class":998},[36,161830,75],{"class":49},[36,161832,161833,161835,161837],{"class":38,"line":396},[36,161834,161826],{"class":49},[36,161836,151580],{"class":998},[36,161838,75],{"class":49},[14,161840,161841,161843,161844,161846],{},[33,161842,80552],{}," 是形参，",[33,161845,150532],{}," 是实参。",[14,161848,161849],{},"多个参数：",[26,161851,161853],{"className":28,"code":161852,"language":30,"meta":31,"style":31},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[33,161854,161855,161863,161876,161882,161886,161890],{"__ignoreMap":31},[36,161856,161857,161859,161861],{"class":38,"line":39},[36,161858,32689],{"class":53},[36,161860,5957],{"class":2713},[36,161862,151737],{"class":49},[36,161864,161865,161868,161870,161872,161874],{"class":38,"line":46},[36,161866,161867],{"class":49},"    result ",[36,161869,54],{"class":53},[36,161871,11616],{"class":49},[36,161873,1365],{"class":53},[36,161875,151748],{"class":49},[36,161877,161878,161880],{"class":38,"line":78},[36,161879,32041],{"class":60},[36,161881,77327],{"class":49},[36,161883,161884],{"class":38,"line":125},[36,161885,194],{"emptyLinePlaceholder":193},[36,161887,161888],{"class":38,"line":131},[36,161889,194],{"emptyLinePlaceholder":193},[36,161891,161892,161895,161897,161899,161901],{"class":38,"line":396},[36,161893,161894],{"class":49},"add(",[36,161896,332],{"class":60},[36,161898,154],{"class":49},[36,161900,72],{"class":60},[36,161902,75],{"class":49},[14,161904,161905],{},"调用时参数数量必须匹配。",[21,161907,161909],{"id":161908},"_55-返回值","5.5 返回值",[14,161911,161912,161914],{},[33,161913,17790],{}," 用于把函数内部的结果返回给调用者。",[26,161916,161918],{"className":28,"code":161917,"language":30,"meta":31,"style":31},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[33,161919,161920,161928,161938,161942,161946,161964],{"__ignoreMap":31},[36,161921,161922,161924,161926],{"class":38,"line":39},[36,161923,32689],{"class":53},[36,161925,5957],{"class":2713},[36,161927,151737],{"class":49},[36,161929,161930,161932,161934,161936],{"class":38,"line":46},[36,161931,4839],{"class":53},[36,161933,11616],{"class":49},[36,161935,1365],{"class":53},[36,161937,151748],{"class":49},[36,161939,161940],{"class":38,"line":78},[36,161941,194],{"emptyLinePlaceholder":193},[36,161943,161944],{"class":38,"line":125},[36,161945,194],{"emptyLinePlaceholder":193},[36,161947,161948,161951,161953,161956,161958,161960,161962],{"class":38,"line":131},[36,161949,161950],{"class":49},"result ",[36,161952,54],{"class":53},[36,161954,161955],{"class":49}," add(",[36,161957,332],{"class":60},[36,161959,154],{"class":49},[36,161961,72],{"class":60},[36,161963,75],{"class":49},[36,161965,161966,161968],{"class":38,"line":396},[36,161967,199],{"class":60},[36,161969,77327],{"class":49},[14,161971,161972,161973,161975,161976,29130],{},"如果函数没有写 ",[33,161974,17790],{},"，默认返回 ",[33,161977,96330],{},[26,161979,161981],{"className":28,"code":161980,"language":30,"meta":31,"style":31},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[33,161982,161983,161991,162001,162005,162009,162018],{"__ignoreMap":31},[36,161984,161985,161987,161989],{"class":38,"line":39},[36,161986,32689],{"class":53},[36,161988,161640],{"class":2713},[36,161990,32695],{"class":49},[36,161992,161993,161995,161997,161999],{"class":38,"line":46},[36,161994,32041],{"class":60},[36,161996,901],{"class":49},[36,161998,6591],{"class":998},[36,162000,75],{"class":49},[36,162002,162003],{"class":38,"line":78},[36,162004,194],{"emptyLinePlaceholder":193},[36,162006,162007],{"class":38,"line":125},[36,162008,194],{"emptyLinePlaceholder":193},[36,162010,162011,162013,162015],{"class":38,"line":131},[36,162012,161950],{"class":49},[36,162014,54],{"class":53},[36,162016,162017],{"class":49}," say_hello()\n",[36,162019,162020,162022,162025],{"class":38,"line":396},[36,162021,199],{"class":60},[36,162023,162024],{"class":49},"(result)  ",[36,162026,162027],{"class":42},"# None\n",[21,162029,162031],{"id":162030},"_56-return的作用","5.6 return的作用",[14,162033,162034,162036],{},[33,162035,17790],{}," 有两个作用：",[851,162038,162039,162042],{},[854,162040,162041],{},"返回结果。",[854,162043,162044],{},"结束函数。",[26,162046,162048],{"className":28,"code":162047,"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,162049,162050,162060,162072,162079,162083,162095,162102,162106,162113,162117,162121,162132],{"__ignoreMap":31},[36,162051,162052,162054,162057],{"class":38,"line":39},[36,162053,32689],{"class":53},[36,162055,162056],{"class":2713}," check_age",[36,162058,162059],{"class":49},"(age):\n",[36,162061,162062,162064,162066,162068,162070],{"class":38,"line":46},[36,162063,3850],{"class":53},[36,162065,16451],{"class":49},[36,162067,1789],{"class":53},[36,162069,4842],{"class":60},[36,162071,4488],{"class":49},[36,162073,162074,162076],{"class":38,"line":78},[36,162075,15496],{"class":53},[36,162077,162078],{"class":998}," \"年龄不合法\"\n",[36,162080,162081],{"class":38,"line":125},[36,162082,194],{"emptyLinePlaceholder":193},[36,162084,162085,162087,162089,162091,162093],{"class":38,"line":131},[36,162086,3850],{"class":53},[36,162088,16451],{"class":49},[36,162090,2460],{"class":53},[36,162092,156929],{"class":60},[36,162094,4488],{"class":49},[36,162096,162097,162099],{"class":38,"line":396},[36,162098,15496],{"class":53},[36,162100,162101],{"class":998}," \"成年人\"\n",[36,162103,162104],{"class":38,"line":407},[36,162105,194],{"emptyLinePlaceholder":193},[36,162107,162108,162110],{"class":38,"line":2061},[36,162109,4839],{"class":53},[36,162111,162112],{"class":998}," \"未成年人\"\n",[36,162114,162115],{"class":38,"line":2067},[36,162116,194],{"emptyLinePlaceholder":193},[36,162118,162119],{"class":38,"line":2079},[36,162120,194],{"emptyLinePlaceholder":193},[36,162122,162123,162125,162128,162130],{"class":38,"line":2362},[36,162124,199],{"class":60},[36,162126,162127],{"class":49},"(check_age(",[36,162129,72],{"class":60},[36,162131,31239],{"class":49},[36,162133,162134,162136,162138,162140,162142],{"class":38,"line":2367},[36,162135,199],{"class":60},[36,162137,162127],{"class":49},[36,162139,1414],{"class":53},[36,162141,61],{"class":60},[36,162143,31239],{"class":49},[14,162145,162146,162147,162149],{},"函数执行到 ",[33,162148,17790],{}," 后，后面的代码不会继续执行。",[21,162151,162153],{"id":162152},"_57-none","5.7 None",[14,162155,162156,162158],{},[33,162157,96330],{}," 表示空值或没有结果。",[14,162160,162161],{},"常见使用场景：",[851,162163,162164,162167,162170],{},[854,162165,162166],{},"函数没有返回值。",[854,162168,162169],{},"变量暂时没有具体值。",[854,162171,162172],{},"表示查询不到结果。",[26,162174,162176],{"className":28,"code":162175,"language":30,"meta":31,"style":31},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[33,162177,162178,162186,162190,162203],{"__ignoreMap":31},[36,162179,162180,162182,162184],{"class":38,"line":39},[36,162181,161950],{"class":49},[36,162183,54],{"class":53},[36,162185,152816],{"class":60},[36,162187,162188],{"class":38,"line":46},[36,162189,194],{"emptyLinePlaceholder":193},[36,162191,162192,162194,162197,162199,162201],{"class":38,"line":78},[36,162193,2281],{"class":53},[36,162195,162196],{"class":49}," result ",[36,162198,39669],{"class":53},[36,162200,39675],{"class":60},[36,162202,4488],{"class":49},[36,162204,162205,162207,162209,162212],{"class":38,"line":125},[36,162206,32041],{"class":60},[36,162208,901],{"class":49},[36,162210,162211],{"class":998},"\"没有数据\"",[36,162213,75],{"class":49},[14,162215,162216,162217,162219,162220,162223,162224,29130],{},"判断 ",[33,162218,96330],{}," 推荐使用 ",[33,162221,162222],{},"is None","，不要写成 ",[33,162225,162226],{},"== None",[21,162228,162230],{"id":162229},"_58-函数文档字符串","5.8 函数文档字符串",[14,162232,162233],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[26,162235,162237],{"className":28,"code":162236,"language":30,"meta":31,"style":31},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[33,162238,162239,162249,162254],{"__ignoreMap":31},[36,162240,162241,162243,162246],{"class":38,"line":39},[36,162242,32689],{"class":53},[36,162244,162245],{"class":2713}," calculate_bmi",[36,162247,162248],{"class":49},"(weight, height):\n",[36,162250,162251],{"class":38,"line":46},[36,162252,162253],{"class":998},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[36,162255,162256,162258,162261,162263,162266,162268],{"class":38,"line":78},[36,162257,4839],{"class":53},[36,162259,162260],{"class":49}," weight ",[36,162262,1466],{"class":53},[36,162264,162265],{"class":49}," height ",[36,162267,11408],{"class":53},[36,162269,48465],{"class":60},[14,162271,162272],{},"查看说明：",[26,162274,162276],{"className":28,"code":162275,"language":30,"meta":31,"style":31},"help(calculate_bmi)\n",[33,162277,162278],{"__ignoreMap":31},[36,162279,162280,162283],{"class":38,"line":39},[36,162281,162282],{"class":60},"help",[36,162284,162285],{"class":49},"(calculate_bmi)\n",[14,162287,162288],{},"较完整的写法：",[26,162290,162292],{"className":28,"code":162291,"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,162293,162294,162302,162307,162312,162316,162321,162326,162331,162335],{"__ignoreMap":31},[36,162295,162296,162298,162300],{"class":38,"line":39},[36,162297,32689],{"class":53},[36,162299,162245],{"class":2713},[36,162301,162248],{"class":49},[36,162303,162304],{"class":38,"line":46},[36,162305,162306],{"class":998},"    \"\"\"\n",[36,162308,162309],{"class":38,"line":78},[36,162310,162311],{"class":998},"    计算BMI。\n",[36,162313,162314],{"class":38,"line":125},[36,162315,194],{"emptyLinePlaceholder":193},[36,162317,162318],{"class":38,"line":131},[36,162319,162320],{"class":998},"    :param weight: 体重，单位kg\n",[36,162322,162323],{"class":38,"line":396},[36,162324,162325],{"class":998},"    :param height: 身高，单位m\n",[36,162327,162328],{"class":38,"line":407},[36,162329,162330],{"class":998},"    :return: BMI数值\n",[36,162332,162333],{"class":38,"line":2061},[36,162334,162306],{"class":998},[36,162336,162337,162339,162341,162343,162345,162347],{"class":38,"line":2067},[36,162338,4839],{"class":53},[36,162340,162260],{"class":49},[36,162342,1466],{"class":53},[36,162344,162265],{"class":49},[36,162346,11408],{"class":53},[36,162348,48465],{"class":60},[21,162350,162352],{"id":162351},"_59-变量作用域","5.9 变量作用域",[868,162354,162356],{"id":162355},"_591-局部变量","5.9.1 局部变量",[14,162358,162359],{},"在函数内部定义的变量，只能在函数内部使用。",[26,162361,162363],{"className":28,"code":162362,"language":30,"meta":31,"style":31},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[33,162364,162365,162374,162382,162388,162392,162396,162401],{"__ignoreMap":31},[36,162366,162367,162369,162372],{"class":38,"line":39},[36,162368,32689],{"class":53},[36,162370,162371],{"class":2713}," test",[36,162373,32695],{"class":49},[36,162375,162376,162378,162380],{"class":38,"line":46},[36,162377,46335],{"class":49},[36,162379,54],{"class":53},[36,162381,59170],{"class":60},[36,162383,162384,162386],{"class":38,"line":78},[36,162385,32041],{"class":60},[36,162387,913],{"class":49},[36,162389,162390],{"class":38,"line":125},[36,162391,194],{"emptyLinePlaceholder":193},[36,162393,162394],{"class":38,"line":131},[36,162395,194],{"emptyLinePlaceholder":193},[36,162397,162398],{"class":38,"line":396},[36,162399,162400],{"class":49},"test()\n",[36,162402,162403,162405,162408],{"class":38,"line":407},[36,162404,199],{"class":60},[36,162406,162407],{"class":49},"(num)  ",[36,162409,162410],{"class":42},"# 报错\n",[868,162412,162414],{"id":162413},"_592-全局变量","5.9.2 全局变量",[14,162416,162417],{},"在函数外部定义的变量，可以在函数内部读取。",[26,162419,162421],{"className":28,"code":162420,"language":30,"meta":31,"style":31},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[33,162422,162423,162431,162435,162439,162447,162453,162457,162461],{"__ignoreMap":31},[36,162424,162425,162427,162429],{"class":38,"line":39},[36,162426,147180],{"class":49},[36,162428,54],{"class":53},[36,162430,149997],{"class":998},[36,162432,162433],{"class":38,"line":46},[36,162434,194],{"emptyLinePlaceholder":193},[36,162436,162437],{"class":38,"line":78},[36,162438,194],{"emptyLinePlaceholder":193},[36,162440,162441,162443,162445],{"class":38,"line":125},[36,162442,32689],{"class":53},[36,162444,161640],{"class":2713},[36,162446,32695],{"class":49},[36,162448,162449,162451],{"class":38,"line":131},[36,162450,32041],{"class":60},[36,162452,151304],{"class":49},[36,162454,162455],{"class":38,"line":396},[36,162456,194],{"emptyLinePlaceholder":193},[36,162458,162459],{"class":38,"line":407},[36,162460,194],{"emptyLinePlaceholder":193},[36,162462,162463],{"class":38,"line":2061},[36,162464,161675],{"class":49},[14,162466,162467,162468,29130],{},"如果要在函数内部修改全局变量，需要 ",[33,162469,162470],{},"global",[26,162472,162474],{"className":28,"code":162473,"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,162475,162476,162484,162488,162492,162501,162509,162517,162521,162525,162530],{"__ignoreMap":31},[36,162477,162478,162480,162482],{"class":38,"line":39},[36,162479,147335],{"class":49},[36,162481,54],{"class":53},[36,162483,48075],{"class":60},[36,162485,162486],{"class":38,"line":46},[36,162487,194],{"emptyLinePlaceholder":193},[36,162489,162490],{"class":38,"line":78},[36,162491,194],{"emptyLinePlaceholder":193},[36,162493,162494,162496,162499],{"class":38,"line":125},[36,162495,32689],{"class":53},[36,162497,162498],{"class":2713}," add_count",[36,162500,32695],{"class":49},[36,162502,162503,162506],{"class":38,"line":131},[36,162504,162505],{"class":53},"    global",[36,162507,162508],{"class":49}," count\n",[36,162510,162511,162513,162515],{"class":38,"line":396},[36,162512,160077],{"class":49},[36,162514,10224],{"class":53},[36,162516,56441],{"class":60},[36,162518,162519],{"class":38,"line":407},[36,162520,194],{"emptyLinePlaceholder":193},[36,162522,162523],{"class":38,"line":2061},[36,162524,194],{"emptyLinePlaceholder":193},[36,162526,162527],{"class":38,"line":2067},[36,162528,162529],{"class":49},"add_count()\n",[36,162531,162532,162534],{"class":38,"line":2079},[36,162533,199],{"class":60},[36,162535,162536],{"class":49},"(count)\n",[14,162538,162539],{},"不建议大量使用全局变量，项目变大后很难维护。",[21,162541,162543],{"id":162542},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,162545,162546],{},"一个函数中可以调用另一个函数。",[26,162548,162550],{"className":28,"code":162549,"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,162551,162552,162561,162575,162579,162583,162592,162597,162617,162638,162642,162646,162650],{"__ignoreMap":31},[36,162553,162554,162556,162559],{"class":38,"line":39},[36,162555,32689],{"class":53},[36,162557,162558],{"class":2713}," print_line",[36,162560,32695],{"class":49},[36,162562,162563,162565,162567,162569,162571,162573],{"class":38,"line":46},[36,162564,32041],{"class":60},[36,162566,901],{"class":49},[36,162568,33225],{"class":998},[36,162570,7265],{"class":53},[36,162572,79407],{"class":60},[36,162574,75],{"class":49},[36,162576,162577],{"class":38,"line":78},[36,162578,194],{"emptyLinePlaceholder":193},[36,162580,162581],{"class":38,"line":125},[36,162582,194],{"emptyLinePlaceholder":193},[36,162584,162585,162587,162590],{"class":38,"line":131},[36,162586,32689],{"class":53},[36,162588,162589],{"class":2713}," print_info",[36,162591,150019],{"class":49},[36,162593,162594],{"class":38,"line":396},[36,162595,162596],{"class":49},"    print_line()\n",[36,162598,162599,162601,162603,162605,162607,162609,162611,162613,162615],{"class":38,"line":407},[36,162600,32041],{"class":60},[36,162602,901],{"class":49},[36,162604,949],{"class":53},[36,162606,157326],{"class":998},[36,162608,1775],{"class":60},[36,162610,80552],{"class":49},[36,162612,1825],{"class":60},[36,162614,1141],{"class":998},[36,162616,75],{"class":49},[36,162618,162619,162621,162623,162625,162628,162630,162632,162634,162636],{"class":38,"line":2061},[36,162620,32041],{"class":60},[36,162622,901],{"class":49},[36,162624,949],{"class":53},[36,162626,162627],{"class":998},"\"年龄:",[36,162629,1775],{"class":60},[36,162631,70963],{"class":49},[36,162633,1825],{"class":60},[36,162635,1141],{"class":998},[36,162637,75],{"class":49},[36,162639,162640],{"class":38,"line":2067},[36,162641,162596],{"class":49},[36,162643,162644],{"class":38,"line":2079},[36,162645,194],{"emptyLinePlaceholder":193},[36,162647,162648],{"class":38,"line":2362},[36,162649,194],{"emptyLinePlaceholder":193},[36,162651,162652,162655,162657,162659,162661],{"class":38,"line":2367},[36,162653,162654],{"class":49},"print_info(",[36,162656,150532],{"class":998},[36,162658,154],{"class":49},[36,162660,1532],{"class":60},[36,162662,75],{"class":49},[14,162664,162665],{},"这种方式可以把小功能组合成大功能。",[21,162667,162669],{"id":162668},"_511-参数检查","5.11 参数检查",[14,162671,162672],{},"函数内部可以检查参数是否合法。",[26,162674,162676],{"className":28,"code":162675,"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,162677,162678,162687,162699,162705,162715,162719,162723,162740,162744,162756,162767,162773],{"__ignoreMap":31},[36,162679,162680,162682,162685],{"class":38,"line":39},[36,162681,32689],{"class":53},[36,162683,162684],{"class":2713}," divide",[36,162686,151737],{"class":49},[36,162688,162689,162691,162693,162695,162697],{"class":38,"line":46},[36,162690,3850],{"class":53},[36,162692,11629],{"class":49},[36,162694,3698],{"class":53},[36,162696,4842],{"class":60},[36,162698,4488],{"class":49},[36,162700,162701,162703],{"class":38,"line":78},[36,162702,15496],{"class":53},[36,162704,152816],{"class":60},[36,162706,162707,162709,162711,162713],{"class":38,"line":125},[36,162708,4839],{"class":53},[36,162710,11616],{"class":49},[36,162712,1466],{"class":53},[36,162714,151748],{"class":49},[36,162716,162717],{"class":38,"line":131},[36,162718,194],{"emptyLinePlaceholder":193},[36,162720,162721],{"class":38,"line":396},[36,162722,194],{"emptyLinePlaceholder":193},[36,162724,162725,162727,162729,162732,162734,162736,162738],{"class":38,"line":407},[36,162726,161950],{"class":49},[36,162728,54],{"class":53},[36,162730,162731],{"class":49}," divide(",[36,162733,332],{"class":60},[36,162735,154],{"class":49},[36,162737,643],{"class":60},[36,162739,75],{"class":49},[36,162741,162742],{"class":38,"line":2061},[36,162743,194],{"emptyLinePlaceholder":193},[36,162745,162746,162748,162750,162752,162754],{"class":38,"line":2067},[36,162747,2281],{"class":53},[36,162749,162196],{"class":49},[36,162751,39669],{"class":53},[36,162753,39675],{"class":60},[36,162755,4488],{"class":49},[36,162757,162758,162760,162762,162765],{"class":38,"line":2079},[36,162759,32041],{"class":60},[36,162761,901],{"class":49},[36,162763,162764],{"class":998},"\"除数不能为0\"",[36,162766,75],{"class":49},[36,162768,162769,162771],{"class":38,"line":2362},[36,162770,2451],{"class":53},[36,162772,4488],{"class":49},[36,162774,162775,162777],{"class":38,"line":2367},[36,162776,32041],{"class":60},[36,162778,77327],{"class":49},[21,162780,162782],{"id":162781},"_512-类型提示","5.12 类型提示",[14,162784,162785],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[26,162787,162789],{"className":28,"code":162788,"language":30,"meta":31,"style":31},"def add(a: int, b: int) -> int:\n    return a + b\n",[33,162790,162791,162814],{"__ignoreMap":31},[36,162792,162793,162795,162797,162800,162802,162805,162807,162810,162812],{"class":38,"line":39},[36,162794,32689],{"class":53},[36,162796,5957],{"class":2713},[36,162798,162799],{"class":49},"(a: ",[36,162801,904],{"class":60},[36,162803,162804],{"class":49},", b: ",[36,162806,904],{"class":60},[36,162808,162809],{"class":49},") -> ",[36,162811,904],{"class":60},[36,162813,4488],{"class":49},[36,162815,162816,162818,162820,162822],{"class":38,"line":46},[36,162817,4839],{"class":53},[36,162819,11616],{"class":49},[36,162821,1365],{"class":53},[36,162823,151748],{"class":49},[14,162825,162826],{},"字符串参数：",[26,162828,162830],{"className":28,"code":162829,"language":30,"meta":31,"style":31},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[33,162831,162832,162849],{"__ignoreMap":31},[36,162833,162834,162836,162838,162841,162843,162845,162847],{"class":38,"line":39},[36,162835,32689],{"class":53},[36,162837,161640],{"class":2713},[36,162839,162840],{"class":49},"(name: ",[36,162842,2049],{"class":60},[36,162844,162809],{"class":49},[36,162846,96330],{"class":60},[36,162848,4488],{"class":49},[36,162850,162851,162853,162855,162857,162859,162861,162863,162865,162867],{"class":38,"line":46},[36,162852,32041],{"class":60},[36,162854,901],{"class":49},[36,162856,949],{"class":53},[36,162858,157698],{"class":998},[36,162860,1775],{"class":60},[36,162862,80552],{"class":49},[36,162864,1825],{"class":60},[36,162866,1141],{"class":998},[36,162868,75],{"class":49},[14,162870,162871],{},"列表参数：",[26,162873,162875],{"className":28,"code":162874,"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,162876,162877,162896,162904,162916,162925],{"__ignoreMap":31},[36,162878,162879,162881,162884,162887,162889,162892,162894],{"class":38,"line":39},[36,162880,32689],{"class":53},[36,162882,162883],{"class":2713}," get_total",[36,162885,162886],{"class":49},"(numbers: list[",[36,162888,904],{"class":60},[36,162890,162891],{"class":49},"]) -> ",[36,162893,904],{"class":60},[36,162895,4488],{"class":49},[36,162897,162898,162900,162902],{"class":38,"line":46},[36,162899,159951],{"class":49},[36,162901,54],{"class":53},[36,162903,48075],{"class":60},[36,162905,162906,162908,162911,162913],{"class":38,"line":78},[36,162907,3950],{"class":53},[36,162909,162910],{"class":49}," number ",[36,162912,26788],{"class":53},[36,162914,162915],{"class":49}," numbers:\n",[36,162917,162918,162920,162922],{"class":38,"line":125},[36,162919,160626],{"class":49},[36,162921,10224],{"class":53},[36,162923,162924],{"class":49}," number\n",[36,162926,162927,162929],{"class":38,"line":131},[36,162928,4839],{"class":53},[36,162930,162931],{"class":49}," total\n",[14,162933,162934],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[21,162936,162938],{"id":162937},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[26,162940,162942],{"className":28,"code":162941,"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,162943,162944,162954,162958,162962,162970,162981,162991,163001,163011,163021,163025,163029,163038,163060,163064,163068,163077,163083,163103,163115,163126,163130,163139,163150,163155,163159,163163,163172,163178,163197,163209,163219,163223,163234,163244,163248,163256,163267,163271,163275,163279,163287,163292,163306,163310,163322,163327,163339,163344,163356,163361,163373,163383,163387,163393],{"__ignoreMap":31},[36,162945,162946,162949,162951],{"class":38,"line":39},[36,162947,162948],{"class":49},"balance ",[36,162950,54],{"class":53},[36,162952,162953],{"class":60}," 1000\n",[36,162955,162956],{"class":38,"line":46},[36,162957,194],{"emptyLinePlaceholder":193},[36,162959,162960],{"class":38,"line":78},[36,162961,194],{"emptyLinePlaceholder":193},[36,162963,162964,162966,162968],{"class":38,"line":125},[36,162965,32689],{"class":53},[36,162967,152677],{"class":2713},[36,162969,32695],{"class":49},[36,162971,162972,162974,162976,162979],{"class":38,"line":131},[36,162973,32041],{"class":60},[36,162975,901],{"class":49},[36,162977,162978],{"class":998},"\"====== ATM ======\"",[36,162980,75],{"class":49},[36,162982,162983,162985,162987,162989],{"class":38,"line":396},[36,162984,32041],{"class":60},[36,162986,901],{"class":49},[36,162988,161292],{"class":998},[36,162990,75],{"class":49},[36,162992,162993,162995,162997,162999],{"class":38,"line":407},[36,162994,32041],{"class":60},[36,162996,901],{"class":49},[36,162998,161303],{"class":998},[36,163000,75],{"class":49},[36,163002,163003,163005,163007,163009],{"class":38,"line":2061},[36,163004,32041],{"class":60},[36,163006,901],{"class":49},[36,163008,161314],{"class":998},[36,163010,75],{"class":49},[36,163012,163013,163015,163017,163019],{"class":38,"line":2067},[36,163014,32041],{"class":60},[36,163016,901],{"class":49},[36,163018,161325],{"class":998},[36,163020,75],{"class":49},[36,163022,163023],{"class":38,"line":2079},[36,163024,194],{"emptyLinePlaceholder":193},[36,163026,163027],{"class":38,"line":2362},[36,163028,194],{"emptyLinePlaceholder":193},[36,163030,163031,163033,163036],{"class":38,"line":2367},[36,163032,32689],{"class":53},[36,163034,163035],{"class":2713}," show_balance",[36,163037,32695],{"class":49},[36,163039,163040,163042,163044,163046,163049,163051,163054,163056,163058],{"class":38,"line":2373},[36,163041,32041],{"class":60},[36,163043,901],{"class":49},[36,163045,949],{"class":53},[36,163047,163048],{"class":998},"\"当前余额:",[36,163050,1775],{"class":60},[36,163052,163053],{"class":49},"balance",[36,163055,1825],{"class":60},[36,163057,157656],{"class":998},[36,163059,75],{"class":49},[36,163061,163062],{"class":38,"line":2378},[36,163063,194],{"emptyLinePlaceholder":193},[36,163065,163066],{"class":38,"line":2392},[36,163067,194],{"emptyLinePlaceholder":193},[36,163069,163070,163072,163075],{"class":38,"line":2397},[36,163071,32689],{"class":53},[36,163073,163074],{"class":2713}," save_money",[36,163076,32695],{"class":49},[36,163078,163079,163081],{"class":38,"line":2403},[36,163080,162505],{"class":53},[36,163082,150743],{"class":49},[36,163084,163085,163088,163090,163092,163094,163096,163098,163101],{"class":38,"line":2424},[36,163086,163087],{"class":49},"    money ",[36,163089,54],{"class":53},[36,163091,110441],{"class":60},[36,163093,901],{"class":49},[36,163095,54563],{"class":60},[36,163097,901],{"class":49},[36,163099,163100],{"class":998},"\"请输入存款金额:\"",[36,163102,31239],{"class":49},[36,163104,163105,163107,163109,163111,163113],{"class":38,"line":2429},[36,163106,3850],{"class":53},[36,163108,150786],{"class":49},[36,163110,2338],{"class":53},[36,163112,4842],{"class":60},[36,163114,4488],{"class":49},[36,163116,163117,163119,163121,163124],{"class":38,"line":2443},[36,163118,33193],{"class":60},[36,163120,901],{"class":49},[36,163122,163123],{"class":998},"\"金额必须大于0\"",[36,163125,75],{"class":49},[36,163127,163128],{"class":38,"line":2448},[36,163129,153005],{"class":53},[36,163131,163132,163135,163137],{"class":38,"line":2477},[36,163133,163134],{"class":49},"    balance ",[36,163136,10224],{"class":53},[36,163138,150819],{"class":49},[36,163140,163141,163143,163145,163148],{"class":38,"line":2482},[36,163142,32041],{"class":60},[36,163144,901],{"class":49},[36,163146,163147],{"class":998},"\"存款成功\"",[36,163149,75],{"class":49},[36,163151,163152],{"class":38,"line":2499},[36,163153,163154],{"class":49},"    show_balance()\n",[36,163156,163157],{"class":38,"line":2504},[36,163158,194],{"emptyLinePlaceholder":193},[36,163160,163161],{"class":38,"line":2509},[36,163162,194],{"emptyLinePlaceholder":193},[36,163164,163165,163167,163170],{"class":38,"line":2514},[36,163166,32689],{"class":53},[36,163168,163169],{"class":2713}," withdraw_money",[36,163171,32695],{"class":49},[36,163173,163174,163176],{"class":38,"line":2528},[36,163175,162505],{"class":53},[36,163177,150743],{"class":49},[36,163179,163180,163182,163184,163186,163188,163190,163192,163195],{"class":38,"line":2533},[36,163181,163087],{"class":49},[36,163183,54],{"class":53},[36,163185,110441],{"class":60},[36,163187,901],{"class":49},[36,163189,54563],{"class":60},[36,163191,901],{"class":49},[36,163193,163194],{"class":998},"\"请输入取款金额:\"",[36,163196,31239],{"class":49},[36,163198,163199,163201,163203,163205,163207],{"class":38,"line":3326},[36,163200,3850],{"class":53},[36,163202,150786],{"class":49},[36,163204,2338],{"class":53},[36,163206,4842],{"class":60},[36,163208,4488],{"class":49},[36,163210,163211,163213,163215,163217],{"class":38,"line":3340},[36,163212,33193],{"class":60},[36,163214,901],{"class":49},[36,163216,163123],{"class":998},[36,163218,75],{"class":49},[36,163220,163221],{"class":38,"line":3348},[36,163222,153005],{"class":53},[36,163224,163225,163227,163229,163231],{"class":38,"line":3353},[36,163226,3850],{"class":53},[36,163228,150786],{"class":49},[36,163230,1839],{"class":53},[36,163232,163233],{"class":49}," balance:\n",[36,163235,163236,163238,163240,163242],{"class":38,"line":3359},[36,163237,33193],{"class":60},[36,163239,901],{"class":49},[36,163241,150881],{"class":998},[36,163243,75],{"class":49},[36,163245,163246],{"class":38,"line":3365},[36,163247,153005],{"class":53},[36,163249,163250,163252,163254],{"class":38,"line":3370},[36,163251,163134],{"class":49},[36,163253,150896],{"class":53},[36,163255,150819],{"class":49},[36,163257,163258,163260,163262,163265],{"class":38,"line":8695},[36,163259,32041],{"class":60},[36,163261,901],{"class":49},[36,163263,163264],{"class":998},"\"取款成功\"",[36,163266,75],{"class":49},[36,163268,163269],{"class":38,"line":8719},[36,163270,163154],{"class":49},[36,163272,163273],{"class":38,"line":8724},[36,163274,194],{"emptyLinePlaceholder":193},[36,163276,163277],{"class":38,"line":8730},[36,163278,194],{"emptyLinePlaceholder":193},[36,163280,163281,163283,163285],{"class":38,"line":8757},[36,163282,109307],{"class":53},[36,163284,95936],{"class":60},[36,163286,4488],{"class":49},[36,163288,163289],{"class":38,"line":8762},[36,163290,163291],{"class":49},"    show_menu()\n",[36,163293,163294,163296,163298,163300,163302,163304],{"class":38,"line":8768},[36,163295,161336],{"class":49},[36,163297,54],{"class":53},[36,163299,61347],{"class":60},[36,163301,901],{"class":49},[36,163303,153717],{"class":998},[36,163305,75],{"class":49},[36,163307,163308],{"class":38,"line":8780},[36,163309,194],{"emptyLinePlaceholder":193},[36,163311,163312,163314,163316,163318,163320],{"class":38,"line":8792},[36,163313,3850],{"class":53},[36,163315,153730],{"class":49},[36,163317,3698],{"class":53},[36,163319,153735],{"class":998},[36,163321,4488],{"class":49},[36,163323,163324],{"class":38,"line":8804},[36,163325,163326],{"class":49},"        show_balance()\n",[36,163328,163329,163331,163333,163335,163337],{"class":38,"line":10463},[36,163330,40035],{"class":53},[36,163332,153730],{"class":49},[36,163334,3698],{"class":53},[36,163336,153754],{"class":998},[36,163338,4488],{"class":49},[36,163340,163341],{"class":38,"line":10488},[36,163342,163343],{"class":49},"        save_money()\n",[36,163345,163346,163348,163350,163352,163354],{"class":38,"line":10511},[36,163347,40035],{"class":53},[36,163349,153730],{"class":49},[36,163351,3698],{"class":53},[36,163353,153772],{"class":998},[36,163355,4488],{"class":49},[36,163357,163358],{"class":38,"line":10535},[36,163359,163360],{"class":49},"        withdraw_money()\n",[36,163362,163363,163365,163367,163369,163371],{"class":38,"line":10540},[36,163364,40035],{"class":53},[36,163366,153730],{"class":49},[36,163368,3698],{"class":53},[36,163370,153826],{"class":998},[36,163372,4488],{"class":49},[36,163374,163375,163377,163379,163381],{"class":38,"line":10545},[36,163376,33193],{"class":60},[36,163378,901],{"class":49},[36,163380,153837],{"class":998},[36,163382,75],{"class":49},[36,163384,163385],{"class":38,"line":10550},[36,163386,32369],{"class":53},[36,163388,163389,163391],{"class":38,"line":10559},[36,163390,158666],{"class":53},[36,163392,4488],{"class":49},[36,163394,163395,163397,163399,163401],{"class":38,"line":10564},[36,163396,33193],{"class":60},[36,163398,901],{"class":49},[36,163400,153858],{"class":998},[36,163402,75],{"class":49},[14,163404,163405],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[21,163407,163409],{"id":163408},"_514-易错点","5.14 易错点",[851,163411,163412,163415,163418,163423,163428,163431],{},[854,163413,163414],{},"函数定义后必须调用才会执行。",[854,163416,163417],{},"函数名后面有括号才是调用。",[854,163419,163420,163422],{},[33,163421,17790],{}," 后面的代码不会执行。",[854,163424,163425,163426,29130],{},"没有返回值的函数默认返回 ",[33,163427,96330],{},[854,163429,163430],{},"局部变量不能在函数外部访问。",[854,163432,163433,163434,163436],{},"不要滥用 ",[33,163435,162470],{},"，更好的方式是让函数返回新值。",[14,163438,163439,163440,163442],{},"例如不用 ",[33,163441,162470],{}," 改写存款：",[26,163444,163446],{"className":28,"code":163445,"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,163447,163448,163457,163468,163472,163476,163484,163497],{"__ignoreMap":31},[36,163449,163450,163452,163454],{"class":38,"line":39},[36,163451,32689],{"class":53},[36,163453,163074],{"class":2713},[36,163455,163456],{"class":49},"(balance, money):\n",[36,163458,163459,163461,163464,163466],{"class":38,"line":46},[36,163460,4839],{"class":53},[36,163462,163463],{"class":49}," balance ",[36,163465,1365],{"class":53},[36,163467,150819],{"class":49},[36,163469,163470],{"class":38,"line":78},[36,163471,194],{"emptyLinePlaceholder":193},[36,163473,163474],{"class":38,"line":125},[36,163475,194],{"emptyLinePlaceholder":193},[36,163477,163478,163480,163482],{"class":38,"line":131},[36,163479,162948],{"class":49},[36,163481,54],{"class":53},[36,163483,162953],{"class":60},[36,163485,163486,163488,163490,163493,163495],{"class":38,"line":396},[36,163487,162948],{"class":49},[36,163489,54],{"class":53},[36,163491,163492],{"class":49}," save_money(balance, ",[36,163494,2472],{"class":60},[36,163496,75],{"class":49},[36,163498,163499,163501],{"class":38,"line":407},[36,163500,199],{"class":60},[36,163502,163503],{"class":49},"(balance)\n",[21,163505,163507],{"id":163506},"_515-本章练习","5.15 本章练习",[851,163509,163510,163517,163523,163529,163535],{},[854,163511,163512,163513,163516],{},"定义函数 ",[33,163514,163515],{},"print_student(name, age)","，输出学生信息。",[854,163518,163512,163519,163522],{},[33,163520,163521],{},"get_max(a, b, c)","，返回三个数中的最大值。",[854,163524,163512,163525,163528],{},[33,163526,163527],{},"is_even(num)","，判断一个数是否为偶数。",[854,163530,163512,163531,163534],{},[33,163532,163533],{},"calculate_bmi(weight, height)","，返回 BMI。",[854,163536,163537],{},"把第 4 章的菜单程序拆分成多个函数。",[807,163539,163540],{},"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":46,"depth":46,"links":163542},[163543,163544,163545,163546,163547,163548,163549,163550,163551,163555,163556,163557,163558,163559,163560],{"id":161563,"depth":46,"text":161564},{"id":161604,"depth":46,"text":161605},{"id":161694,"depth":46,"text":161695},{"id":161775,"depth":46,"text":161776},{"id":161908,"depth":46,"text":161909},{"id":162030,"depth":46,"text":162031},{"id":162152,"depth":46,"text":162153},{"id":162229,"depth":46,"text":162230},{"id":162351,"depth":46,"text":162352,"children":163552},[163553,163554],{"id":162355,"depth":78,"text":162356},{"id":162413,"depth":78,"text":162414},{"id":162542,"depth":46,"text":162543},{"id":162668,"depth":46,"text":162669},{"id":162781,"depth":46,"text":162782},{"id":162937,"depth":46,"text":162938},{"id":163408,"depth":46,"text":163409},{"id":163506,"depth":46,"text":163507},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161555,"description":823},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163567,"title":163568,"body":163569,"description":823,"extension":824,"meta":166613,"navigation":193,"path":166614,"seo":166615,"stem":166616,"__hash__":166617},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163570,"toc":166594},[163571,163574,163578,163581,163584,163688,163691,163695,163698,163778,163781,163785,163788,163848,163851,163887,163890,163905,163909,163982,163985,164040,164043,164113,164116,164200,164210,164268,164272,164317,164320,164346,164349,164455,164459,164462,164504,164507,164571,164574,164578,164581,164642,164645,164675,164678,164716,164720,164723,164732,164735,164859,164862,164903,164907,164910,164921,164961,164964,164979,164984,164987,165054,165057,165147,165151,165154,165202,165205,165232,165234,165264,165267,165287,165290,165321,165324,165357,165361,165364,165388,165391,165415,165418,165442,165446,165449,165579,165582,165662,165665,165740,165744,165747,165797,165800,165842,165845,165869,165871,165895,165898,165953,165956,166022,166026,166029,166032,166070,166073,166126,166129,166175,166178,166211,166214,166218,166537,166541,166570,166574,166591],[10,163572,163568],{"id":163573},"_6-数据容器",[21,163575,163577],{"id":163576},"_61-什么是数据容器","6.1 什么是数据容器",[14,163579,163580],{},"数据容器用于一次保存多个数据。",[14,163582,163583],{},"常见容器：",[1031,163585,163586,163603],{},[1034,163587,163588],{},[1037,163589,163590,163592,163595,163598,163601],{},[1040,163591,26516],{},[1040,163593,163594],{},"是否有序",[1040,163596,163597],{},"是否可变",[1040,163599,163600],{},"是否允许重复",[1040,163602,28237],{},[1078,163604,163605,163623,163639,163654,163671],{},[1037,163606,163607,163610,163613,163616,163619],{},[1083,163608,163609],{},"list列表",[1083,163611,163612],{},"有序",[1083,163614,163615],{},"可变",[1083,163617,163618],{},"允许",[1083,163620,163621],{},[33,163622,155901],{},[1037,163624,163625,163628,163630,163633,163635],{},[1083,163626,163627],{},"tuple元组",[1083,163629,163612],{},[1083,163631,163632],{},"不可变",[1083,163634,163618],{},[1083,163636,163637],{},[33,163638,155914],{},[1037,163640,163641,163644,163646,163648,163650],{},[1083,163642,163643],{},"str字符串",[1083,163645,163612],{},[1083,163647,163632],{},[1083,163649,163618],{},[1083,163651,163652],{},[33,163653,156524],{},[1037,163655,163656,163659,163662,163664,163667],{},[1083,163657,163658],{},"set集合",[1083,163660,163661],{},"无序",[1083,163663,163615],{},[1083,163665,163666],{},"不允许",[1083,163668,163669],{},[33,163670,155939],{},[1037,163672,163673,163676,163678,163680,163683],{},[1083,163674,163675],{},"dict字典",[1083,163677,163612],{},[1083,163679,163615],{},[1083,163681,163682],{},"key不允许重复",[1083,163684,163685],{},[33,163686,163687],{},"{\"name\": \"小明\"}",[14,163689,163690],{},"Python 3.7 之后，字典保持插入顺序。",[21,163692,163694],{"id":163693},"_62-列表list","6.2 列表list",[14,163696,163697],{},"列表用于保存一组有顺序的数据。",[26,163699,163701],{"className":28,"code":163700,"language":30,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[33,163702,163703,163723,163748,163769],{"__ignoreMap":31},[36,163704,163705,163707,163709,163711,163713,163715,163717,163719,163721],{"class":38,"line":39},[36,163706,161024],{"class":49},[36,163708,54],{"class":53},[36,163710,52968],{"class":49},[36,163712,150532],{"class":998},[36,163714,154],{"class":49},[36,163716,151580],{"class":998},[36,163718,154],{"class":49},[36,163720,160375],{"class":998},[36,163722,33988],{"class":49},[36,163724,163725,163728,163730,163732,163734,163736,163738,163740,163742,163744,163746],{"class":38,"line":46},[36,163726,163727],{"class":49},"numbers ",[36,163729,54],{"class":53},[36,163731,52968],{"class":49},[36,163733,61],{"class":60},[36,163735,154],{"class":49},[36,163737,181],{"class":60},[36,163739,154],{"class":49},[36,163741,162],{"class":60},[36,163743,154],{"class":49},[36,163745,186],{"class":60},[36,163747,33988],{"class":49},[36,163749,163750,163753,163755,163757,163759,163761,163763,163765,163767],{"class":38,"line":78},[36,163751,163752],{"class":49},"mixed ",[36,163754,54],{"class":53},[36,163756,52968],{"class":49},[36,163758,150532],{"class":998},[36,163760,154],{"class":49},[36,163762,1532],{"class":60},[36,163764,154],{"class":49},[36,163766,32218],{"class":60},[36,163768,33988],{"class":49},[36,163770,163771,163774,163776],{"class":38,"line":125},[36,163772,163773],{"class":49},"empty ",[36,163775,54],{"class":53},[36,163777,52580],{"class":49},[14,163779,163780],{},"推荐一个列表中保存同类数据，代码更清晰。",[21,163782,163784],{"id":163783},"_63-列表索引","6.3 列表索引",[14,163786,163787],{},"正向索引从 0 开始：",[26,163789,163791],{"className":28,"code":163790,"language":30,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[33,163792,163793,163813,163817,163828,163838],{"__ignoreMap":31},[36,163794,163795,163797,163799,163801,163803,163805,163807,163809,163811],{"class":38,"line":39},[36,163796,161024],{"class":49},[36,163798,54],{"class":53},[36,163800,52968],{"class":49},[36,163802,150532],{"class":998},[36,163804,154],{"class":49},[36,163806,151580],{"class":998},[36,163808,154],{"class":49},[36,163810,160375],{"class":998},[36,163812,33988],{"class":49},[36,163814,163815],{"class":38,"line":46},[36,163816,194],{"emptyLinePlaceholder":193},[36,163818,163819,163821,163824,163826],{"class":38,"line":78},[36,163820,199],{"class":60},[36,163822,163823],{"class":49},"(names[",[36,163825,643],{"class":60},[36,163827,165],{"class":49},[36,163829,163830,163832,163834,163836],{"class":38,"line":125},[36,163831,199],{"class":60},[36,163833,163823],{"class":49},[36,163835,61],{"class":60},[36,163837,165],{"class":49},[36,163839,163840,163842,163844,163846],{"class":38,"line":131},[36,163841,199],{"class":60},[36,163843,163823],{"class":49},[36,163845,181],{"class":60},[36,163847,165],{"class":49},[14,163849,163850],{},"反向索引从 -1 开始：",[26,163852,163854],{"className":28,"code":163853,"language":30,"meta":31,"style":31},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[33,163855,163856,163872],{"__ignoreMap":31},[36,163857,163858,163860,163862,163864,163866,163869],{"class":38,"line":39},[36,163859,199],{"class":60},[36,163861,163823],{"class":49},[36,163863,1414],{"class":53},[36,163865,61],{"class":60},[36,163867,163868],{"class":49},"])  ",[36,163870,163871],{"class":42},"# 小刚\n",[36,163873,163874,163876,163878,163880,163882,163884],{"class":38,"line":46},[36,163875,199],{"class":60},[36,163877,163823],{"class":49},[36,163879,1414],{"class":53},[36,163881,181],{"class":60},[36,163883,163868],{"class":49},[36,163885,163886],{"class":42},"# 小红\n",[14,163888,163889],{},"索引越界会报错：",[26,163891,163893],{"className":28,"code":163892,"language":30,"meta":31,"style":31},"print(names[3])\n",[33,163894,163895],{"__ignoreMap":31},[36,163896,163897,163899,163901,163903],{"class":38,"line":39},[36,163898,199],{"class":60},[36,163900,163823],{"class":49},[36,163902,162],{"class":60},[36,163904,165],{"class":49},[21,163906,163908],{"id":163907},"_64-列表常用方法","6.4 列表常用方法",[26,163910,163912],{"className":28,"code":163911,"language":30,"meta":31,"style":31},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[33,163913,163914,163930,163934,163943,163957,163971,163975],{"__ignoreMap":31},[36,163915,163916,163918,163920,163922,163924,163926,163928],{"class":38,"line":39},[36,163917,161024],{"class":49},[36,163919,54],{"class":53},[36,163921,52968],{"class":49},[36,163923,150532],{"class":998},[36,163925,154],{"class":49},[36,163927,151580],{"class":998},[36,163929,33988],{"class":49},[36,163931,163932],{"class":38,"line":46},[36,163933,194],{"emptyLinePlaceholder":193},[36,163935,163936,163939,163941],{"class":38,"line":78},[36,163937,163938],{"class":49},"names.append(",[36,163940,160375],{"class":998},[36,163942,75],{"class":49},[36,163944,163945,163948,163950,163952,163955],{"class":38,"line":125},[36,163946,163947],{"class":49},"names.insert(",[36,163949,61],{"class":60},[36,163951,154],{"class":49},[36,163953,163954],{"class":998},"\"小李\"",[36,163956,75],{"class":49},[36,163958,163959,163962,163964,163966,163969],{"class":38,"line":131},[36,163960,163961],{"class":49},"names.extend([",[36,163963,9430],{"class":998},[36,163965,154],{"class":49},[36,163967,163968],{"class":998},"\"小赵\"",[36,163970,165],{"class":49},[36,163972,163973],{"class":38,"line":396},[36,163974,194],{"emptyLinePlaceholder":193},[36,163976,163977,163979],{"class":38,"line":407},[36,163978,199],{"class":60},[36,163980,163981],{"class":49},"(names)\n",[14,163983,163984],{},"删除元素：",[26,163986,163988],{"className":28,"code":163987,"language":30,"meta":31,"style":31},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[33,163989,163990,163999,164009,164023,164035],{"__ignoreMap":31},[36,163991,163992,163995,163997],{"class":38,"line":39},[36,163993,163994],{"class":49},"names.remove(",[36,163996,151580],{"class":998},[36,163998,75],{"class":49},[36,164000,164001,164004,164006],{"class":38,"line":46},[36,164002,164003],{"class":49},"last ",[36,164005,54],{"class":53},[36,164007,164008],{"class":49}," names.pop()\n",[36,164010,164011,164014,164016,164019,164021],{"class":38,"line":78},[36,164012,164013],{"class":49},"first ",[36,164015,54],{"class":53},[36,164017,164018],{"class":49}," names.pop(",[36,164020,643],{"class":60},[36,164022,75],{"class":49},[36,164024,164025,164028,164031,164033],{"class":38,"line":125},[36,164026,164027],{"class":53},"del",[36,164029,164030],{"class":49}," names[",[36,164032,643],{"class":60},[36,164034,33988],{"class":49},[36,164036,164037],{"class":38,"line":131},[36,164038,164039],{"class":49},"names.clear()\n",[14,164041,164042],{},"查询和统计：",[26,164044,164046],{"className":28,"code":164045,"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,164047,164048,164076,164080,164091,164102],{"__ignoreMap":31},[36,164049,164050,164052,164054,164056,164058,164060,164062,164064,164066,164068,164070,164072,164074],{"class":38,"line":39},[36,164051,163727],{"class":49},[36,164053,54],{"class":53},[36,164055,52968],{"class":49},[36,164057,61],{"class":60},[36,164059,154],{"class":49},[36,164061,181],{"class":60},[36,164063,154],{"class":49},[36,164065,162],{"class":60},[36,164067,154],{"class":49},[36,164069,181],{"class":60},[36,164071,154],{"class":49},[36,164073,186],{"class":60},[36,164075,33988],{"class":49},[36,164077,164078],{"class":38,"line":46},[36,164079,194],{"emptyLinePlaceholder":193},[36,164081,164082,164084,164087,164089],{"class":38,"line":78},[36,164083,199],{"class":60},[36,164085,164086],{"class":49},"(numbers.index(",[36,164088,162],{"class":60},[36,164090,31239],{"class":49},[36,164092,164093,164095,164098,164100],{"class":38,"line":125},[36,164094,199],{"class":60},[36,164096,164097],{"class":49},"(numbers.count(",[36,164099,181],{"class":60},[36,164101,31239],{"class":49},[36,164103,164104,164106,164108,164110],{"class":38,"line":131},[36,164105,199],{"class":60},[36,164107,901],{"class":49},[36,164109,8105],{"class":60},[36,164111,164112],{"class":49},"(numbers))\n",[14,164114,164115],{},"排序：",[26,164117,164119],{"className":28,"code":164118,"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,164120,164121,164145,164149,164154,164161,164165,164179,164185,164189,164194],{"__ignoreMap":31},[36,164122,164123,164125,164127,164129,164131,164133,164135,164137,164139,164141,164143],{"class":38,"line":39},[36,164124,163727],{"class":49},[36,164126,54],{"class":53},[36,164128,52968],{"class":49},[36,164130,162],{"class":60},[36,164132,154],{"class":49},[36,164134,61],{"class":60},[36,164136,154],{"class":49},[36,164138,157],{"class":60},[36,164140,154],{"class":49},[36,164142,181],{"class":60},[36,164144,33988],{"class":49},[36,164146,164147],{"class":38,"line":46},[36,164148,194],{"emptyLinePlaceholder":193},[36,164150,164151],{"class":38,"line":78},[36,164152,164153],{"class":49},"numbers.sort()\n",[36,164155,164156,164158],{"class":38,"line":125},[36,164157,199],{"class":60},[36,164159,164160],{"class":49},"(numbers)\n",[36,164162,164163],{"class":38,"line":131},[36,164164,194],{"emptyLinePlaceholder":193},[36,164166,164167,164170,164173,164175,164177],{"class":38,"line":396},[36,164168,164169],{"class":49},"numbers.sort(",[36,164171,164172],{"class":416},"reverse",[36,164174,54],{"class":53},[36,164176,32218],{"class":60},[36,164178,75],{"class":49},[36,164180,164181,164183],{"class":38,"line":407},[36,164182,199],{"class":60},[36,164184,164160],{"class":49},[36,164186,164187],{"class":38,"line":2061},[36,164188,194],{"emptyLinePlaceholder":193},[36,164190,164191],{"class":38,"line":2067},[36,164192,164193],{"class":49},"numbers.reverse()\n",[36,164195,164196,164198],{"class":38,"line":2079},[36,164197,199],{"class":60},[36,164199,164160],{"class":49},[14,164201,164202,164205,164206,164209],{},[33,164203,164204],{},"sort()"," 会修改原列表，",[33,164207,164208],{},"sorted()"," 返回新列表。",[26,164211,164213],{"className":28,"code":164212,"language":30,"meta":31,"style":31},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[33,164214,164215,164239,164251,164255,164261],{"__ignoreMap":31},[36,164216,164217,164219,164221,164223,164225,164227,164229,164231,164233,164235,164237],{"class":38,"line":39},[36,164218,163727],{"class":49},[36,164220,54],{"class":53},[36,164222,52968],{"class":49},[36,164224,162],{"class":60},[36,164226,154],{"class":49},[36,164228,61],{"class":60},[36,164230,154],{"class":49},[36,164232,157],{"class":60},[36,164234,154],{"class":49},[36,164236,181],{"class":60},[36,164238,33988],{"class":49},[36,164240,164241,164244,164246,164249],{"class":38,"line":46},[36,164242,164243],{"class":49},"new_numbers ",[36,164245,54],{"class":53},[36,164247,164248],{"class":60}," sorted",[36,164250,164160],{"class":49},[36,164252,164253],{"class":38,"line":78},[36,164254,194],{"emptyLinePlaceholder":193},[36,164256,164257,164259],{"class":38,"line":125},[36,164258,199],{"class":60},[36,164260,164160],{"class":49},[36,164262,164263,164265],{"class":38,"line":131},[36,164264,199],{"class":60},[36,164266,164267],{"class":49},"(new_numbers)\n",[21,164269,164271],{"id":164270},"_65-列表遍历","6.5 列表遍历",[26,164273,164275],{"className":28,"code":164274,"language":30,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[33,164276,164277,164297,164301,164311],{"__ignoreMap":31},[36,164278,164279,164281,164283,164285,164287,164289,164291,164293,164295],{"class":38,"line":39},[36,164280,161024],{"class":49},[36,164282,54],{"class":53},[36,164284,52968],{"class":49},[36,164286,150532],{"class":998},[36,164288,154],{"class":49},[36,164290,151580],{"class":998},[36,164292,154],{"class":49},[36,164294,160375],{"class":998},[36,164296,33988],{"class":49},[36,164298,164299],{"class":38,"line":46},[36,164300,194],{"emptyLinePlaceholder":193},[36,164302,164303,164305,164307,164309],{"class":38,"line":78},[36,164304,3774],{"class":53},[36,164306,161060],{"class":49},[36,164308,26788],{"class":53},[36,164310,161065],{"class":49},[36,164312,164313,164315],{"class":38,"line":125},[36,164314,32041],{"class":60},[36,164316,151304],{"class":49},[14,164318,164319],{},"需要索引时：",[26,164321,164323],{"className":28,"code":164322,"language":30,"meta":31,"style":31},"for index, name in enumerate(names):\n    print(index, name)\n",[33,164324,164325,164339],{"__ignoreMap":31},[36,164326,164327,164329,164332,164334,164336],{"class":38,"line":39},[36,164328,3774],{"class":53},[36,164330,164331],{"class":49}," index, name ",[36,164333,26788],{"class":53},[36,164335,32348],{"class":60},[36,164337,164338],{"class":49},"(names):\n",[36,164340,164341,164343],{"class":38,"line":46},[36,164342,32041],{"class":60},[36,164344,164345],{"class":49},"(index, name)\n",[14,164347,164348],{},"统计总分：",[26,164350,164352],{"className":28,"code":164351,"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,164353,164354,164379,164387,164391,164402,164410,164414,164431],{"__ignoreMap":31},[36,164355,164356,164359,164361,164363,164365,164367,164369,164371,164373,164375,164377],{"class":38,"line":39},[36,164357,164358],{"class":49},"scores ",[36,164360,54],{"class":53},[36,164362,52968],{"class":49},[36,164364,1741],{"class":60},[36,164366,154],{"class":49},[36,164368,1617],{"class":60},[36,164370,154],{"class":49},[36,164372,1144],{"class":60},[36,164374,154],{"class":49},[36,164376,1443],{"class":60},[36,164378,33988],{"class":49},[36,164380,164381,164383,164385],{"class":38,"line":46},[36,164382,157904],{"class":49},[36,164384,54],{"class":53},[36,164386,48075],{"class":60},[36,164388,164389],{"class":38,"line":78},[36,164390,194],{"emptyLinePlaceholder":193},[36,164392,164393,164395,164397,164399],{"class":38,"line":125},[36,164394,3774],{"class":53},[36,164396,158427],{"class":49},[36,164398,26788],{"class":53},[36,164400,164401],{"class":49}," scores:\n",[36,164403,164404,164406,164408],{"class":38,"line":131},[36,164405,159951],{"class":49},[36,164407,10224],{"class":53},[36,164409,2329],{"class":49},[36,164411,164412],{"class":38,"line":396},[36,164413,194],{"emptyLinePlaceholder":193},[36,164415,164416,164419,164421,164424,164426,164428],{"class":38,"line":407},[36,164417,164418],{"class":49},"avg ",[36,164420,54],{"class":53},[36,164422,164423],{"class":49}," total ",[36,164425,1466],{"class":53},[36,164427,8078],{"class":60},[36,164429,164430],{"class":49},"(scores)\n",[36,164432,164433,164435,164437,164439,164442,164444,164447,164449,164451,164453],{"class":38,"line":2061},[36,164434,199],{"class":60},[36,164436,901],{"class":49},[36,164438,949],{"class":53},[36,164440,164441],{"class":998},"\"平均分:",[36,164443,1775],{"class":60},[36,164445,164446],{"class":49},"avg",[36,164448,157803],{"class":53},[36,164450,1825],{"class":60},[36,164452,1141],{"class":998},[36,164454,75],{"class":49},[21,164456,164458],{"id":164457},"_66-元组tuple","6.6 元组tuple",[14,164460,164461],{},"元组和列表类似，但不可修改。",[26,164463,164465],{"className":28,"code":164464,"language":30,"meta":31,"style":31},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[33,164466,164467,164484],{"__ignoreMap":31},[36,164468,164469,164472,164474,164476,164478,164480,164482],{"class":38,"line":39},[36,164470,164471],{"class":49},"point ",[36,164473,54],{"class":53},[36,164475,2408],{"class":49},[36,164477,332],{"class":60},[36,164479,154],{"class":49},[36,164481,72],{"class":60},[36,164483,75],{"class":49},[36,164485,164486,164488,164490,164492,164494,164496,164498,164500,164502],{"class":38,"line":46},[36,164487,116958],{"class":49},[36,164489,54],{"class":53},[36,164491,2408],{"class":49},[36,164493,150532],{"class":998},[36,164495,154],{"class":49},[36,164497,1532],{"class":60},[36,164499,154],{"class":49},[36,164501,70011],{"class":998},[36,164503,75],{"class":49},[14,164505,164506],{},"单元素元组必须加逗号：",[26,164508,164510],{"className":28,"code":164509,"language":30,"meta":31,"style":31},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[33,164511,164512,164526,164539,164543,164557],{"__ignoreMap":31},[36,164513,164514,164517,164519,164521,164523],{"class":38,"line":39},[36,164515,164516],{"class":49},"t1 ",[36,164518,54],{"class":53},[36,164520,2408],{"class":49},[36,164522,332],{"class":60},[36,164524,164525],{"class":49},",)\n",[36,164527,164528,164531,164533,164535,164537],{"class":38,"line":46},[36,164529,164530],{"class":49},"t2 ",[36,164532,54],{"class":53},[36,164534,2408],{"class":49},[36,164536,332],{"class":60},[36,164538,75],{"class":49},[36,164540,164541],{"class":38,"line":78},[36,164542,194],{"emptyLinePlaceholder":193},[36,164544,164545,164547,164549,164551,164554],{"class":38,"line":125},[36,164546,199],{"class":60},[36,164548,901],{"class":49},[36,164550,103751],{"class":60},[36,164552,164553],{"class":49},"(t1))  ",[36,164555,164556],{"class":42},"# tuple\n",[36,164558,164559,164561,164563,164565,164568],{"class":38,"line":131},[36,164560,199],{"class":60},[36,164562,901],{"class":49},[36,164564,103751],{"class":60},[36,164566,164567],{"class":49},"(t2))  ",[36,164569,164570],{"class":42},"# int\n",[14,164572,164573],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[21,164575,164577],{"id":164576},"_67-字符串str","6.7 字符串str",[14,164579,164580],{},"字符串也是序列，可以索引、切片和遍历。",[26,164582,164584],{"className":28,"code":164583,"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,164585,164586,164594,164598,164609,164621,164625,164636],{"__ignoreMap":31},[36,164587,164588,164590,164592],{"class":38,"line":39},[36,164589,157088],{"class":49},[36,164591,54],{"class":53},[36,164593,160325],{"class":998},[36,164595,164596],{"class":38,"line":46},[36,164597,194],{"emptyLinePlaceholder":193},[36,164599,164600,164602,164605,164607],{"class":38,"line":78},[36,164601,199],{"class":60},[36,164603,164604],{"class":49},"(text[",[36,164606,643],{"class":60},[36,164608,165],{"class":49},[36,164610,164611,164613,164615,164617,164619],{"class":38,"line":125},[36,164612,199],{"class":60},[36,164614,164604],{"class":49},[36,164616,1414],{"class":53},[36,164618,61],{"class":60},[36,164620,165],{"class":49},[36,164622,164623],{"class":38,"line":131},[36,164624,194],{"emptyLinePlaceholder":193},[36,164626,164627,164629,164631,164633],{"class":38,"line":396},[36,164628,3774],{"class":53},[36,164630,160336],{"class":49},[36,164632,26788],{"class":53},[36,164634,164635],{"class":49}," text:\n",[36,164637,164638,164640],{"class":38,"line":407},[36,164639,32041],{"class":60},[36,164641,160347],{"class":49},[14,164643,164644],{},"字符串不可变：",[26,164646,164648],{"className":28,"code":164647,"language":30,"meta":31,"style":31},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[33,164649,164650,164658],{"__ignoreMap":31},[36,164651,164652,164654,164656],{"class":38,"line":39},[36,164653,157088],{"class":49},[36,164655,54],{"class":53},[36,164657,160325],{"class":998},[36,164659,164660,164663,164665,164667,164669,164672],{"class":38,"line":46},[36,164661,164662],{"class":49},"text[",[36,164664,643],{"class":60},[36,164666,5192],{"class":49},[36,164668,54],{"class":53},[36,164670,164671],{"class":998}," \"P\"",[36,164673,164674],{"class":42},"  # 报错\n",[14,164676,164677],{},"如果要得到新字符串：",[26,164679,164681],{"className":28,"code":164680,"language":30,"meta":31,"style":31},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[33,164682,164683,164691,164709],{"__ignoreMap":31},[36,164684,164685,164687,164689],{"class":38,"line":39},[36,164686,157088],{"class":49},[36,164688,54],{"class":53},[36,164690,160325],{"class":998},[36,164692,164693,164695,164697,164699,164701,164704,164706],{"class":38,"line":46},[36,164694,157088],{"class":49},[36,164696,54],{"class":53},[36,164698,164671],{"class":998},[36,164700,46308],{"class":53},[36,164702,164703],{"class":49}," text[",[36,164705,61],{"class":60},[36,164707,164708],{"class":49},":]\n",[36,164710,164711,164713],{"class":38,"line":78},[36,164712,199],{"class":60},[36,164714,164715],{"class":49},"(text)\n",[21,164717,164719],{"id":164718},"_68-切片","6.8 切片",[14,164721,164722],{},"切片用于从序列中取一部分。",[26,164724,164726],{"className":28,"code":164725,"language":30,"meta":31,"style":31},"序列[开始:结束:步长]\n",[33,164727,164728],{"__ignoreMap":31},[36,164729,164730],{"class":38,"line":39},[36,164731,164725],{"class":49},[14,164733,164734],{},"结束位置不包含。",[26,164736,164738],{"className":28,"code":164737,"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,164739,164740,164777,164781,164800,164815,164829,164843],{"__ignoreMap":31},[36,164741,164742,164745,164747,164749,164751,164753,164755,164757,164759,164761,164763,164765,164767,164769,164771,164773,164775],{"class":38,"line":39},[36,164743,164744],{"class":49},"nums ",[36,164746,54],{"class":53},[36,164748,52968],{"class":49},[36,164750,643],{"class":60},[36,164752,154],{"class":49},[36,164754,61],{"class":60},[36,164756,154],{"class":49},[36,164758,181],{"class":60},[36,164760,154],{"class":49},[36,164762,162],{"class":60},[36,164764,154],{"class":49},[36,164766,186],{"class":60},[36,164768,154],{"class":49},[36,164770,157],{"class":60},[36,164772,154],{"class":49},[36,164774,1230],{"class":60},[36,164776,33988],{"class":49},[36,164778,164779],{"class":38,"line":46},[36,164780,194],{"emptyLinePlaceholder":193},[36,164782,164783,164785,164788,164790,164792,164794,164797],{"class":38,"line":78},[36,164784,199],{"class":60},[36,164786,164787],{"class":49},"(nums[",[36,164789,61],{"class":60},[36,164791,1738],{"class":49},[36,164793,186],{"class":60},[36,164795,164796],{"class":49},"])    ",[36,164798,164799],{"class":42},"# [1, 2, 3]\n",[36,164801,164802,164804,164807,164809,164812],{"class":38,"line":125},[36,164803,199],{"class":60},[36,164805,164806],{"class":49},"(nums[:",[36,164808,162],{"class":60},[36,164810,164811],{"class":49},"])     ",[36,164813,164814],{"class":42},"# [0, 1, 2]\n",[36,164816,164817,164819,164821,164823,164826],{"class":38,"line":131},[36,164818,199],{"class":60},[36,164820,164787],{"class":49},[36,164822,162],{"class":60},[36,164824,164825],{"class":49},":])     ",[36,164827,164828],{"class":42},"# [3, 4, 5, 6]\n",[36,164830,164831,164833,164836,164838,164840],{"class":38,"line":396},[36,164832,199],{"class":60},[36,164834,164835],{"class":49},"(nums[::",[36,164837,181],{"class":60},[36,164839,164796],{"class":49},[36,164841,164842],{"class":42},"# [0, 2, 4, 6]\n",[36,164844,164845,164847,164849,164851,164853,164856],{"class":38,"line":407},[36,164846,199],{"class":60},[36,164848,164835],{"class":49},[36,164850,1414],{"class":53},[36,164852,61],{"class":60},[36,164854,164855],{"class":49},"])   ",[36,164857,164858],{"class":42},"# 反转\n",[14,164860,164861],{},"字符串切片：",[26,164863,164865],{"className":28,"code":164864,"language":30,"meta":31,"style":31},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[33,164866,164867,164876,164890],{"__ignoreMap":31},[36,164868,164869,164871,164873],{"class":38,"line":39},[36,164870,157088],{"class":49},[36,164872,54],{"class":53},[36,164874,164875],{"class":998}," \"abcdef\"\n",[36,164877,164878,164880,164882,164884,164886,164888],{"class":38,"line":46},[36,164879,199],{"class":60},[36,164881,164604],{"class":49},[36,164883,61],{"class":60},[36,164885,1738],{"class":49},[36,164887,186],{"class":60},[36,164889,165],{"class":49},[36,164891,164892,164894,164897,164899,164901],{"class":38,"line":78},[36,164893,199],{"class":60},[36,164895,164896],{"class":49},"(text[::",[36,164898,1414],{"class":53},[36,164900,61],{"class":60},[36,164902,165],{"class":49},[21,164904,164906],{"id":164905},"_69-集合set","6.9 集合set",[14,164908,164909],{},"集合特点：",[851,164911,164912,164915,164918],{},[854,164913,164914],{},"无序。",[854,164916,164917],{},"元素不重复。",[854,164919,164920],{},"可以做交集、并集、差集。",[26,164922,164924],{"className":28,"code":164923,"language":30,"meta":31,"style":31},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[33,164925,164926,164954],{"__ignoreMap":31},[36,164927,164928,164930,164932,164934,164936,164938,164940,164942,164944,164946,164948,164950,164952],{"class":38,"line":39},[36,164929,164744],{"class":49},[36,164931,54],{"class":53},[36,164933,5197],{"class":49},[36,164935,61],{"class":60},[36,164937,154],{"class":49},[36,164939,181],{"class":60},[36,164941,154],{"class":49},[36,164943,162],{"class":60},[36,164945,154],{"class":49},[36,164947,162],{"class":60},[36,164949,154],{"class":49},[36,164951,186],{"class":60},[36,164953,2315],{"class":49},[36,164955,164956,164958],{"class":38,"line":46},[36,164957,199],{"class":60},[36,164959,164960],{"class":49},"(nums)\n",[14,164962,164963],{},"创建空集合：",[26,164965,164967],{"className":28,"code":164966,"language":30,"meta":31,"style":31},"s = set()\n",[33,164968,164969],{"__ignoreMap":31},[36,164970,164971,164973,164975,164977],{"class":38,"line":39},[36,164972,11326],{"class":49},[36,164974,54],{"class":53},[36,164976,120366],{"class":60},[36,164978,2726],{"class":49},[14,164980,9772,164981,164983],{},[33,164982,33201],{}," 是空字典，不是空集合。",[14,164985,164986],{},"集合常用操作：",[26,164988,164990],{"className":28,"code":164989,"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,164991,164992,165012,165016,165025,165034,165043],{"__ignoreMap":31},[36,164993,164994,164996,164998,165000,165002,165004,165006,165008,165010],{"class":38,"line":39},[36,164995,11326],{"class":49},[36,164997,54],{"class":53},[36,164999,5197],{"class":49},[36,165001,61],{"class":60},[36,165003,154],{"class":49},[36,165005,181],{"class":60},[36,165007,154],{"class":49},[36,165009,162],{"class":60},[36,165011,2315],{"class":49},[36,165013,165014],{"class":38,"line":46},[36,165015,194],{"emptyLinePlaceholder":193},[36,165017,165018,165021,165023],{"class":38,"line":78},[36,165019,165020],{"class":49},"s.add(",[36,165022,186],{"class":60},[36,165024,75],{"class":49},[36,165026,165027,165030,165032],{"class":38,"line":125},[36,165028,165029],{"class":49},"s.remove(",[36,165031,181],{"class":60},[36,165033,75],{"class":49},[36,165035,165036,165039,165041],{"class":38,"line":131},[36,165037,165038],{"class":49},"s.discard(",[36,165040,332],{"class":60},[36,165042,75],{"class":49},[36,165044,165045,165047,165049,165051],{"class":38,"line":396},[36,165046,199],{"class":60},[36,165048,901],{"class":49},[36,165050,8105],{"class":60},[36,165052,165053],{"class":49},"(s))\n",[14,165055,165056],{},"交并差：",[26,165058,165060],{"className":28,"code":165059,"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,165061,165062,165082,165102,165106,165121,165134],{"__ignoreMap":31},[36,165063,165064,165066,165068,165070,165072,165074,165076,165078,165080],{"class":38,"line":39},[36,165065,144],{"class":49},[36,165067,54],{"class":53},[36,165069,5197],{"class":49},[36,165071,61],{"class":60},[36,165073,154],{"class":49},[36,165075,181],{"class":60},[36,165077,154],{"class":49},[36,165079,162],{"class":60},[36,165081,2315],{"class":49},[36,165083,165084,165086,165088,165090,165092,165094,165096,165098,165100],{"class":38,"line":46},[36,165085,170],{"class":49},[36,165087,54],{"class":53},[36,165089,5197],{"class":49},[36,165091,162],{"class":60},[36,165093,154],{"class":49},[36,165095,186],{"class":60},[36,165097,154],{"class":49},[36,165099,157],{"class":60},[36,165101,2315],{"class":49},[36,165103,165104],{"class":38,"line":78},[36,165105,194],{"emptyLinePlaceholder":193},[36,165107,165108,165110,165113,165115,165118],{"class":38,"line":125},[36,165109,199],{"class":60},[36,165111,165112],{"class":49},"(a ",[36,165114,1239],{"class":53},[36,165116,165117],{"class":49}," b)  ",[36,165119,165120],{"class":42},"# 交集\n",[36,165122,165123,165125,165127,165129,165131],{"class":38,"line":131},[36,165124,199],{"class":60},[36,165126,165112],{"class":49},[36,165128,1800],{"class":53},[36,165130,165117],{"class":49},[36,165132,165133],{"class":42},"# 并集\n",[36,165135,165136,165138,165140,165142,165144],{"class":38,"line":396},[36,165137,199],{"class":60},[36,165139,165112],{"class":49},[36,165141,1414],{"class":53},[36,165143,165117],{"class":49},[36,165145,165146],{"class":42},"# 差集\n",[21,165148,165150],{"id":165149},"_610-字典dict","6.10 字典dict",[14,165152,165153],{},"字典通过 key-value 保存数据。",[26,165155,165157],{"className":28,"code":165156,"language":30,"meta":31,"style":31},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[33,165158,165159,165167,165177,165188,165198],{"__ignoreMap":31},[36,165160,165161,165163,165165],{"class":38,"line":39},[36,165162,150125],{"class":49},[36,165164,54],{"class":53},[36,165166,16316],{"class":49},[36,165168,165169,165171,165173,165175],{"class":38,"line":46},[36,165170,147664],{"class":998},[36,165172,52179],{"class":49},[36,165174,150532],{"class":998},[36,165176,32208],{"class":49},[36,165178,165179,165182,165184,165186],{"class":38,"line":78},[36,165180,165181],{"class":998},"    \"age\"",[36,165183,52179],{"class":49},[36,165185,1532],{"class":60},[36,165187,32208],{"class":49},[36,165189,165190,165193,165195],{"class":38,"line":125},[36,165191,165192],{"class":998},"    \"score\"",[36,165194,52179],{"class":49},[36,165196,165197],{"class":60},"95\n",[36,165199,165200],{"class":38,"line":131},[36,165201,2315],{"class":49},[14,165203,165204],{},"获取值：",[26,165206,165208],{"className":28,"code":165207,"language":30,"meta":31,"style":31},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[33,165209,165210,165221],{"__ignoreMap":31},[36,165211,165212,165214,165217,165219],{"class":38,"line":39},[36,165213,199],{"class":60},[36,165215,165216],{"class":49},"(student[",[36,165218,63421],{"class":998},[36,165220,165],{"class":49},[36,165222,165223,165225,165228,165230],{"class":38,"line":46},[36,165224,199],{"class":60},[36,165226,165227],{"class":49},"(student.get(",[36,165229,63421],{"class":998},[36,165231,31239],{"class":49},[14,165233,16132],{},[26,165235,165237],{"className":28,"code":165236,"language":30,"meta":31,"style":31},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[33,165238,165239,165252],{"__ignoreMap":31},[36,165240,165241,165243,165246,165249],{"class":38,"line":39},[36,165242,153503],{"class":49},[36,165244,165245],{"class":998},"\"address\"",[36,165247,165248],{"class":49},"]     ",[36,165250,165251],{"class":42},"# key不存在会报错\n",[36,165253,165254,165257,165259,165261],{"class":38,"line":46},[36,165255,165256],{"class":49},"student.get(",[36,165258,165245],{"class":998},[36,165260,14458],{"class":49},[36,165262,165263],{"class":42},"# key不存在返回None\n",[14,165265,165266],{},"设置默认值：",[26,165268,165270],{"className":28,"code":165269,"language":30,"meta":31,"style":31},"print(student.get(\"address\", \"未知\"))\n",[33,165271,165272],{"__ignoreMap":31},[36,165273,165274,165276,165278,165280,165282,165285],{"class":38,"line":39},[36,165275,199],{"class":60},[36,165277,165227],{"class":49},[36,165279,165245],{"class":998},[36,165281,154],{"class":49},[36,165283,165284],{"class":998},"\"未知\"",[36,165286,31239],{"class":49},[14,165288,165289],{},"新增和修改：",[26,165291,165293],{"className":28,"code":165292,"language":30,"meta":31,"style":31},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[33,165294,165295,165308],{"__ignoreMap":31},[36,165296,165297,165299,165301,165303,165305],{"class":38,"line":39},[36,165298,153503],{"class":49},[36,165300,69866],{"class":998},[36,165302,5192],{"class":49},[36,165304,54],{"class":53},[36,165306,165307],{"class":60}," 19\n",[36,165309,165310,165312,165314,165316,165318],{"class":38,"line":46},[36,165311,153503],{"class":49},[36,165313,165245],{"class":998},[36,165315,5192],{"class":49},[36,165317,54],{"class":53},[36,165319,165320],{"class":998}," \"北京\"\n",[14,165322,165323],{},"删除：",[26,165325,165327],{"className":28,"code":165326,"language":30,"meta":31,"style":31},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[33,165328,165329,165342,165352],{"__ignoreMap":31},[36,165330,165331,165333,165335,165338,165340],{"class":38,"line":39},[36,165332,156002],{"class":49},[36,165334,54],{"class":53},[36,165336,165337],{"class":49}," student.pop(",[36,165339,152116],{"class":998},[36,165341,75],{"class":49},[36,165343,165344,165346,165348,165350],{"class":38,"line":46},[36,165345,164027],{"class":53},[36,165347,152793],{"class":49},[36,165349,69866],{"class":998},[36,165351,33988],{"class":49},[36,165353,165354],{"class":38,"line":78},[36,165355,165356],{"class":49},"student.clear()\n",[21,165358,165360],{"id":165359},"_611-字典遍历","6.11 字典遍历",[14,165362,165363],{},"遍历 key：",[26,165365,165367],{"className":28,"code":165366,"language":30,"meta":31,"style":31},"for key in student:\n    print(key, student[key])\n",[33,165368,165369,165381],{"__ignoreMap":31},[36,165370,165371,165373,165376,165378],{"class":38,"line":39},[36,165372,3774],{"class":53},[36,165374,165375],{"class":49}," key ",[36,165377,26788],{"class":53},[36,165379,165380],{"class":49}," student:\n",[36,165382,165383,165385],{"class":38,"line":46},[36,165384,32041],{"class":60},[36,165386,165387],{"class":49},"(key, student[key])\n",[14,165389,165390],{},"遍历 value：",[26,165392,165394],{"className":28,"code":165393,"language":30,"meta":31,"style":31},"for value in student.values():\n    print(value)\n",[33,165395,165396,165408],{"__ignoreMap":31},[36,165397,165398,165400,165403,165405],{"class":38,"line":39},[36,165399,3774],{"class":53},[36,165401,165402],{"class":49}," value ",[36,165404,26788],{"class":53},[36,165406,165407],{"class":49}," student.values():\n",[36,165409,165410,165412],{"class":38,"line":46},[36,165411,32041],{"class":60},[36,165413,165414],{"class":49},"(value)\n",[14,165416,165417],{},"遍历 key 和 value：",[26,165419,165421],{"className":28,"code":165420,"language":30,"meta":31,"style":31},"for key, value in student.items():\n    print(key, value)\n",[33,165422,165423,165435],{"__ignoreMap":31},[36,165424,165425,165427,165430,165432],{"class":38,"line":39},[36,165426,3774],{"class":53},[36,165428,165429],{"class":49}," key, value ",[36,165431,26788],{"class":53},[36,165433,165434],{"class":49}," student.items():\n",[36,165436,165437,165439],{"class":38,"line":46},[36,165438,32041],{"class":60},[36,165440,165441],{"class":49},"(key, value)\n",[21,165443,165445],{"id":165444},"_612-嵌套容器","6.12 嵌套容器",[14,165447,165448],{},"列表中保存字典，是项目中最常见的结构之一。",[26,165450,165452],{"className":28,"code":165451,"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,165453,165454,165462,165490,165518,165546,165550,165554,165564],{"__ignoreMap":31},[36,165455,165456,165458,165460],{"class":38,"line":39},[36,165457,160360],{"class":49},[36,165459,54],{"class":53},[36,165461,56189],{"class":49},[36,165463,165464,165466,165468,165470,165472,165474,165476,165478,165480,165482,165484,165486,165488],{"class":38,"line":46},[36,165465,149029],{"class":49},[36,165467,63421],{"class":998},[36,165469,52179],{"class":49},[36,165471,150532],{"class":998},[36,165473,154],{"class":49},[36,165475,69866],{"class":998},[36,165477,52179],{"class":49},[36,165479,1532],{"class":60},[36,165481,154],{"class":49},[36,165483,152116],{"class":998},[36,165485,52179],{"class":49},[36,165487,1868],{"class":60},[36,165489,5678],{"class":49},[36,165491,165492,165494,165496,165498,165500,165502,165504,165506,165508,165510,165512,165514,165516],{"class":38,"line":78},[36,165493,149029],{"class":49},[36,165495,63421],{"class":998},[36,165497,52179],{"class":49},[36,165499,151580],{"class":998},[36,165501,154],{"class":49},[36,165503,69866],{"class":998},[36,165505,52179],{"class":49},[36,165507,1507],{"class":60},[36,165509,154],{"class":49},[36,165511,152116],{"class":998},[36,165513,52179],{"class":49},[36,165515,1691],{"class":60},[36,165517,5678],{"class":49},[36,165519,165520,165522,165524,165526,165528,165530,165532,165534,165536,165538,165540,165542,165544],{"class":38,"line":125},[36,165521,149029],{"class":49},[36,165523,63421],{"class":998},[36,165525,52179],{"class":49},[36,165527,160375],{"class":998},[36,165529,154],{"class":49},[36,165531,69866],{"class":998},[36,165533,52179],{"class":49},[36,165535,1557],{"class":60},[36,165537,154],{"class":49},[36,165539,152116],{"class":998},[36,165541,52179],{"class":49},[36,165543,1291],{"class":60},[36,165545,5678],{"class":49},[36,165547,165548],{"class":38,"line":131},[36,165549,33988],{"class":49},[36,165551,165552],{"class":38,"line":396},[36,165553,194],{"emptyLinePlaceholder":193},[36,165555,165556,165558,165560,165562],{"class":38,"line":407},[36,165557,3774],{"class":53},[36,165559,152781],{"class":49},[36,165561,26788],{"class":53},[36,165563,152786],{"class":49},[36,165565,165566,165568,165570,165572,165575,165577],{"class":38,"line":2061},[36,165567,32041],{"class":60},[36,165569,165216],{"class":49},[36,165571,63421],{"class":998},[36,165573,165574],{"class":49},"], student[",[36,165576,152116],{"class":998},[36,165578,165],{"class":49},[14,165580,165581],{},"统计平均分：",[26,165583,165585],{"className":28,"code":165584,"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,165586,165587,165595,165599,165609,165621,165625,165640],{"__ignoreMap":31},[36,165588,165589,165591,165593],{"class":38,"line":39},[36,165590,157904],{"class":49},[36,165592,54],{"class":53},[36,165594,48075],{"class":60},[36,165596,165597],{"class":38,"line":46},[36,165598,194],{"emptyLinePlaceholder":193},[36,165600,165601,165603,165605,165607],{"class":38,"line":78},[36,165602,3774],{"class":53},[36,165604,152781],{"class":49},[36,165606,26788],{"class":53},[36,165608,152786],{"class":49},[36,165610,165611,165613,165615,165617,165619],{"class":38,"line":125},[36,165612,159951],{"class":49},[36,165614,10224],{"class":53},[36,165616,152793],{"class":49},[36,165618,152116],{"class":998},[36,165620,33988],{"class":49},[36,165622,165623],{"class":38,"line":131},[36,165624,194],{"emptyLinePlaceholder":193},[36,165626,165627,165629,165631,165633,165635,165637],{"class":38,"line":396},[36,165628,164418],{"class":49},[36,165630,54],{"class":53},[36,165632,164423],{"class":49},[36,165634,1466],{"class":53},[36,165636,8078],{"class":60},[36,165638,165639],{"class":49},"(students)\n",[36,165641,165642,165644,165646,165648,165650,165652,165654,165656,165658,165660],{"class":38,"line":407},[36,165643,199],{"class":60},[36,165645,901],{"class":49},[36,165647,949],{"class":53},[36,165649,164441],{"class":998},[36,165651,1775],{"class":60},[36,165653,164446],{"class":49},[36,165655,157803],{"class":53},[36,165657,1825],{"class":60},[36,165659,1141],{"class":998},[36,165661,75],{"class":49},[14,165663,165664],{},"查找学生：",[26,165666,165668],{"className":28,"code":165667,"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,165669,165670,165685,165689,165699,165713,165719,165723,165729],{"__ignoreMap":31},[36,165671,165672,165674,165676,165678,165680,165683],{"class":38,"line":39},[36,165673,112222],{"class":49},[36,165675,54],{"class":53},[36,165677,61347],{"class":60},[36,165679,901],{"class":49},[36,165681,165682],{"class":998},"\"请输入学生姓名:\"",[36,165684,75],{"class":49},[36,165686,165687],{"class":38,"line":46},[36,165688,194],{"emptyLinePlaceholder":193},[36,165690,165691,165693,165695,165697],{"class":38,"line":78},[36,165692,3774],{"class":53},[36,165694,152781],{"class":49},[36,165696,26788],{"class":53},[36,165698,152786],{"class":49},[36,165700,165701,165703,165705,165707,165709,165711],{"class":38,"line":125},[36,165702,3850],{"class":53},[36,165704,152793],{"class":49},[36,165706,63421],{"class":998},[36,165708,5192],{"class":49},[36,165710,3698],{"class":53},[36,165712,161076],{"class":49},[36,165714,165715,165717],{"class":38,"line":131},[36,165716,33193],{"class":60},[36,165718,150686],{"class":49},[36,165720,165721],{"class":38,"line":396},[36,165722,32369],{"class":53},[36,165724,165725,165727],{"class":38,"line":407},[36,165726,2451],{"class":53},[36,165728,4488],{"class":49},[36,165730,165731,165733,165735,165738],{"class":38,"line":2061},[36,165732,32041],{"class":60},[36,165734,901],{"class":49},[36,165736,165737],{"class":998},"\"没有找到\"",[36,165739,75],{"class":49},[21,165741,165743],{"id":165742},"_613-容器通用操作","6.13 容器通用操作",[14,165745,165746],{},"长度：",[26,165748,165750],{"className":28,"code":165749,"language":30,"meta":31,"style":31},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[33,165751,165752,165771,165781],{"__ignoreMap":31},[36,165753,165754,165756,165759,165761,165763,165765,165767,165769],{"class":38,"line":39},[36,165755,8105],{"class":60},[36,165757,165758],{"class":49},"([",[36,165760,61],{"class":60},[36,165762,154],{"class":49},[36,165764,181],{"class":60},[36,165766,154],{"class":49},[36,165768,162],{"class":60},[36,165770,165],{"class":49},[36,165772,165773,165775,165777,165779],{"class":38,"line":46},[36,165774,8105],{"class":60},[36,165776,901],{"class":49},[36,165778,156524],{"class":998},[36,165780,75],{"class":49},[36,165782,165783,165785,165788,165790,165792,165794],{"class":38,"line":78},[36,165784,8105],{"class":60},[36,165786,165787],{"class":49},"({",[36,165789,63421],{"class":998},[36,165791,52179],{"class":49},[36,165793,150532],{"class":998},[36,165795,165796],{"class":49},"})\n",[14,165798,165799],{},"最大最小：",[26,165801,165803],{"className":28,"code":165802,"language":30,"meta":31,"style":31},"max([1, 2, 3])\nmin([1, 2, 3])\n",[33,165804,165805,165823],{"__ignoreMap":31},[36,165806,165807,165809,165811,165813,165815,165817,165819,165821],{"class":38,"line":39},[36,165808,6762],{"class":60},[36,165810,165758],{"class":49},[36,165812,61],{"class":60},[36,165814,154],{"class":49},[36,165816,181],{"class":60},[36,165818,154],{"class":49},[36,165820,162],{"class":60},[36,165822,165],{"class":49},[36,165824,165825,165828,165830,165832,165834,165836,165838,165840],{"class":38,"line":46},[36,165826,165827],{"class":60},"min",[36,165829,165758],{"class":49},[36,165831,61],{"class":60},[36,165833,154],{"class":49},[36,165835,181],{"class":60},[36,165837,154],{"class":49},[36,165839,162],{"class":60},[36,165841,165],{"class":49},[14,165843,165844],{},"求和：",[26,165846,165848],{"className":28,"code":165847,"language":30,"meta":31,"style":31},"sum([1, 2, 3])\n",[33,165849,165850],{"__ignoreMap":31},[36,165851,165852,165855,165857,165859,165861,165863,165865,165867],{"class":38,"line":39},[36,165853,165854],{"class":60},"sum",[36,165856,165758],{"class":49},[36,165858,61],{"class":60},[36,165860,154],{"class":49},[36,165862,181],{"class":60},[36,165864,154],{"class":49},[36,165866,162],{"class":60},[36,165868,165],{"class":49},[14,165870,164115],{},[26,165872,165874],{"className":28,"code":165873,"language":30,"meta":31,"style":31},"sorted([3, 1, 2])\n",[33,165875,165876],{"__ignoreMap":31},[36,165877,165878,165881,165883,165885,165887,165889,165891,165893],{"class":38,"line":39},[36,165879,165880],{"class":60},"sorted",[36,165882,165758],{"class":49},[36,165884,162],{"class":60},[36,165886,154],{"class":49},[36,165888,61],{"class":60},[36,165890,154],{"class":49},[36,165892,181],{"class":60},[36,165894,165],{"class":49},[14,165896,165897],{},"类型转换：",[26,165899,165901],{"className":28,"code":165900,"language":30,"meta":31,"style":31},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[33,165902,165903,165913,165931],{"__ignoreMap":31},[36,165904,165905,165907,165909,165911],{"class":38,"line":39},[36,165906,154714],{"class":60},[36,165908,901],{"class":49},[36,165910,156524],{"class":998},[36,165912,75],{"class":49},[36,165914,165915,165917,165919,165921,165923,165925,165927,165929],{"class":38,"line":46},[36,165916,155909],{"class":60},[36,165918,165758],{"class":49},[36,165920,61],{"class":60},[36,165922,154],{"class":49},[36,165924,181],{"class":60},[36,165926,154],{"class":49},[36,165928,162],{"class":60},[36,165930,165],{"class":49},[36,165932,165933,165935,165937,165939,165941,165943,165945,165947,165949,165951],{"class":38,"line":78},[36,165934,155934],{"class":60},[36,165936,165758],{"class":49},[36,165938,61],{"class":60},[36,165940,154],{"class":49},[36,165942,61],{"class":60},[36,165944,154],{"class":49},[36,165946,181],{"class":60},[36,165948,154],{"class":49},[36,165950,162],{"class":60},[36,165952,165],{"class":49},[14,165954,165955],{},"成员判断：",[26,165957,165959],{"className":28,"code":165958,"language":30,"meta":31,"style":31},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[33,165960,165961,165978,166002],{"__ignoreMap":31},[36,165962,165963,165965,165967,165970,165973,165976],{"class":38,"line":39},[36,165964,199],{"class":60},[36,165966,901],{"class":49},[36,165968,165969],{"class":998},"\"a\"",[36,165971,165972],{"class":53}," in",[36,165974,165975],{"class":998}," \"abc\"",[36,165977,75],{"class":49},[36,165979,165980,165982,165984,165986,165988,165990,165992,165994,165996,165998,166000],{"class":38,"line":46},[36,165981,199],{"class":60},[36,165983,901],{"class":49},[36,165985,61],{"class":60},[36,165987,165972],{"class":53},[36,165989,52968],{"class":49},[36,165991,61],{"class":60},[36,165993,154],{"class":49},[36,165995,181],{"class":60},[36,165997,154],{"class":49},[36,165999,162],{"class":60},[36,166001,165],{"class":49},[36,166003,166004,166006,166008,166010,166012,166014,166016,166018,166020],{"class":38,"line":78},[36,166005,199],{"class":60},[36,166007,901],{"class":49},[36,166009,63421],{"class":998},[36,166011,165972],{"class":53},[36,166013,5197],{"class":49},[36,166015,63421],{"class":998},[36,166017,52179],{"class":49},[36,166019,150532],{"class":998},[36,166021,165796],{"class":49},[21,166023,166025],{"id":166024},"_614-推导式","6.14 推导式",[14,166027,166028],{},"推导式用于快速生成容器。",[14,166030,166031],{},"列表推导式：",[26,166033,166035],{"className":28,"code":166034,"language":30,"meta":31,"style":31},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[33,166036,166037,166064],{"__ignoreMap":31},[36,166038,166039,166041,166043,166046,166048,166050,166052,166054,166056,166058,166060,166062],{"class":38,"line":39},[36,166040,164744],{"class":49},[36,166042,54],{"class":53},[36,166044,166045],{"class":49}," [i ",[36,166047,3774],{"class":53},[36,166049,10185],{"class":49},[36,166051,26788],{"class":53},[36,166053,33185],{"class":60},[36,166055,901],{"class":49},[36,166057,61],{"class":60},[36,166059,154],{"class":49},[36,166061,1230],{"class":60},[36,166063,97944],{"class":49},[36,166065,166066,166068],{"class":38,"line":46},[36,166067,199],{"class":60},[36,166069,164960],{"class":49},[14,166071,166072],{},"带条件：",[26,166074,166076],{"className":28,"code":166075,"language":30,"meta":31,"style":31},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[33,166077,166078,166119],{"__ignoreMap":31},[36,166079,166080,166083,166085,166087,166089,166091,166093,166095,166097,166099,166101,166103,166105,166107,166109,166111,166113,166115,166117],{"class":38,"line":39},[36,166081,166082],{"class":49},"even_nums ",[36,166084,54],{"class":53},[36,166086,166045],{"class":49},[36,166088,3774],{"class":53},[36,166090,10185],{"class":49},[36,166092,26788],{"class":53},[36,166094,33185],{"class":60},[36,166096,901],{"class":49},[36,166098,61],{"class":60},[36,166100,154],{"class":49},[36,166102,1223],{"class":60},[36,166104,14458],{"class":49},[36,166106,2281],{"class":53},[36,166108,10185],{"class":49},[36,166110,1214],{"class":53},[36,166112,15499],{"class":60},[36,166114,102203],{"class":53},[36,166116,4842],{"class":60},[36,166118,33988],{"class":49},[36,166120,166121,166123],{"class":38,"line":46},[36,166122,199],{"class":60},[36,166124,166125],{"class":49},"(even_nums)\n",[14,166127,166128],{},"字典推导式：",[26,166130,166132],{"className":28,"code":166131,"language":30,"meta":31,"style":31},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[33,166133,166134,166168],{"__ignoreMap":31},[36,166135,166136,166139,166141,166144,166146,166148,166151,166153,166155,166157,166159,166161,166163,166165],{"class":38,"line":39},[36,166137,166138],{"class":49},"squares ",[36,166140,54],{"class":53},[36,166142,166143],{"class":49}," {i: i ",[36,166145,11408],{"class":53},[36,166147,15499],{"class":60},[36,166149,166150],{"class":53}," for",[36,166152,10185],{"class":49},[36,166154,26788],{"class":53},[36,166156,33185],{"class":60},[36,166158,901],{"class":49},[36,166160,61],{"class":60},[36,166162,154],{"class":49},[36,166164,1230],{"class":60},[36,166166,166167],{"class":49},")}\n",[36,166169,166170,166172],{"class":38,"line":46},[36,166171,199],{"class":60},[36,166173,166174],{"class":49},"(squares)\n",[14,166176,166177],{},"集合推导式：",[26,166179,166181],{"className":28,"code":166180,"language":30,"meta":31,"style":31},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[33,166182,166183,166204],{"__ignoreMap":31},[36,166184,166185,166188,166190,166193,166195,166197,166199,166202],{"class":38,"line":39},[36,166186,166187],{"class":49},"chars ",[36,166189,54],{"class":53},[36,166191,166192],{"class":49}," {ch ",[36,166194,3774],{"class":53},[36,166196,160336],{"class":49},[36,166198,26788],{"class":53},[36,166200,166201],{"class":998}," \"hello\"",[36,166203,2315],{"class":49},[36,166205,166206,166208],{"class":38,"line":46},[36,166207,199],{"class":60},[36,166209,166210],{"class":49},"(chars)\n",[14,166212,166213],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[21,166215,166217],{"id":166216},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[26,166219,166221],{"className":28,"code":166220,"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,166222,166223,166231,166251,166271,166291,166311,166315,166319,166327,166341,166350,166354,166364,166376,166380,166400,166409,166413,166429,166434,166438,166452,166456,166478,166514],{"__ignoreMap":31},[36,166224,166225,166227,166229],{"class":38,"line":39},[36,166226,160360],{"class":49},[36,166228,54],{"class":53},[36,166230,56189],{"class":49},[36,166232,166233,166235,166237,166239,166241,166243,166245,166247,166249],{"class":38,"line":46},[36,166234,149029],{"class":49},[36,166236,63421],{"class":998},[36,166238,52179],{"class":49},[36,166240,150532],{"class":998},[36,166242,154],{"class":49},[36,166244,152116],{"class":998},[36,166246,52179],{"class":49},[36,166248,1868],{"class":60},[36,166250,5678],{"class":49},[36,166252,166253,166255,166257,166259,166261,166263,166265,166267,166269],{"class":38,"line":78},[36,166254,149029],{"class":49},[36,166256,63421],{"class":998},[36,166258,52179],{"class":49},[36,166260,151580],{"class":998},[36,166262,154],{"class":49},[36,166264,152116],{"class":998},[36,166266,52179],{"class":49},[36,166268,1691],{"class":60},[36,166270,5678],{"class":49},[36,166272,166273,166275,166277,166279,166281,166283,166285,166287,166289],{"class":38,"line":125},[36,166274,149029],{"class":49},[36,166276,63421],{"class":998},[36,166278,52179],{"class":49},[36,166280,160375],{"class":998},[36,166282,154],{"class":49},[36,166284,152116],{"class":998},[36,166286,52179],{"class":49},[36,166288,1291],{"class":60},[36,166290,5678],{"class":49},[36,166292,166293,166295,166297,166299,166301,166303,166305,166307,166309],{"class":38,"line":131},[36,166294,149029],{"class":49},[36,166296,63421],{"class":998},[36,166298,52179],{"class":49},[36,166300,163954],{"class":998},[36,166302,154],{"class":49},[36,166304,152116],{"class":998},[36,166306,52179],{"class":49},[36,166308,1761],{"class":60},[36,166310,5678],{"class":49},[36,166312,166313],{"class":38,"line":396},[36,166314,33988],{"class":49},[36,166316,166317],{"class":38,"line":407},[36,166318,194],{"emptyLinePlaceholder":193},[36,166320,166321,166323,166325],{"class":38,"line":2061},[36,166322,157904],{"class":49},[36,166324,54],{"class":53},[36,166326,48075],{"class":60},[36,166328,166329,166332,166334,166337,166339],{"class":38,"line":2067},[36,166330,166331],{"class":49},"max_student ",[36,166333,54],{"class":53},[36,166335,166336],{"class":49}," students[",[36,166338,643],{"class":60},[36,166340,33988],{"class":49},[36,166342,166343,166346,166348],{"class":38,"line":2079},[36,166344,166345],{"class":49},"passed ",[36,166347,54],{"class":53},[36,166349,52580],{"class":49},[36,166351,166352],{"class":38,"line":2362},[36,166353,194],{"emptyLinePlaceholder":193},[36,166355,166356,166358,166360,166362],{"class":38,"line":2367},[36,166357,3774],{"class":53},[36,166359,152781],{"class":49},[36,166361,26788],{"class":53},[36,166363,152786],{"class":49},[36,166365,166366,166368,166370,166372,166374],{"class":38,"line":2373},[36,166367,159951],{"class":49},[36,166369,10224],{"class":53},[36,166371,152793],{"class":49},[36,166373,152116],{"class":998},[36,166375,33988],{"class":49},[36,166377,166378],{"class":38,"line":2378},[36,166379,194],{"emptyLinePlaceholder":193},[36,166381,166382,166384,166386,166388,166390,166392,166395,166397],{"class":38,"line":2392},[36,166383,3850],{"class":53},[36,166385,152793],{"class":49},[36,166387,152116],{"class":998},[36,166389,5192],{"class":49},[36,166391,1839],{"class":53},[36,166393,166394],{"class":49}," max_student[",[36,166396,152116],{"class":998},[36,166398,166399],{"class":49},"]:\n",[36,166401,166402,166405,166407],{"class":38,"line":2397},[36,166403,166404],{"class":49},"        max_student ",[36,166406,54],{"class":53},[36,166408,152809],{"class":49},[36,166410,166411],{"class":38,"line":2403},[36,166412,194],{"emptyLinePlaceholder":193},[36,166414,166415,166417,166419,166421,166423,166425,166427],{"class":38,"line":2424},[36,166416,3850],{"class":53},[36,166418,152793],{"class":49},[36,166420,152116],{"class":998},[36,166422,5192],{"class":49},[36,166424,2460],{"class":53},[36,166426,158481],{"class":60},[36,166428,4488],{"class":49},[36,166430,166431],{"class":38,"line":2429},[36,166432,166433],{"class":49},"        passed.append(student)\n",[36,166435,166436],{"class":38,"line":2443},[36,166437,194],{"emptyLinePlaceholder":193},[36,166439,166440,166442,166444,166446,166448,166450],{"class":38,"line":2448},[36,166441,164418],{"class":49},[36,166443,54],{"class":53},[36,166445,164423],{"class":49},[36,166447,1466],{"class":53},[36,166449,8078],{"class":60},[36,166451,165639],{"class":49},[36,166453,166454],{"class":38,"line":2477},[36,166455,194],{"emptyLinePlaceholder":193},[36,166457,166458,166460,166462,166464,166466,166468,166470,166472,166474,166476],{"class":38,"line":2482},[36,166459,199],{"class":60},[36,166461,901],{"class":49},[36,166463,949],{"class":53},[36,166465,164441],{"class":998},[36,166467,1775],{"class":60},[36,166469,164446],{"class":49},[36,166471,157803],{"class":53},[36,166473,1825],{"class":60},[36,166475,1141],{"class":998},[36,166477,75],{"class":49},[36,166479,166480,166482,166484,166486,166489,166491,166494,166496,166498,166500,166502,166504,166506,166508,166510,166512],{"class":38,"line":2499},[36,166481,199],{"class":60},[36,166483,901],{"class":49},[36,166485,949],{"class":53},[36,166487,166488],{"class":998},"\"最高分学生:",[36,166490,1775],{"class":60},[36,166492,166493],{"class":49},"max_student[",[36,166495,153526],{"class":998},[36,166497,1819],{"class":49},[36,166499,1825],{"class":60},[36,166501,5197],{"class":60},[36,166503,166493],{"class":49},[36,166505,153564],{"class":998},[36,166507,1819],{"class":49},[36,166509,1825],{"class":60},[36,166511,1141],{"class":998},[36,166513,75],{"class":49},[36,166515,166516,166518,166520,166522,166525,166528,166531,166533,166535],{"class":38,"line":2504},[36,166517,199],{"class":60},[36,166519,901],{"class":49},[36,166521,949],{"class":53},[36,166523,166524],{"class":998},"\"及格人数:",[36,166526,166527],{"class":60},"{len",[36,166529,166530],{"class":49},"(passed)",[36,166532,1825],{"class":60},[36,166534,1141],{"class":998},[36,166536,75],{"class":49},[21,166538,166540],{"id":166539},"_616-易错点","6.16 易错点",[851,166542,166543,166546,166549,166552,166558,166567],{},[854,166544,166545],{},"列表可变，元组和字符串不可变。",[854,166547,166548],{},"切片结束位置不包含。",[854,166550,166551],{},"字典通过 key 取值，不是通过索引。",[854,166553,166554,166555,29130],{},"空集合要用 ",[33,166556,166557],{},"set()",[854,166559,105010,166560,166563,166564,29130],{},[33,166561,166562],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[33,166565,166566],{},"get()",[854,166568,166569],{},"嵌套容器要先看清楚每一层是什么类型。",[21,166571,166573],{"id":166572},"_617-本章练习","6.17 本章练习",[851,166575,166576,166579,166582,166585,166588],{},[854,166577,166578],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[854,166580,166581],{},"输入一句话，统计每个字符出现次数。",[854,166583,166584],{},"使用集合去除列表中的重复元素。",[854,166586,166587],{},"使用字典保存一个学生的信息，并实现修改成绩。",[854,166589,166590],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[807,166592,166593],{},"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":46,"depth":46,"links":166595},[166596,166597,166598,166599,166600,166601,166602,166603,166604,166605,166606,166607,166608,166609,166610,166611,166612],{"id":163576,"depth":46,"text":163577},{"id":163693,"depth":46,"text":163694},{"id":163783,"depth":46,"text":163784},{"id":163907,"depth":46,"text":163908},{"id":164270,"depth":46,"text":164271},{"id":164457,"depth":46,"text":164458},{"id":164576,"depth":46,"text":164577},{"id":164718,"depth":46,"text":164719},{"id":164905,"depth":46,"text":164906},{"id":165149,"depth":46,"text":165150},{"id":165359,"depth":46,"text":165360},{"id":165444,"depth":46,"text":165445},{"id":165742,"depth":46,"text":165743},{"id":166024,"depth":46,"text":166025},{"id":166216,"depth":46,"text":166217},{"id":166539,"depth":46,"text":166540},{"id":166572,"depth":46,"text":166573},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163568,"description":823},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166619,"title":166620,"body":166621,"description":823,"extension":824,"meta":168793,"navigation":193,"path":168794,"seo":168795,"stem":168796,"__hash__":168797},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166622,"toc":168768},[166623,166626,166630,166633,166713,166716,166737,166740,166744,166747,166809,166812,166829,166833,166836,166881,166883,166891,166895,166898,166980,166983,166986,167011,167014,167037,167041,167044,167046,167108,167111,167113,167164,167168,167172,167178,167283,167287,167293,167364,167368,167371,167439,167442,167522,167526,167532,167568,167571,167574,167684,167690,167694,167697,167769,167772,167776,167780,167785,167847,167851,167856,167924,167928,167933,168049,168053,168056,168136,168139,168143,168146,168250,168252,168267,168270,168274,168412,168420,168424,168426,168437,168439,168697,168701,168733,168737,168765],[10,166624,166620],{"id":166625},"_7-函数进阶",[21,166627,166629],{"id":166628},"_71-多返回值","7.1 多返回值",[14,166631,166632],{},"Python 函数可以返回多个值，本质上返回的是元组。",[26,166634,166636],{"className":28,"code":166635,"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,166637,166638,166647,166655,166663,166672,166679,166683,166687,166696,166702],{"__ignoreMap":31},[36,166639,166640,166642,166645],{"class":38,"line":39},[36,166641,32689],{"class":53},[36,166643,166644],{"class":2713}," get_info",[36,166646,32695],{"class":49},[36,166648,166649,166651,166653],{"class":38,"line":46},[36,166650,153014],{"class":49},[36,166652,54],{"class":53},[36,166654,149997],{"class":998},[36,166656,166657,166659,166661],{"class":38,"line":78},[36,166658,153030],{"class":49},[36,166660,54],{"class":53},[36,166662,147195],{"class":60},[36,166664,166665,166667,166669],{"class":38,"line":125},[36,166666,153045],{"class":49},[36,166668,54],{"class":53},[36,166670,166671],{"class":60}," 95\n",[36,166673,166674,166676],{"class":38,"line":131},[36,166675,4839],{"class":53},[36,166677,166678],{"class":49}," name, age, score\n",[36,166680,166681],{"class":38,"line":396},[36,166682,194],{"emptyLinePlaceholder":193},[36,166684,166685],{"class":38,"line":407},[36,166686,194],{"emptyLinePlaceholder":193},[36,166688,166689,166691,166693],{"class":38,"line":2061},[36,166690,161950],{"class":49},[36,166692,54],{"class":53},[36,166694,166695],{"class":49}," get_info()\n",[36,166697,166698,166700],{"class":38,"line":2067},[36,166699,199],{"class":60},[36,166701,77327],{"class":49},[36,166703,166704,166706,166708,166710],{"class":38,"line":2079},[36,166705,199],{"class":60},[36,166707,901],{"class":49},[36,166709,103751],{"class":60},[36,166711,166712],{"class":49},"(result))\n",[14,166714,166715],{},"可以直接解包：",[26,166717,166719],{"className":28,"code":166718,"language":30,"meta":31,"style":31},"name, age, score = get_info()\nprint(name, age, score)\n",[33,166720,166721,166730],{"__ignoreMap":31},[36,166722,166723,166726,166728],{"class":38,"line":39},[36,166724,166725],{"class":49},"name, age, score ",[36,166727,54],{"class":53},[36,166729,166695],{"class":49},[36,166731,166732,166734],{"class":38,"line":46},[36,166733,199],{"class":60},[36,166735,166736],{"class":49},"(name, age, score)\n",[14,166738,166739],{},"返回多个值适合函数需要同时给出多个结果时使用。",[21,166741,166743],{"id":166742},"_72-位置参数","7.2 位置参数",[14,166745,166746],{},"位置参数按顺序传递。",[26,166748,166750],{"className":28,"code":166749,"language":30,"meta":31,"style":31},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[33,166751,166752,166760,166788,166792,166796],{"__ignoreMap":31},[36,166753,166754,166756,166758],{"class":38,"line":39},[36,166755,32689],{"class":53},[36,166757,150016],{"class":2713},[36,166759,150019],{"class":49},[36,166761,166762,166764,166766,166768,166770,166772,166774,166776,166778,166780,166782,166784,166786],{"class":38,"line":46},[36,166763,32041],{"class":60},[36,166765,901],{"class":49},[36,166767,949],{"class":53},[36,166769,150030],{"class":998},[36,166771,1775],{"class":60},[36,166773,80552],{"class":49},[36,166775,1825],{"class":60},[36,166777,150039],{"class":998},[36,166779,1775],{"class":60},[36,166781,70963],{"class":49},[36,166783,1825],{"class":60},[36,166785,150048],{"class":998},[36,166787,75],{"class":49},[36,166789,166790],{"class":38,"line":78},[36,166791,194],{"emptyLinePlaceholder":193},[36,166793,166794],{"class":38,"line":125},[36,166795,194],{"emptyLinePlaceholder":193},[36,166797,166798,166801,166803,166805,166807],{"class":38,"line":131},[36,166799,166800],{"class":49},"introduce(",[36,166802,150532],{"class":998},[36,166804,154],{"class":49},[36,166806,1532],{"class":60},[36,166808,75],{"class":49},[14,166810,166811],{},"顺序错了就会得到错误含义：",[26,166813,166815],{"className":28,"code":166814,"language":30,"meta":31,"style":31},"introduce(18, \"小明\")\n",[33,166816,166817],{"__ignoreMap":31},[36,166818,166819,166821,166823,166825,166827],{"class":38,"line":39},[36,166820,166800],{"class":49},[36,166822,1532],{"class":60},[36,166824,154],{"class":49},[36,166826,150532],{"class":998},[36,166828,75],{"class":49},[21,166830,166832],{"id":166831},"_73-关键字参数","7.3 关键字参数",[14,166834,166835],{},"关键字参数按参数名传递。",[26,166837,166839],{"className":28,"code":166838,"language":30,"meta":31,"style":31},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[33,166840,166841,166861],{"__ignoreMap":31},[36,166842,166843,166845,166847,166849,166851,166853,166855,166857,166859],{"class":38,"line":39},[36,166844,166800],{"class":49},[36,166846,80552],{"class":416},[36,166848,54],{"class":53},[36,166850,150532],{"class":998},[36,166852,154],{"class":49},[36,166854,70963],{"class":416},[36,166856,54],{"class":53},[36,166858,1532],{"class":60},[36,166860,75],{"class":49},[36,166862,166863,166865,166867,166869,166871,166873,166875,166877,166879],{"class":38,"line":46},[36,166864,166800],{"class":49},[36,166866,70963],{"class":416},[36,166868,54],{"class":53},[36,166870,1532],{"class":60},[36,166872,154],{"class":49},[36,166874,80552],{"class":416},[36,166876,54],{"class":53},[36,166878,150532],{"class":998},[36,166880,75],{"class":49},[14,166882,118578],{},[851,166884,166885,166888],{},[854,166886,166887],{},"顺序不容易错。",[854,166889,166890],{},"调用时可读性更强。",[21,166892,166894],{"id":166893},"_74-默认参数","7.4 默认参数",[14,166896,166897],{},"默认参数给参数设置默认值。",[26,166899,166901],{"className":28,"code":166900,"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,166902,166903,166919,166949,166953,166957,166967],{"__ignoreMap":31},[36,166904,166905,166907,166909,166912,166914,166917],{"class":38,"line":39},[36,166906,32689],{"class":53},[36,166908,122737],{"class":2713},[36,166910,166911],{"class":49},"(host, port",[36,166913,54],{"class":53},[36,166915,166916],{"class":60},"3306",[36,166918,31528],{"class":49},[36,166920,166921,166923,166925,166927,166930,166932,166934,166936,166938,166940,166943,166945,166947],{"class":38,"line":46},[36,166922,32041],{"class":60},[36,166924,901],{"class":49},[36,166926,949],{"class":53},[36,166928,166929],{"class":998},"\"连接",[36,166931,1775],{"class":60},[36,166933,28140],{"class":49},[36,166935,1825],{"class":60},[36,166937,1738],{"class":998},[36,166939,1775],{"class":60},[36,166941,166942],{"class":49},"port",[36,166944,1825],{"class":60},[36,166946,1141],{"class":998},[36,166948,75],{"class":49},[36,166950,166951],{"class":38,"line":78},[36,166952,194],{"emptyLinePlaceholder":193},[36,166954,166955],{"class":38,"line":125},[36,166956,194],{"emptyLinePlaceholder":193},[36,166958,166959,166962,166965],{"class":38,"line":131},[36,166960,166961],{"class":49},"connect(",[36,166963,166964],{"class":998},"\"localhost\"",[36,166966,75],{"class":49},[36,166968,166969,166971,166973,166975,166978],{"class":38,"line":396},[36,166970,166961],{"class":49},[36,166972,166964],{"class":998},[36,166974,154],{"class":49},[36,166976,166977],{"class":60},"6379",[36,166979,75],{"class":49},[14,166981,166982],{},"注意：默认参数必须放在非默认参数后面。",[14,166984,166985],{},"错误：",[26,166987,166989],{"className":28,"code":166988,"language":30,"meta":31,"style":31},"def connect(port=3306, host):\n    pass\n",[33,166990,166991,167007],{"__ignoreMap":31},[36,166992,166993,166995,166997,167000,167002,167004],{"class":38,"line":39},[36,166994,32689],{"class":53},[36,166996,122737],{"class":2713},[36,166998,166999],{"class":49},"(port",[36,167001,54],{"class":53},[36,167003,166916],{"class":60},[36,167005,167006],{"class":49},", host):\n",[36,167008,167009],{"class":38,"line":46},[36,167010,150181],{"class":53},[14,167012,167013],{},"正确：",[26,167015,167017],{"className":28,"code":167016,"language":30,"meta":31,"style":31},"def connect(host, port=3306):\n    pass\n",[33,167018,167019,167033],{"__ignoreMap":31},[36,167020,167021,167023,167025,167027,167029,167031],{"class":38,"line":39},[36,167022,32689],{"class":53},[36,167024,122737],{"class":2713},[36,167026,166911],{"class":49},[36,167028,54],{"class":53},[36,167030,166916],{"class":60},[36,167032,31528],{"class":49},[36,167034,167035],{"class":38,"line":46},[36,167036,150181],{"class":53},[21,167038,167040],{"id":167039},"_75-默认参数的坑","7.5 默认参数的坑",[14,167042,167043],{},"不要使用可变对象作为默认参数。",[14,167045,158267],{},[26,167047,167049],{"className":28,"code":167048,"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,167050,167051,167066,167071,167078,167082,167086,167097],{"__ignoreMap":31},[36,167052,167053,167055,167058,167061,167063],{"class":38,"line":39},[36,167054,32689],{"class":53},[36,167056,167057],{"class":2713}," add_item",[36,167059,167060],{"class":49},"(item, items",[36,167062,54],{"class":53},[36,167064,167065],{"class":49},"[]):\n",[36,167067,167068],{"class":38,"line":46},[36,167069,167070],{"class":49},"    items.append(item)\n",[36,167072,167073,167075],{"class":38,"line":78},[36,167074,4839],{"class":53},[36,167076,167077],{"class":49}," items\n",[36,167079,167080],{"class":38,"line":125},[36,167081,194],{"emptyLinePlaceholder":193},[36,167083,167084],{"class":38,"line":131},[36,167085,194],{"emptyLinePlaceholder":193},[36,167087,167088,167090,167093,167095],{"class":38,"line":396},[36,167089,199],{"class":60},[36,167091,167092],{"class":49},"(add_item(",[36,167094,165969],{"class":998},[36,167096,31239],{"class":49},[36,167098,167099,167101,167103,167106],{"class":38,"line":407},[36,167100,199],{"class":60},[36,167102,167092],{"class":49},[36,167104,167105],{"class":998},"\"b\"",[36,167107,31239],{"class":49},[14,167109,167110],{},"第二次调用会复用第一次的列表。",[14,167112,156532],{},[26,167114,167116],{"className":28,"code":167115,"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,167117,167118,167132,167145,167154,167158],{"__ignoreMap":31},[36,167119,167120,167122,167124,167126,167128,167130],{"class":38,"line":39},[36,167121,32689],{"class":53},[36,167123,167057],{"class":2713},[36,167125,167060],{"class":49},[36,167127,54],{"class":53},[36,167129,96330],{"class":60},[36,167131,31528],{"class":49},[36,167133,167134,167136,167139,167141,167143],{"class":38,"line":46},[36,167135,3850],{"class":53},[36,167137,167138],{"class":49}," items ",[36,167140,39669],{"class":53},[36,167142,39675],{"class":60},[36,167144,4488],{"class":49},[36,167146,167147,167150,167152],{"class":38,"line":78},[36,167148,167149],{"class":49},"        items ",[36,167151,54],{"class":53},[36,167153,52580],{"class":49},[36,167155,167156],{"class":38,"line":125},[36,167157,167070],{"class":49},[36,167159,167160,167162],{"class":38,"line":131},[36,167161,4839],{"class":53},[36,167163,167077],{"class":49},[21,167165,167167],{"id":167166},"_76-不定长参数","7.6 不定长参数",[868,167169,167171],{"id":167170},"_761-args","7.6.1 *args",[14,167173,167174,167177],{},[33,167175,167176],{},"*args"," 接收任意数量的位置参数，得到元组。",[26,167179,167181],{"className":28,"code":167180,"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,167182,167183,167196,167204,167215,167224,167230,167234,167238,167257],{"__ignoreMap":31},[36,167184,167185,167187,167189,167191,167193],{"class":38,"line":39},[36,167186,32689],{"class":53},[36,167188,5957],{"class":2713},[36,167190,901],{"class":49},[36,167192,1339],{"class":53},[36,167194,167195],{"class":49},"args):\n",[36,167197,167198,167200,167202],{"class":38,"line":46},[36,167199,159951],{"class":49},[36,167201,54],{"class":53},[36,167203,48075],{"class":60},[36,167205,167206,167208,167210,167212],{"class":38,"line":78},[36,167207,3950],{"class":53},[36,167209,156824],{"class":49},[36,167211,26788],{"class":53},[36,167213,167214],{"class":49}," args:\n",[36,167216,167217,167219,167221],{"class":38,"line":125},[36,167218,160626],{"class":49},[36,167220,10224],{"class":53},[36,167222,167223],{"class":49}," num\n",[36,167225,167226,167228],{"class":38,"line":131},[36,167227,4839],{"class":53},[36,167229,162931],{"class":49},[36,167231,167232],{"class":38,"line":396},[36,167233,194],{"emptyLinePlaceholder":193},[36,167235,167236],{"class":38,"line":407},[36,167237,194],{"emptyLinePlaceholder":193},[36,167239,167240,167242,167245,167247,167249,167251,167253,167255],{"class":38,"line":2061},[36,167241,199],{"class":60},[36,167243,167244],{"class":49},"(add(",[36,167246,61],{"class":60},[36,167248,154],{"class":49},[36,167250,181],{"class":60},[36,167252,154],{"class":49},[36,167254,162],{"class":60},[36,167256,31239],{"class":49},[36,167258,167259,167261,167263,167265,167267,167269,167271,167273,167275,167277,167279,167281],{"class":38,"line":2067},[36,167260,199],{"class":60},[36,167262,167244],{"class":49},[36,167264,61],{"class":60},[36,167266,154],{"class":49},[36,167268,181],{"class":60},[36,167270,154],{"class":49},[36,167272,162],{"class":60},[36,167274,154],{"class":49},[36,167276,186],{"class":60},[36,167278,154],{"class":49},[36,167280,157],{"class":60},[36,167282,31239],{"class":49},[868,167284,167286],{"id":167285},"_762-kwargs","7.6.2 **kwargs",[14,167288,167289,167292],{},[33,167290,167291],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[26,167294,167296],{"className":28,"code":167295,"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,167297,167298,167311,167322,167328,167332,167336],{"__ignoreMap":31},[36,167299,167300,167302,167304,167306,167308],{"class":38,"line":39},[36,167301,32689],{"class":53},[36,167303,162589],{"class":2713},[36,167305,901],{"class":49},[36,167307,11408],{"class":53},[36,167309,167310],{"class":49},"kwargs):\n",[36,167312,167313,167315,167317,167319],{"class":38,"line":46},[36,167314,3950],{"class":53},[36,167316,165429],{"class":49},[36,167318,26788],{"class":53},[36,167320,167321],{"class":49}," kwargs.items():\n",[36,167323,167324,167326],{"class":38,"line":78},[36,167325,33193],{"class":60},[36,167327,165441],{"class":49},[36,167329,167330],{"class":38,"line":125},[36,167331,194],{"emptyLinePlaceholder":193},[36,167333,167334],{"class":38,"line":131},[36,167335,194],{"emptyLinePlaceholder":193},[36,167337,167338,167340,167342,167344,167346,167348,167350,167352,167354,167356,167358,167360,167362],{"class":38,"line":396},[36,167339,162654],{"class":49},[36,167341,80552],{"class":416},[36,167343,54],{"class":53},[36,167345,150532],{"class":998},[36,167347,154],{"class":49},[36,167349,70963],{"class":416},[36,167351,54],{"class":53},[36,167353,1532],{"class":60},[36,167355,154],{"class":49},[36,167357,71014],{"class":416},[36,167359,54],{"class":53},[36,167361,70011],{"class":998},[36,167363,75],{"class":49},[21,167365,167367],{"id":167366},"_77-参数解包","7.7 参数解包",[14,167369,167370],{},"列表或元组解包为位置参数：",[26,167372,167374],{"className":28,"code":167373,"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,167375,167376,167385,167400,167404,167408,167428],{"__ignoreMap":31},[36,167377,167378,167380,167382],{"class":38,"line":39},[36,167379,32689],{"class":53},[36,167381,5957],{"class":2713},[36,167383,167384],{"class":49},"(a, b, c):\n",[36,167386,167387,167389,167391,167393,167395,167397],{"class":38,"line":46},[36,167388,4839],{"class":53},[36,167390,11616],{"class":49},[36,167392,1365],{"class":53},[36,167394,11629],{"class":49},[36,167396,1365],{"class":53},[36,167398,167399],{"class":49}," c\n",[36,167401,167402],{"class":38,"line":78},[36,167403,194],{"emptyLinePlaceholder":193},[36,167405,167406],{"class":38,"line":125},[36,167407,194],{"emptyLinePlaceholder":193},[36,167409,167410,167412,167414,167416,167418,167420,167422,167424,167426],{"class":38,"line":131},[36,167411,164744],{"class":49},[36,167413,54],{"class":53},[36,167415,52968],{"class":49},[36,167417,61],{"class":60},[36,167419,154],{"class":49},[36,167421,181],{"class":60},[36,167423,154],{"class":49},[36,167425,162],{"class":60},[36,167427,33988],{"class":49},[36,167429,167430,167432,167434,167436],{"class":38,"line":396},[36,167431,199],{"class":60},[36,167433,167244],{"class":49},[36,167435,1339],{"class":53},[36,167437,167438],{"class":49},"nums))\n",[14,167440,167441],{},"字典解包为关键字参数：",[26,167443,167445],{"className":28,"code":167444,"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,167446,167447,167455,167481,167485,167489,167513],{"__ignoreMap":31},[36,167448,167449,167451,167453],{"class":38,"line":39},[36,167450,32689],{"class":53},[36,167452,150016],{"class":2713},[36,167454,150019],{"class":49},[36,167456,167457,167459,167461,167463,167465,167467,167469,167471,167473,167475,167477,167479],{"class":38,"line":46},[36,167458,32041],{"class":60},[36,167460,901],{"class":49},[36,167462,949],{"class":53},[36,167464,1141],{"class":998},[36,167466,1775],{"class":60},[36,167468,80552],{"class":49},[36,167470,1825],{"class":60},[36,167472,5197],{"class":60},[36,167474,70963],{"class":49},[36,167476,1825],{"class":60},[36,167478,1141],{"class":998},[36,167480,75],{"class":49},[36,167482,167483],{"class":38,"line":78},[36,167484,194],{"emptyLinePlaceholder":193},[36,167486,167487],{"class":38,"line":125},[36,167488,194],{"emptyLinePlaceholder":193},[36,167490,167491,167493,167495,167497,167499,167501,167503,167505,167507,167509,167511],{"class":38,"line":131},[36,167492,116958],{"class":49},[36,167494,54],{"class":53},[36,167496,5197],{"class":49},[36,167498,63421],{"class":998},[36,167500,52179],{"class":49},[36,167502,150532],{"class":998},[36,167504,154],{"class":49},[36,167506,69866],{"class":998},[36,167508,52179],{"class":49},[36,167510,1532],{"class":60},[36,167512,2315],{"class":49},[36,167514,167515,167517,167519],{"class":38,"line":396},[36,167516,166800],{"class":49},[36,167518,11408],{"class":53},[36,167520,167521],{"class":49},"info)\n",[21,167523,167525],{"id":167524},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,167527,167528,167531],{},[33,167529,167530],{},"lambda"," 用于定义简单匿名函数。",[26,167533,167535],{"className":28,"code":167534,"language":30,"meta":31,"style":31},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[33,167536,167537,167554],{"__ignoreMap":31},[36,167538,167539,167542,167544,167547,167550,167552],{"class":38,"line":39},[36,167540,167541],{"class":49},"add ",[36,167543,54],{"class":53},[36,167545,167546],{"class":53}," lambda",[36,167548,167549],{"class":49}," a, b: a ",[36,167551,1365],{"class":53},[36,167553,151748],{"class":49},[36,167555,167556,167558,167560,167562,167564,167566],{"class":38,"line":46},[36,167557,199],{"class":60},[36,167559,167244],{"class":49},[36,167561,61],{"class":60},[36,167563,154],{"class":49},[36,167565,181],{"class":60},[36,167567,31239],{"class":49},[14,167569,167570],{},"常和排序、过滤等函数一起使用。",[14,167572,167573],{},"按分数排序：",[26,167575,167577],{"className":28,"code":167576,"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,167578,167579,167587,167607,167627,167647,167651,167655,167678],{"__ignoreMap":31},[36,167580,167581,167583,167585],{"class":38,"line":39},[36,167582,160360],{"class":49},[36,167584,54],{"class":53},[36,167586,56189],{"class":49},[36,167588,167589,167591,167593,167595,167597,167599,167601,167603,167605],{"class":38,"line":46},[36,167590,149029],{"class":49},[36,167592,63421],{"class":998},[36,167594,52179],{"class":49},[36,167596,150532],{"class":998},[36,167598,154],{"class":49},[36,167600,152116],{"class":998},[36,167602,52179],{"class":49},[36,167604,1868],{"class":60},[36,167606,5678],{"class":49},[36,167608,167609,167611,167613,167615,167617,167619,167621,167623,167625],{"class":38,"line":78},[36,167610,149029],{"class":49},[36,167612,63421],{"class":998},[36,167614,52179],{"class":49},[36,167616,151580],{"class":998},[36,167618,154],{"class":49},[36,167620,152116],{"class":998},[36,167622,52179],{"class":49},[36,167624,1691],{"class":60},[36,167626,5678],{"class":49},[36,167628,167629,167631,167633,167635,167637,167639,167641,167643,167645],{"class":38,"line":125},[36,167630,149029],{"class":49},[36,167632,63421],{"class":998},[36,167634,52179],{"class":49},[36,167636,160375],{"class":998},[36,167638,154],{"class":49},[36,167640,152116],{"class":998},[36,167642,52179],{"class":49},[36,167644,1291],{"class":60},[36,167646,5678],{"class":49},[36,167648,167649],{"class":38,"line":131},[36,167650,33988],{"class":49},[36,167652,167653],{"class":38,"line":396},[36,167654,194],{"emptyLinePlaceholder":193},[36,167656,167657,167660,167662,167664,167666,167668,167670,167672,167674,167676],{"class":38,"line":407},[36,167658,167659],{"class":49},"students.sort(",[36,167661,154590],{"class":416},[36,167663,154593],{"class":53},[36,167665,154596],{"class":49},[36,167667,152116],{"class":998},[36,167669,112846],{"class":49},[36,167671,164172],{"class":416},[36,167673,54],{"class":53},[36,167675,32218],{"class":60},[36,167677,75],{"class":49},[36,167679,167680,167682],{"class":38,"line":2061},[36,167681,199],{"class":60},[36,167683,165639],{"class":49},[14,167685,167686,167687,167689],{},"如果逻辑复杂，不要硬写 ",[33,167688,167530],{},"，定义普通函数更清晰。",[21,167691,167693],{"id":167692},"_79-函数作为参数","7.9 函数作为参数",[14,167695,167696],{},"函数可以作为参数传给另一个函数。",[26,167698,167700],{"className":28,"code":167699,"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,167701,167702,167710,167720,167724,167728,167738,167745,167749,167753],{"__ignoreMap":31},[36,167703,167704,167706,167708],{"class":38,"line":39},[36,167705,32689],{"class":53},[36,167707,5957],{"class":2713},[36,167709,151737],{"class":49},[36,167711,167712,167714,167716,167718],{"class":38,"line":46},[36,167713,4839],{"class":53},[36,167715,11616],{"class":49},[36,167717,1365],{"class":53},[36,167719,151748],{"class":49},[36,167721,167722],{"class":38,"line":78},[36,167723,194],{"emptyLinePlaceholder":193},[36,167725,167726],{"class":38,"line":125},[36,167727,194],{"emptyLinePlaceholder":193},[36,167729,167730,167732,167735],{"class":38,"line":131},[36,167731,32689],{"class":53},[36,167733,167734],{"class":2713}," calculate",[36,167736,167737],{"class":49},"(a, b, func):\n",[36,167739,167740,167742],{"class":38,"line":396},[36,167741,4839],{"class":53},[36,167743,167744],{"class":49}," func(a, b)\n",[36,167746,167747],{"class":38,"line":407},[36,167748,194],{"emptyLinePlaceholder":193},[36,167750,167751],{"class":38,"line":2061},[36,167752,194],{"emptyLinePlaceholder":193},[36,167754,167755,167757,167760,167762,167764,167766],{"class":38,"line":2067},[36,167756,199],{"class":60},[36,167758,167759],{"class":49},"(calculate(",[36,167761,332],{"class":60},[36,167763,154],{"class":49},[36,167765,72],{"class":60},[36,167767,167768],{"class":49},", add))\n",[14,167770,167771],{},"这种思想在排序、回调、框架中经常出现。",[21,167773,167775],{"id":167774},"_710-mapfiltersorted","7.10 map、filter、sorted",[868,167777,167779],{"id":167778},"_7101-map","7.10.1 map",[14,167781,167782,167784],{},[33,167783,74786],{}," 对每个元素执行函数。",[26,167786,167788],{"className":28,"code":167787,"language":30,"meta":31,"style":31},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[33,167789,167790,167814,167837],{"__ignoreMap":31},[36,167791,167792,167794,167796,167798,167800,167802,167804,167806,167808,167810,167812],{"class":38,"line":39},[36,167793,164744],{"class":49},[36,167795,54],{"class":53},[36,167797,52968],{"class":49},[36,167799,61],{"class":60},[36,167801,154],{"class":49},[36,167803,181],{"class":60},[36,167805,154],{"class":49},[36,167807,162],{"class":60},[36,167809,154],{"class":49},[36,167811,186],{"class":60},[36,167813,33988],{"class":49},[36,167815,167816,167818,167820,167823,167825,167827,167830,167832,167834],{"class":38,"line":46},[36,167817,161950],{"class":49},[36,167819,54],{"class":53},[36,167821,167822],{"class":60}," map",[36,167824,901],{"class":49},[36,167826,167530],{"class":53},[36,167828,167829],{"class":49}," x: x ",[36,167831,1339],{"class":53},[36,167833,15499],{"class":60},[36,167835,167836],{"class":49},", nums)\n",[36,167838,167839,167841,167843,167845],{"class":38,"line":78},[36,167840,199],{"class":60},[36,167842,901],{"class":49},[36,167844,154714],{"class":60},[36,167846,166712],{"class":49},[868,167848,167850],{"id":167849},"_7102-filter","7.10.2 filter",[14,167852,167853,167855],{},[33,167854,80793],{}," 保留满足条件的元素。",[26,167857,167859],{"className":28,"code":167858,"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,167860,167861,167889,167914],{"__ignoreMap":31},[36,167862,167863,167865,167867,167869,167871,167873,167875,167877,167879,167881,167883,167885,167887],{"class":38,"line":39},[36,167864,164744],{"class":49},[36,167866,54],{"class":53},[36,167868,52968],{"class":49},[36,167870,61],{"class":60},[36,167872,154],{"class":49},[36,167874,181],{"class":60},[36,167876,154],{"class":49},[36,167878,162],{"class":60},[36,167880,154],{"class":49},[36,167882,186],{"class":60},[36,167884,154],{"class":49},[36,167886,157],{"class":60},[36,167888,33988],{"class":49},[36,167890,167891,167893,167895,167898,167900,167902,167904,167906,167908,167910,167912],{"class":38,"line":46},[36,167892,161950],{"class":49},[36,167894,54],{"class":53},[36,167896,167897],{"class":60}," filter",[36,167899,901],{"class":49},[36,167901,167530],{"class":53},[36,167903,167829],{"class":49},[36,167905,1214],{"class":53},[36,167907,15499],{"class":60},[36,167909,102203],{"class":53},[36,167911,4842],{"class":60},[36,167913,167836],{"class":49},[36,167915,167916,167918,167920,167922],{"class":38,"line":78},[36,167917,199],{"class":60},[36,167919,901],{"class":49},[36,167921,154714],{"class":60},[36,167923,166712],{"class":49},[868,167925,167927],{"id":167926},"_7103-sorted","7.10.3 sorted",[14,167929,167930,167932],{},[33,167931,165880],{}," 返回排序后的新列表。",[26,167934,167936],{"className":28,"code":167935,"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,167937,167938,167946,167966,167986,168006,168010,168014,168043],{"__ignoreMap":31},[36,167939,167940,167942,167944],{"class":38,"line":39},[36,167941,160360],{"class":49},[36,167943,54],{"class":53},[36,167945,56189],{"class":49},[36,167947,167948,167950,167952,167954,167956,167958,167960,167962,167964],{"class":38,"line":46},[36,167949,149029],{"class":49},[36,167951,63421],{"class":998},[36,167953,52179],{"class":49},[36,167955,150532],{"class":998},[36,167957,154],{"class":49},[36,167959,152116],{"class":998},[36,167961,52179],{"class":49},[36,167963,1868],{"class":60},[36,167965,5678],{"class":49},[36,167967,167968,167970,167972,167974,167976,167978,167980,167982,167984],{"class":38,"line":78},[36,167969,149029],{"class":49},[36,167971,63421],{"class":998},[36,167973,52179],{"class":49},[36,167975,151580],{"class":998},[36,167977,154],{"class":49},[36,167979,152116],{"class":998},[36,167981,52179],{"class":49},[36,167983,1691],{"class":60},[36,167985,5678],{"class":49},[36,167987,167988,167990,167992,167994,167996,167998,168000,168002,168004],{"class":38,"line":125},[36,167989,149029],{"class":49},[36,167991,63421],{"class":998},[36,167993,52179],{"class":49},[36,167995,160375],{"class":998},[36,167997,154],{"class":49},[36,167999,152116],{"class":998},[36,168001,52179],{"class":49},[36,168003,1291],{"class":60},[36,168005,5678],{"class":49},[36,168007,168008],{"class":38,"line":131},[36,168009,33988],{"class":49},[36,168011,168012],{"class":38,"line":396},[36,168013,194],{"emptyLinePlaceholder":193},[36,168015,168016,168018,168020,168022,168025,168027,168029,168031,168033,168035,168037,168039,168041],{"class":38,"line":407},[36,168017,161950],{"class":49},[36,168019,54],{"class":53},[36,168021,164248],{"class":60},[36,168023,168024],{"class":49},"(students, ",[36,168026,154590],{"class":416},[36,168028,154593],{"class":53},[36,168030,154596],{"class":49},[36,168032,152116],{"class":998},[36,168034,112846],{"class":49},[36,168036,164172],{"class":416},[36,168038,54],{"class":53},[36,168040,32218],{"class":60},[36,168042,75],{"class":49},[36,168044,168045,168047],{"class":38,"line":2061},[36,168046,199],{"class":60},[36,168048,77327],{"class":49},[21,168050,168052],{"id":168051},"_711-闭包入门","7.11 闭包入门",[14,168054,168055],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[26,168057,168059],{"className":28,"code":168058,"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,168060,168061,168071,168081,168092,168096,168103,168107,168111,168125],{"__ignoreMap":31},[36,168062,168063,168065,168068],{"class":38,"line":39},[36,168064,32689],{"class":53},[36,168066,168067],{"class":2713}," outer",[36,168069,168070],{"class":49},"(base):\n",[36,168072,168073,168075,168078],{"class":38,"line":46},[36,168074,31543],{"class":53},[36,168076,168077],{"class":2713}," inner",[36,168079,168080],{"class":49},"(num):\n",[36,168082,168083,168085,168088,168090],{"class":38,"line":78},[36,168084,15496],{"class":53},[36,168086,168087],{"class":49}," base ",[36,168089,1365],{"class":53},[36,168091,167223],{"class":49},[36,168093,168094],{"class":38,"line":125},[36,168095,194],{"emptyLinePlaceholder":193},[36,168097,168098,168100],{"class":38,"line":131},[36,168099,4839],{"class":53},[36,168101,168102],{"class":49}," inner\n",[36,168104,168105],{"class":38,"line":396},[36,168106,194],{"emptyLinePlaceholder":193},[36,168108,168109],{"class":38,"line":407},[36,168110,194],{"emptyLinePlaceholder":193},[36,168112,168113,168116,168118,168121,168123],{"class":38,"line":2061},[36,168114,168115],{"class":49},"add_10 ",[36,168117,54],{"class":53},[36,168119,168120],{"class":49}," outer(",[36,168122,332],{"class":60},[36,168124,75],{"class":49},[36,168126,168127,168129,168132,168134],{"class":38,"line":2067},[36,168128,199],{"class":60},[36,168130,168131],{"class":49},"(add_10(",[36,168133,157],{"class":60},[36,168135,31239],{"class":49},[14,168137,168138],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[21,168140,168142],{"id":168141},"_712-装饰器入门","7.12 装饰器入门",[14,168144,168145],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[26,168147,168149],{"className":28,"code":168148,"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,168150,168151,168160,168169,168180,168185,168196,168200,168207,168211,168215,168220,168228,168238,168242,168246],{"__ignoreMap":31},[36,168152,168153,168155,168157],{"class":38,"line":39},[36,168154,32689],{"class":53},[36,168156,87933],{"class":2713},[36,168158,168159],{"class":49},"(func):\n",[36,168161,168162,168164,168167],{"class":38,"line":46},[36,168163,31543],{"class":53},[36,168165,168166],{"class":2713}," wrapper",[36,168168,32695],{"class":49},[36,168170,168171,168173,168175,168178],{"class":38,"line":78},[36,168172,33193],{"class":60},[36,168174,901],{"class":49},[36,168176,168177],{"class":998},"\"函数开始执行\"",[36,168179,75],{"class":49},[36,168181,168182],{"class":38,"line":125},[36,168183,168184],{"class":49},"        func()\n",[36,168186,168187,168189,168191,168194],{"class":38,"line":131},[36,168188,33193],{"class":60},[36,168190,901],{"class":49},[36,168192,168193],{"class":998},"\"函数执行结束\"",[36,168195,75],{"class":49},[36,168197,168198],{"class":38,"line":396},[36,168199,194],{"emptyLinePlaceholder":193},[36,168201,168202,168204],{"class":38,"line":407},[36,168203,4839],{"class":53},[36,168205,168206],{"class":49}," wrapper\n",[36,168208,168209],{"class":38,"line":2061},[36,168210,194],{"emptyLinePlaceholder":193},[36,168212,168213],{"class":38,"line":2067},[36,168214,194],{"emptyLinePlaceholder":193},[36,168216,168217],{"class":38,"line":2079},[36,168218,168219],{"class":2713},"@log\n",[36,168221,168222,168224,168226],{"class":38,"line":2362},[36,168223,32689],{"class":53},[36,168225,161640],{"class":2713},[36,168227,32695],{"class":49},[36,168229,168230,168232,168234,168236],{"class":38,"line":2367},[36,168231,32041],{"class":60},[36,168233,901],{"class":49},[36,168235,6591],{"class":998},[36,168237,75],{"class":49},[36,168239,168240],{"class":38,"line":2373},[36,168241,194],{"emptyLinePlaceholder":193},[36,168243,168244],{"class":38,"line":2378},[36,168245,194],{"emptyLinePlaceholder":193},[36,168247,168248],{"class":38,"line":2392},[36,168249,161675],{"class":49},[14,168251,158918],{},[26,168253,168255],{"className":28,"code":168254,"language":30,"meta":31,"style":31},"say_hello = log(say_hello)\n",[33,168256,168257],{"__ignoreMap":31},[36,168258,168259,168262,168264],{"class":38,"line":39},[36,168260,168261],{"class":49},"say_hello ",[36,168263,54],{"class":53},[36,168265,168266],{"class":49}," log(say_hello)\n",[14,168268,168269],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[21,168271,168273],{"id":168272},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[26,168275,168277],{"className":28,"code":168276,"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,168278,168279,168287,168304,168314,168333,168343,168350,168354,168360,168364,168368,168372,168380,168390,168394,168398],{"__ignoreMap":31},[36,168280,168281,168283,168285],{"class":38,"line":39},[36,168282,32689],{"class":53},[36,168284,87933],{"class":2713},[36,168286,168159],{"class":49},[36,168288,168289,168291,168293,168295,168297,168300,168302],{"class":38,"line":46},[36,168290,31543],{"class":53},[36,168292,168166],{"class":2713},[36,168294,901],{"class":49},[36,168296,1339],{"class":53},[36,168298,168299],{"class":49},"args, ",[36,168301,11408],{"class":53},[36,168303,167310],{"class":49},[36,168305,168306,168308,168310,168312],{"class":38,"line":78},[36,168307,33193],{"class":60},[36,168309,901],{"class":49},[36,168311,168177],{"class":998},[36,168313,75],{"class":49},[36,168315,168316,168319,168321,168324,168326,168328,168330],{"class":38,"line":125},[36,168317,168318],{"class":49},"        result ",[36,168320,54],{"class":53},[36,168322,168323],{"class":49}," func(",[36,168325,1339],{"class":53},[36,168327,168299],{"class":49},[36,168329,11408],{"class":53},[36,168331,168332],{"class":49},"kwargs)\n",[36,168334,168335,168337,168339,168341],{"class":38,"line":131},[36,168336,33193],{"class":60},[36,168338,901],{"class":49},[36,168340,168193],{"class":998},[36,168342,75],{"class":49},[36,168344,168345,168347],{"class":38,"line":396},[36,168346,15496],{"class":53},[36,168348,168349],{"class":49}," result\n",[36,168351,168352],{"class":38,"line":407},[36,168353,194],{"emptyLinePlaceholder":193},[36,168355,168356,168358],{"class":38,"line":2061},[36,168357,4839],{"class":53},[36,168359,168206],{"class":49},[36,168361,168362],{"class":38,"line":2067},[36,168363,194],{"emptyLinePlaceholder":193},[36,168365,168366],{"class":38,"line":2079},[36,168367,194],{"emptyLinePlaceholder":193},[36,168369,168370],{"class":38,"line":2362},[36,168371,168219],{"class":2713},[36,168373,168374,168376,168378],{"class":38,"line":2367},[36,168375,32689],{"class":53},[36,168377,5957],{"class":2713},[36,168379,151737],{"class":49},[36,168381,168382,168384,168386,168388],{"class":38,"line":2373},[36,168383,4839],{"class":53},[36,168385,11616],{"class":49},[36,168387,1365],{"class":53},[36,168389,151748],{"class":49},[36,168391,168392],{"class":38,"line":2378},[36,168393,194],{"emptyLinePlaceholder":193},[36,168395,168396],{"class":38,"line":2392},[36,168397,194],{"emptyLinePlaceholder":193},[36,168399,168400,168402,168404,168406,168408,168410],{"class":38,"line":2397},[36,168401,199],{"class":60},[36,168403,167244],{"class":49},[36,168405,332],{"class":60},[36,168407,154],{"class":49},[36,168409,72],{"class":60},[36,168411,31239],{"class":49},[14,168413,168414,168415,101662,168417,168419],{},"这个写法使用 ",[33,168416,167176],{},[33,168418,167291],{}," 接收原函数的所有参数。",[21,168421,168423],{"id":168422},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,168425,123936],{},[851,168427,168428,168431,168434],{},[854,168429,168430],{},"给定一组学生数据。",[854,168432,168433],{},"封装函数，根据传入规则筛选学生。",[854,168435,168436],{},"筛选及格、优秀、未成年学生。",[14,168438,10782],{},[26,168440,168442],{"className":28,"code":168441,"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,168443,168444,168452,168480,168508,168536,168540,168544,168548,168558,168566,168576,168583,168588,168594,168598,168602,168626,168649,168672,168676,168683,168690],{"__ignoreMap":31},[36,168445,168446,168448,168450],{"class":38,"line":39},[36,168447,160360],{"class":49},[36,168449,54],{"class":53},[36,168451,56189],{"class":49},[36,168453,168454,168456,168458,168460,168462,168464,168466,168468,168470,168472,168474,168476,168478],{"class":38,"line":46},[36,168455,149029],{"class":49},[36,168457,63421],{"class":998},[36,168459,52179],{"class":49},[36,168461,150532],{"class":998},[36,168463,154],{"class":49},[36,168465,69866],{"class":998},[36,168467,52179],{"class":49},[36,168469,1532],{"class":60},[36,168471,154],{"class":49},[36,168473,152116],{"class":998},[36,168475,52179],{"class":49},[36,168477,1868],{"class":60},[36,168479,5678],{"class":49},[36,168481,168482,168484,168486,168488,168490,168492,168494,168496,168498,168500,168502,168504,168506],{"class":38,"line":78},[36,168483,149029],{"class":49},[36,168485,63421],{"class":998},[36,168487,52179],{"class":49},[36,168489,151580],{"class":998},[36,168491,154],{"class":49},[36,168493,69866],{"class":998},[36,168495,52179],{"class":49},[36,168497,1507],{"class":60},[36,168499,154],{"class":49},[36,168501,152116],{"class":998},[36,168503,52179],{"class":49},[36,168505,1691],{"class":60},[36,168507,5678],{"class":49},[36,168509,168510,168512,168514,168516,168518,168520,168522,168524,168526,168528,168530,168532,168534],{"class":38,"line":125},[36,168511,149029],{"class":49},[36,168513,63421],{"class":998},[36,168515,52179],{"class":49},[36,168517,160375],{"class":998},[36,168519,154],{"class":49},[36,168521,69866],{"class":998},[36,168523,52179],{"class":49},[36,168525,1557],{"class":60},[36,168527,154],{"class":49},[36,168529,152116],{"class":998},[36,168531,52179],{"class":49},[36,168533,1761],{"class":60},[36,168535,5678],{"class":49},[36,168537,168538],{"class":38,"line":131},[36,168539,33988],{"class":49},[36,168541,168542],{"class":38,"line":396},[36,168543,194],{"emptyLinePlaceholder":193},[36,168545,168546],{"class":38,"line":407},[36,168547,194],{"emptyLinePlaceholder":193},[36,168549,168550,168552,168555],{"class":38,"line":2061},[36,168551,32689],{"class":53},[36,168553,168554],{"class":2713}," filter_students",[36,168556,168557],{"class":49},"(students, condition):\n",[36,168559,168560,168562,168564],{"class":38,"line":2067},[36,168561,161867],{"class":49},[36,168563,54],{"class":53},[36,168565,52580],{"class":49},[36,168567,168568,168570,168572,168574],{"class":38,"line":2079},[36,168569,3950],{"class":53},[36,168571,152781],{"class":49},[36,168573,26788],{"class":53},[36,168575,152786],{"class":49},[36,168577,168578,168580],{"class":38,"line":2362},[36,168579,3246],{"class":53},[36,168581,168582],{"class":49}," condition(student):\n",[36,168584,168585],{"class":38,"line":2367},[36,168586,168587],{"class":49},"            result.append(student)\n",[36,168589,168590,168592],{"class":38,"line":2373},[36,168591,4839],{"class":53},[36,168593,168349],{"class":49},[36,168595,168596],{"class":38,"line":2378},[36,168597,194],{"emptyLinePlaceholder":193},[36,168599,168600],{"class":38,"line":2392},[36,168601,194],{"emptyLinePlaceholder":193},[36,168603,168604,168606,168608,168611,168613,168616,168618,168620,168622,168624],{"class":38,"line":2397},[36,168605,166345],{"class":49},[36,168607,54],{"class":53},[36,168609,168610],{"class":49}," filter_students(students, ",[36,168612,167530],{"class":53},[36,168614,168615],{"class":49}," s: s[",[36,168617,152116],{"class":998},[36,168619,5192],{"class":49},[36,168621,2460],{"class":53},[36,168623,158481],{"class":60},[36,168625,75],{"class":49},[36,168627,168628,168631,168633,168635,168637,168639,168641,168643,168645,168647],{"class":38,"line":2403},[36,168629,168630],{"class":49},"excellent ",[36,168632,54],{"class":53},[36,168634,168610],{"class":49},[36,168636,167530],{"class":53},[36,168638,168615],{"class":49},[36,168640,152116],{"class":998},[36,168642,5192],{"class":49},[36,168644,2460],{"class":53},[36,168646,158432],{"class":60},[36,168648,75],{"class":49},[36,168650,168651,168654,168656,168658,168660,168662,168664,168666,168668,168670],{"class":38,"line":2424},[36,168652,168653],{"class":49},"under_age ",[36,168655,54],{"class":53},[36,168657,168610],{"class":49},[36,168659,167530],{"class":53},[36,168661,168615],{"class":49},[36,168663,69866],{"class":998},[36,168665,5192],{"class":49},[36,168667,1789],{"class":53},[36,168669,156929],{"class":60},[36,168671,75],{"class":49},[36,168673,168674],{"class":38,"line":2429},[36,168675,194],{"emptyLinePlaceholder":193},[36,168677,168678,168680],{"class":38,"line":2443},[36,168679,199],{"class":60},[36,168681,168682],{"class":49},"(passed)\n",[36,168684,168685,168687],{"class":38,"line":2448},[36,168686,199],{"class":60},[36,168688,168689],{"class":49},"(excellent)\n",[36,168691,168692,168694],{"class":38,"line":2477},[36,168693,199],{"class":60},[36,168695,168696],{"class":49},"(under_age)\n",[21,168698,168700],{"id":168699},"_715-易错点","7.15 易错点",[851,168702,168703,168706,168714,168719,168730],{},[854,168704,168705],{},"默认参数不要写可变对象。",[854,168707,168708,168710,168711,168713],{},[33,168709,167176],{}," 是元组，",[33,168712,167291],{}," 是字典。",[854,168715,168716,168718],{},[33,168717,167530],{}," 只适合简单表达式。",[854,168720,168721,101662,168723,168725,168726,168729],{},[33,168722,74786],{},[33,168724,80793],{}," 的结果是迭代器，常用 ",[33,168727,168728],{},"list()"," 转换查看。",[854,168731,168732],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[21,168734,168736],{"id":168735},"_716-本章练习","7.16 本章练习",[851,168738,168739,168746,168752,168757,168762],{},[854,168740,168741,168742,168745],{},"写函数 ",[33,168743,168744],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[854,168747,168741,168748,168751],{},[33,168749,168750],{},"print_user(**kwargs)","，输出用户所有字段。",[854,168753,105010,168754,168756],{},[33,168755,167530],{}," 对学生列表按年龄排序。",[854,168758,105010,168759,168761],{},[33,168760,80793],{}," 找出成绩不及格的学生。",[854,168763,168764],{},"写一个装饰器，统计函数执行前后的提示信息。",[807,168766,168767],{},"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":46,"depth":46,"links":168769},[168770,168771,168772,168773,168774,168775,168779,168780,168781,168782,168787,168788,168789,168790,168791,168792],{"id":166628,"depth":46,"text":166629},{"id":166742,"depth":46,"text":166743},{"id":166831,"depth":46,"text":166832},{"id":166893,"depth":46,"text":166894},{"id":167039,"depth":46,"text":167040},{"id":167166,"depth":46,"text":167167,"children":168776},[168777,168778],{"id":167170,"depth":78,"text":167171},{"id":167285,"depth":78,"text":167286},{"id":167366,"depth":46,"text":167367},{"id":167524,"depth":46,"text":167525},{"id":167692,"depth":46,"text":167693},{"id":167774,"depth":46,"text":167775,"children":168783},[168784,168785,168786],{"id":167778,"depth":78,"text":167779},{"id":167849,"depth":78,"text":167850},{"id":167926,"depth":78,"text":167927},{"id":168051,"depth":46,"text":168052},{"id":168141,"depth":46,"text":168142},{"id":168272,"depth":46,"text":168273},{"id":168422,"depth":46,"text":168423},{"id":168699,"depth":46,"text":168700},{"id":168735,"depth":46,"text":168736},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166620,"description":823},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168799,"title":168800,"body":168801,"description":823,"extension":824,"meta":171320,"navigation":193,"path":171321,"seo":171322,"stem":171323,"__hash__":171324},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168802,"toc":171295},[168803,168806,168810,168813,168816,168847,168851,168855,168858,168885,168889,168892,168943,168946,168961,168964,168999,169003,169005,169029,169032,169092,169096,169100,169103,169160,169163,169183,169187,169190,169253,169257,169260,169316,169323,169347,169351,169354,169417,169421,169426,169477,169480,169484,169489,169556,169559,169641,169645,169650,169701,169704,169708,169711,169714,169722,169725,169771,169774,169820,169824,169830,169874,169877,169923,169926,169966,169969,170030,170034,170037,170127,170130,170272,170275,170342,170346,170349,170352,170493,170496,170574,170577,170753,170757,170759,170770,170772,170971,170975,171219,171223,171257,171261,171292],[10,168804,168800],{"id":168805},"_8-文件操作",[21,168807,168809],{"id":168808},"_81-文件操作的意义","8.1 文件操作的意义",[14,168811,168812],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168814,168815],{},"常见文件类型：",[851,168817,168818,168824,168830,168836,168842],{},[854,168819,168820,168823],{},[33,168821,168822],{},".txt","：普通文本。",[854,168825,168826,168829],{},[33,168827,168828],{},".csv","：表格文本。",[854,168831,168832,168835],{},[33,168833,168834],{},".json","：结构化数据。",[854,168837,168838,168841],{},[33,168839,168840],{},".log","：日志文件。",[854,168843,168844,168846],{},[33,168845,146996],{},"：Python 源代码。",[21,168848,168850],{"id":168849},"_82-路径","8.2 路径",[868,168852,168854],{"id":168853},"_821-相对路径","8.2.1 相对路径",[14,168856,168857],{},"相对当前运行目录：",[26,168859,168861],{"className":28,"code":168860,"language":30,"meta":31,"style":31},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[33,168862,168863],{"__ignoreMap":31},[36,168864,168865,168867,168869,168871,168873,168875,168877,168879,168881,168883],{"class":38,"line":39},[36,168866,87657],{"class":60},[36,168868,901],{"class":49},[36,168870,147440],{"class":998},[36,168872,154],{"class":49},[36,168874,147445],{"class":998},[36,168876,154],{"class":49},[36,168878,147450],{"class":416},[36,168880,54],{"class":53},[36,168882,147455],{"class":998},[36,168884,75],{"class":49},[868,168886,168888],{"id":168887},"_822-绝对路径","8.2.2 绝对路径",[14,168890,168891],{},"从根目录或盘符开始：",[26,168893,168895],{"className":28,"code":168894,"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,168896,168897,168920],{"__ignoreMap":31},[36,168898,168899,168901,168903,168906,168908,168910,168912,168914,168916,168918],{"class":38,"line":39},[36,168900,87657],{"class":60},[36,168902,901],{"class":49},[36,168904,168905],{"class":998},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[36,168907,154],{"class":49},[36,168909,147445],{"class":998},[36,168911,154],{"class":49},[36,168913,147450],{"class":416},[36,168915,54],{"class":53},[36,168917,147455],{"class":998},[36,168919,75],{"class":49},[36,168921,168922,168924,168926,168929,168931,168933,168935,168937,168939,168941],{"class":38,"line":46},[36,168923,87657],{"class":60},[36,168925,901],{"class":49},[36,168927,168928],{"class":998},"\"D:\u002Fdata\u002Fdata.txt\"",[36,168930,154],{"class":49},[36,168932,147445],{"class":998},[36,168934,154],{"class":49},[36,168936,147450],{"class":416},[36,168938,54],{"class":53},[36,168940,147455],{"class":998},[36,168942,75],{"class":49},[14,168944,168945],{},"Windows 路径建议写成：",[26,168947,168949],{"className":28,"code":168948,"language":30,"meta":31,"style":31},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[33,168950,168951],{"__ignoreMap":31},[36,168952,168953,168956,168958],{"class":38,"line":39},[36,168954,168955],{"class":49},"path ",[36,168957,54],{"class":53},[36,168959,168960],{"class":998}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168962,168963],{},"或原始字符串：",[26,168965,168967],{"className":28,"code":168966,"language":30,"meta":31,"style":31},"path = r\"D:\\data\\data.txt\"\n",[33,168968,168969],{"__ignoreMap":31},[36,168970,168971,168973,168975,168977,168979,168982,168985,168988,168990,168992,168994,168997],{"class":38,"line":39},[36,168972,168955],{"class":49},[36,168974,54],{"class":53},[36,168976,17865],{"class":53},[36,168978,1141],{"class":998},[36,168980,168981],{"class":48719},"D:",[36,168983,168984],{"class":60},"\\d",[36,168986,168987],{"class":48719},"ata",[36,168989,168984],{"class":60},[36,168991,168987],{"class":48719},[36,168993,1440],{"class":60},[36,168995,168996],{"class":48719},"txt",[36,168998,25878],{"class":998},[21,169000,169002],{"id":169001},"_83-open函数","8.3 open函数",[14,169004,5929],{},[26,169006,169008],{"className":28,"code":169007,"language":30,"meta":31,"style":31},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[33,169009,169010],{"__ignoreMap":31},[36,169011,169012,169014,169016,169018,169021,169023,169025,169027],{"class":38,"line":39},[36,169013,46096],{"class":416},[36,169015,14308],{"class":53},[36,169017,147435],{"class":60},[36,169019,169020],{"class":49},"(文件路径, 打开模式, ",[36,169022,147450],{"class":416},[36,169024,54],{"class":53},[36,169026,147455],{"class":998},[36,169028,75],{"class":49},[14,169030,169031],{},"常见模式：",[1031,169033,169034,169043],{},[1034,169035,169036],{},[1037,169037,169038,169041],{},[1040,169039,169040],{},"模式",[1040,169042,26614],{},[1078,169044,169045,169054,169063,169072,169082],{},[1037,169046,169047,169051],{},[1083,169048,169049],{},[33,169050,1552],{},[1083,169052,169053],{},"只读，文件不存在会报错",[1037,169055,169056,169060],{},[1083,169057,169058],{},[33,169059,1675],{},[1083,169061,169062],{},"只写，文件不存在会创建，存在会清空",[1037,169064,169065,169069],{},[1083,169066,169067],{},[33,169068,50],{},[1083,169070,169071],{},"追加，文件不存在会创建",[1037,169073,169074,169079],{},[1083,169075,169076],{},[33,169077,169078],{},"rb",[1083,169080,169081],{},"二进制只读",[1037,169083,169084,169089],{},[1083,169085,169086],{},[33,169087,169088],{},"wb",[1083,169090,169091],{},"二进制只写",[21,169093,169095],{"id":169094},"_84-读取文件","8.4 读取文件",[868,169097,169099],{"id":169098},"_841-read","8.4.1 read",[14,169101,169102],{},"一次读取全部内容：",[26,169104,169106],{"className":28,"code":169105,"language":30,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[33,169107,169108,169134,169146,169153],{"__ignoreMap":31},[36,169109,169110,169112,169114,169116,169118,169120,169122,169124,169126,169128,169130,169132],{"class":38,"line":39},[36,169111,46096],{"class":416},[36,169113,14308],{"class":53},[36,169115,147435],{"class":60},[36,169117,901],{"class":49},[36,169119,147440],{"class":998},[36,169121,154],{"class":49},[36,169123,147445],{"class":998},[36,169125,154],{"class":49},[36,169127,147450],{"class":416},[36,169129,54],{"class":53},[36,169131,147455],{"class":998},[36,169133,75],{"class":49},[36,169135,169136,169139,169141,169143],{"class":38,"line":46},[36,169137,169138],{"class":49},"content ",[36,169140,54],{"class":53},[36,169142,148797],{"class":416},[36,169144,169145],{"class":49},".read()\n",[36,169147,169148,169150],{"class":38,"line":78},[36,169149,199],{"class":60},[36,169151,169152],{"class":49},"(content)\n",[36,169154,169155,169157],{"class":38,"line":125},[36,169156,46096],{"class":416},[36,169158,169159],{"class":49},".close()\n",[14,169161,169162],{},"可以指定读取字符数：",[26,169164,169166],{"className":28,"code":169165,"language":30,"meta":31,"style":31},"content = file.read(10)\n",[33,169167,169168],{"__ignoreMap":31},[36,169169,169170,169172,169174,169176,169179,169181],{"class":38,"line":39},[36,169171,169138],{"class":49},[36,169173,54],{"class":53},[36,169175,148797],{"class":416},[36,169177,169178],{"class":49},".read(",[36,169180,332],{"class":60},[36,169182,75],{"class":49},[868,169184,169186],{"id":169185},"_842-readline","8.4.2 readline",[14,169188,169189],{},"一次读取一行：",[26,169191,169193],{"className":28,"code":169192,"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,169194,169195,169221,169225,169236,169243,169247],{"__ignoreMap":31},[36,169196,169197,169199,169201,169203,169205,169207,169209,169211,169213,169215,169217,169219],{"class":38,"line":39},[36,169198,46096],{"class":416},[36,169200,14308],{"class":53},[36,169202,147435],{"class":60},[36,169204,901],{"class":49},[36,169206,147440],{"class":998},[36,169208,154],{"class":49},[36,169210,147445],{"class":998},[36,169212,154],{"class":49},[36,169214,147450],{"class":416},[36,169216,54],{"class":53},[36,169218,147455],{"class":998},[36,169220,75],{"class":49},[36,169222,169223],{"class":38,"line":46},[36,169224,194],{"emptyLinePlaceholder":193},[36,169226,169227,169229,169231,169233],{"class":38,"line":78},[36,169228,147896],{"class":49},[36,169230,54],{"class":53},[36,169232,148797],{"class":416},[36,169234,169235],{"class":49},".readline()\n",[36,169237,169238,169240],{"class":38,"line":125},[36,169239,199],{"class":60},[36,169241,169242],{"class":49},"(line)\n",[36,169244,169245],{"class":38,"line":131},[36,169246,194],{"emptyLinePlaceholder":193},[36,169248,169249,169251],{"class":38,"line":396},[36,169250,46096],{"class":416},[36,169252,169159],{"class":49},[868,169254,169256],{"id":169255},"_843-readlines","8.4.3 readlines",[14,169258,169259],{},"读取所有行，返回列表：",[26,169261,169263],{"className":28,"code":169262,"language":30,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[33,169264,169265,169291,169303,169310],{"__ignoreMap":31},[36,169266,169267,169269,169271,169273,169275,169277,169279,169281,169283,169285,169287,169289],{"class":38,"line":39},[36,169268,46096],{"class":416},[36,169270,14308],{"class":53},[36,169272,147435],{"class":60},[36,169274,901],{"class":49},[36,169276,147440],{"class":998},[36,169278,154],{"class":49},[36,169280,147445],{"class":998},[36,169282,154],{"class":49},[36,169284,147450],{"class":416},[36,169286,54],{"class":53},[36,169288,147455],{"class":998},[36,169290,75],{"class":49},[36,169292,169293,169296,169298,169300],{"class":38,"line":46},[36,169294,169295],{"class":49},"lines ",[36,169297,54],{"class":53},[36,169299,148797],{"class":416},[36,169301,169302],{"class":49},".readlines()\n",[36,169304,169305,169307],{"class":38,"line":78},[36,169306,199],{"class":60},[36,169308,169309],{"class":49},"(lines)\n",[36,169311,169312,169314],{"class":38,"line":125},[36,169313,46096],{"class":416},[36,169315,169159],{"class":49},[14,169317,169318,169319,169322],{},"每一行通常带有换行符，可以用 ",[33,169320,169321],{},"strip()"," 去掉：",[26,169324,169326],{"className":28,"code":169325,"language":30,"meta":31,"style":31},"for line in lines:\n    print(line.strip())\n",[33,169327,169328,169340],{"__ignoreMap":31},[36,169329,169330,169332,169335,169337],{"class":38,"line":39},[36,169331,3774],{"class":53},[36,169333,169334],{"class":49}," line ",[36,169336,26788],{"class":53},[36,169338,169339],{"class":49}," lines:\n",[36,169341,169342,169344],{"class":38,"line":46},[36,169343,32041],{"class":60},[36,169345,169346],{"class":49},"(line.strip())\n",[868,169348,169350],{"id":169349},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,169352,169353],{},"推荐读取大文件时使用：",[26,169355,169357],{"className":28,"code":169356,"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,169358,169359,169385,169389,169401,169407,169411],{"__ignoreMap":31},[36,169360,169361,169363,169365,169367,169369,169371,169373,169375,169377,169379,169381,169383],{"class":38,"line":39},[36,169362,46096],{"class":416},[36,169364,14308],{"class":53},[36,169366,147435],{"class":60},[36,169368,901],{"class":49},[36,169370,147440],{"class":998},[36,169372,154],{"class":49},[36,169374,147445],{"class":998},[36,169376,154],{"class":49},[36,169378,147450],{"class":416},[36,169380,54],{"class":53},[36,169382,147455],{"class":998},[36,169384,75],{"class":49},[36,169386,169387],{"class":38,"line":46},[36,169388,194],{"emptyLinePlaceholder":193},[36,169390,169391,169393,169395,169397,169399],{"class":38,"line":78},[36,169392,3774],{"class":53},[36,169394,169334],{"class":49},[36,169396,26788],{"class":53},[36,169398,148797],{"class":416},[36,169400,4488],{"class":49},[36,169402,169403,169405],{"class":38,"line":125},[36,169404,32041],{"class":60},[36,169406,169346],{"class":49},[36,169408,169409],{"class":38,"line":131},[36,169410,194],{"emptyLinePlaceholder":193},[36,169412,169413,169415],{"class":38,"line":396},[36,169414,46096],{"class":416},[36,169416,169159],{"class":49},[21,169418,169420],{"id":169419},"_85-with语句","8.5 with语句",[14,169422,169423,169425],{},[33,169424,108477],{}," 会自动关闭文件，推荐使用。",[26,169427,169429],{"className":28,"code":169428,"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,169430,169431,169461,169471],{"__ignoreMap":31},[36,169432,169433,169435,169437,169439,169441,169443,169445,169447,169449,169451,169453,169455,169457,169459],{"class":38,"line":39},[36,169434,108477],{"class":53},[36,169436,147435],{"class":60},[36,169438,901],{"class":49},[36,169440,147440],{"class":998},[36,169442,154],{"class":49},[36,169444,147445],{"class":998},[36,169446,154],{"class":49},[36,169448,147450],{"class":416},[36,169450,54],{"class":53},[36,169452,147455],{"class":998},[36,169454,14458],{"class":49},[36,169456,32125],{"class":53},[36,169458,148797],{"class":416},[36,169460,4488],{"class":49},[36,169462,169463,169465,169467,169469],{"class":38,"line":46},[36,169464,147467],{"class":49},[36,169466,54],{"class":53},[36,169468,148797],{"class":416},[36,169470,169145],{"class":49},[36,169472,169473,169475],{"class":38,"line":78},[36,169474,32041],{"class":60},[36,169476,169152],{"class":49},[14,169478,169479],{},"等价于打开文件、读取、最后关闭，但更安全。",[21,169481,169483],{"id":169482},"_86-写入文件","8.6 写入文件",[14,169485,169486,169488],{},[33,169487,1675],{}," 模式会清空原文件。",[26,169490,169492],{"className":28,"code":169491,"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,169493,169494,169524,169541],{"__ignoreMap":31},[36,169495,169496,169498,169500,169502,169504,169506,169508,169510,169512,169514,169516,169518,169520,169522],{"class":38,"line":39},[36,169497,108477],{"class":53},[36,169499,147435],{"class":60},[36,169501,901],{"class":49},[36,169503,147440],{"class":998},[36,169505,154],{"class":49},[36,169507,152620],{"class":998},[36,169509,154],{"class":49},[36,169511,147450],{"class":416},[36,169513,54],{"class":53},[36,169515,147455],{"class":998},[36,169517,14458],{"class":49},[36,169519,32125],{"class":53},[36,169521,148797],{"class":416},[36,169523,4488],{"class":49},[36,169525,169526,169529,169532,169535,169537,169539],{"class":38,"line":46},[36,169527,169528],{"class":416},"    file",[36,169530,169531],{"class":49},".write(",[36,169533,169534],{"class":998},"\"hello",[36,169536,157169],{"class":60},[36,169538,1141],{"class":998},[36,169540,75],{"class":49},[36,169542,169543,169545,169547,169550,169552,169554],{"class":38,"line":78},[36,169544,169528],{"class":416},[36,169546,169531],{"class":49},[36,169548,169549],{"class":998},"\"python",[36,169551,157169],{"class":60},[36,169553,1141],{"class":998},[36,169555,75],{"class":49},[14,169557,169558],{},"写入多行：",[26,169560,169562],{"className":28,"code":169561,"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,169563,169564,169599,169603,169634],{"__ignoreMap":31},[36,169565,169566,169568,169570,169572,169575,169577,169579,169581,169584,169586,169588,169590,169593,169595,169597],{"class":38,"line":39},[36,169567,169295],{"class":49},[36,169569,54],{"class":53},[36,169571,52968],{"class":49},[36,169573,169574],{"class":998},"\"小明,18",[36,169576,157169],{"class":60},[36,169578,1141],{"class":998},[36,169580,154],{"class":49},[36,169582,169583],{"class":998},"\"小红,17",[36,169585,157169],{"class":60},[36,169587,1141],{"class":998},[36,169589,154],{"class":49},[36,169591,169592],{"class":998},"\"小刚,19",[36,169594,157169],{"class":60},[36,169596,1141],{"class":998},[36,169598,33988],{"class":49},[36,169600,169601],{"class":38,"line":46},[36,169602,194],{"emptyLinePlaceholder":193},[36,169604,169605,169607,169609,169611,169614,169616,169618,169620,169622,169624,169626,169628,169630,169632],{"class":38,"line":78},[36,169606,108477],{"class":53},[36,169608,147435],{"class":60},[36,169610,901],{"class":49},[36,169612,169613],{"class":998},"\"students.txt\"",[36,169615,154],{"class":49},[36,169617,152620],{"class":998},[36,169619,154],{"class":49},[36,169621,147450],{"class":416},[36,169623,54],{"class":53},[36,169625,147455],{"class":998},[36,169627,14458],{"class":49},[36,169629,32125],{"class":53},[36,169631,148797],{"class":416},[36,169633,4488],{"class":49},[36,169635,169636,169638],{"class":38,"line":125},[36,169637,169528],{"class":416},[36,169639,169640],{"class":49},".writelines(lines)\n",[21,169642,169644],{"id":169643},"_87-追加文件","8.7 追加文件",[14,169646,169647,169649],{},[33,169648,50],{}," 模式不会清空原内容，而是在末尾追加。",[26,169651,169653],{"className":28,"code":169652,"language":30,"meta":31,"style":31},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[33,169654,169655,169686],{"__ignoreMap":31},[36,169656,169657,169659,169661,169663,169666,169668,169670,169672,169674,169676,169678,169680,169682,169684],{"class":38,"line":39},[36,169658,108477],{"class":53},[36,169660,147435],{"class":60},[36,169662,901],{"class":49},[36,169664,169665],{"class":998},"\"log.txt\"",[36,169667,154],{"class":49},[36,169669,165969],{"class":998},[36,169671,154],{"class":49},[36,169673,147450],{"class":416},[36,169675,54],{"class":53},[36,169677,147455],{"class":998},[36,169679,14458],{"class":49},[36,169681,32125],{"class":53},[36,169683,148797],{"class":416},[36,169685,4488],{"class":49},[36,169687,169688,169690,169692,169695,169697,169699],{"class":38,"line":46},[36,169689,169528],{"class":416},[36,169691,169531],{"class":49},[36,169693,169694],{"class":998},"\"程序启动",[36,169696,157169],{"class":60},[36,169698,1141],{"class":998},[36,169700,75],{"class":49},[14,169702,169703],{},"日志类文件常用追加模式。",[21,169705,169707],{"id":169706},"_88-文件编码","8.8 文件编码",[14,169709,169710],{},"编码决定文字如何保存为字节。",[14,169712,169713],{},"常见编码：",[851,169715,169716,169719],{},[854,169717,169718],{},"UTF-8：推荐。",[854,169720,169721],{},"GBK：部分 Windows 中文文件常见。",[14,169723,169724],{},"读取文件乱码时，可以尝试：",[26,169726,169728],{"className":28,"code":169727,"language":30,"meta":31,"style":31},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[33,169729,169730,169761],{"__ignoreMap":31},[36,169731,169732,169734,169736,169738,169740,169742,169744,169746,169748,169750,169753,169755,169757,169759],{"class":38,"line":39},[36,169733,108477],{"class":53},[36,169735,147435],{"class":60},[36,169737,901],{"class":49},[36,169739,147440],{"class":998},[36,169741,154],{"class":49},[36,169743,147445],{"class":998},[36,169745,154],{"class":49},[36,169747,147450],{"class":416},[36,169749,54],{"class":53},[36,169751,169752],{"class":998},"\"gbk\"",[36,169754,14458],{"class":49},[36,169756,32125],{"class":53},[36,169758,148797],{"class":416},[36,169760,4488],{"class":49},[36,169762,169763,169765,169767,169769],{"class":38,"line":46},[36,169764,147467],{"class":49},[36,169766,54],{"class":53},[36,169768,148797],{"class":416},[36,169770,169145],{"class":49},[14,169772,169773],{},"写文件时建议统一 UTF-8：",[26,169775,169777],{"className":28,"code":169776,"language":30,"meta":31,"style":31},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[33,169778,169779,169809],{"__ignoreMap":31},[36,169780,169781,169783,169785,169787,169789,169791,169793,169795,169797,169799,169801,169803,169805,169807],{"class":38,"line":39},[36,169782,108477],{"class":53},[36,169784,147435],{"class":60},[36,169786,901],{"class":49},[36,169788,147440],{"class":998},[36,169790,154],{"class":49},[36,169792,152620],{"class":998},[36,169794,154],{"class":49},[36,169796,147450],{"class":416},[36,169798,54],{"class":53},[36,169800,147455],{"class":998},[36,169802,14458],{"class":49},[36,169804,32125],{"class":53},[36,169806,148797],{"class":416},[36,169808,4488],{"class":49},[36,169810,169811,169813,169815,169818],{"class":38,"line":46},[36,169812,169528],{"class":416},[36,169814,169531],{"class":49},[36,169816,169817],{"class":998},"\"中文内容\"",[36,169819,75],{"class":49},[21,169821,169823],{"id":169822},"_89-pathlib","8.9 pathlib",[14,169825,169826,169829],{},[33,169827,169828],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[26,169831,169833],{"className":28,"code":169832,"language":30,"meta":31,"style":31},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[33,169834,169835,169845,169849,169867],{"__ignoreMap":31},[36,169836,169837,169839,169841,169843],{"class":38,"line":39},[36,169838,31479],{"class":53},[36,169840,108955],{"class":49},[36,169842,31135],{"class":53},[36,169844,108960],{"class":49},[36,169846,169847],{"class":38,"line":46},[36,169848,194],{"emptyLinePlaceholder":193},[36,169850,169851,169853,169855,169857,169860,169862,169864],{"class":38,"line":78},[36,169852,168955],{"class":49},[36,169854,54],{"class":53},[36,169856,109189],{"class":49},[36,169858,169859],{"class":998},"\"data\"",[36,169861,14458],{"class":49},[36,169863,1466],{"class":53},[36,169865,169866],{"class":998}," \"students.txt\"\n",[36,169868,169869,169871],{"class":38,"line":125},[36,169870,199],{"class":60},[36,169872,169873],{"class":49},"(path)\n",[14,169875,169876],{},"创建目录：",[26,169878,169880],{"className":28,"code":169879,"language":30,"meta":31,"style":31},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[33,169881,169882,169892,169896,169909],{"__ignoreMap":31},[36,169883,169884,169886,169888,169890],{"class":38,"line":39},[36,169885,31479],{"class":53},[36,169887,108955],{"class":49},[36,169889,31135],{"class":53},[36,169891,108960],{"class":49},[36,169893,169894],{"class":38,"line":46},[36,169895,194],{"emptyLinePlaceholder":193},[36,169897,169898,169901,169903,169905,169907],{"class":38,"line":78},[36,169899,169900],{"class":49},"data_dir ",[36,169902,54],{"class":53},[36,169904,109189],{"class":49},[36,169906,169859],{"class":998},[36,169908,75],{"class":49},[36,169910,169911,169914,169917,169919,169921],{"class":38,"line":125},[36,169912,169913],{"class":49},"data_dir.mkdir(",[36,169915,169916],{"class":416},"exist_ok",[36,169918,54],{"class":53},[36,169920,32218],{"class":60},[36,169922,75],{"class":49},[14,169924,169925],{},"判断文件是否存在：",[26,169927,169929],{"className":28,"code":169928,"language":30,"meta":31,"style":31},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[33,169930,169931,169944,169948,169955],{"__ignoreMap":31},[36,169932,169933,169935,169937,169939,169942],{"class":38,"line":39},[36,169934,168955],{"class":49},[36,169936,54],{"class":53},[36,169938,109189],{"class":49},[36,169940,169941],{"class":998},"\"data\u002Fstudents.txt\"",[36,169943,75],{"class":49},[36,169945,169946],{"class":38,"line":46},[36,169947,194],{"emptyLinePlaceholder":193},[36,169949,169950,169952],{"class":38,"line":78},[36,169951,2281],{"class":53},[36,169953,169954],{"class":49}," path.exists():\n",[36,169956,169957,169959,169961,169964],{"class":38,"line":125},[36,169958,32041],{"class":60},[36,169960,901],{"class":49},[36,169962,169963],{"class":998},"\"文件存在\"",[36,169965,75],{"class":49},[14,169967,169968],{},"读写文本：",[26,169970,169972],{"className":28,"code":169971,"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,169973,169974,169986,169990,170007,170024],{"__ignoreMap":31},[36,169975,169976,169978,169980,169982,169984],{"class":38,"line":39},[36,169977,168955],{"class":49},[36,169979,54],{"class":53},[36,169981,109189],{"class":49},[36,169983,147440],{"class":998},[36,169985,75],{"class":49},[36,169987,169988],{"class":38,"line":46},[36,169989,194],{"emptyLinePlaceholder":193},[36,169991,169992,169995,169997,169999,170001,170003,170005],{"class":38,"line":78},[36,169993,169994],{"class":49},"path.write_text(",[36,169996,146520],{"class":998},[36,169998,154],{"class":49},[36,170000,147450],{"class":416},[36,170002,54],{"class":53},[36,170004,147455],{"class":998},[36,170006,75],{"class":49},[36,170008,170009,170011,170013,170016,170018,170020,170022],{"class":38,"line":125},[36,170010,169138],{"class":49},[36,170012,54],{"class":53},[36,170014,170015],{"class":49}," path.read_text(",[36,170017,147450],{"class":416},[36,170019,54],{"class":53},[36,170021,147455],{"class":998},[36,170023,75],{"class":49},[36,170025,170026,170028],{"class":38,"line":131},[36,170027,199],{"class":60},[36,170029,169152],{"class":49},[21,170031,170033],{"id":170032},"_810-json文件","8.10 JSON文件",[14,170035,170036],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[26,170038,170040],{"className":28,"code":170039,"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,170041,170042,170048,170052,170060,170070,170080,170088,170092,170096,170121],{"__ignoreMap":31},[36,170043,170044,170046],{"class":38,"line":39},[36,170045,31135],{"class":53},[36,170047,147735],{"class":49},[36,170049,170050],{"class":38,"line":46},[36,170051,194],{"emptyLinePlaceholder":193},[36,170053,170054,170056,170058],{"class":38,"line":78},[36,170055,150125],{"class":49},[36,170057,54],{"class":53},[36,170059,16316],{"class":49},[36,170061,170062,170064,170066,170068],{"class":38,"line":125},[36,170063,147664],{"class":998},[36,170065,52179],{"class":49},[36,170067,150532],{"class":998},[36,170069,32208],{"class":49},[36,170071,170072,170074,170076,170078],{"class":38,"line":131},[36,170073,165181],{"class":998},[36,170075,52179],{"class":49},[36,170077,1532],{"class":60},[36,170079,32208],{"class":49},[36,170081,170082,170084,170086],{"class":38,"line":396},[36,170083,165192],{"class":998},[36,170085,52179],{"class":49},[36,170087,165197],{"class":60},[36,170089,170090],{"class":38,"line":407},[36,170091,2315],{"class":49},[36,170093,170094],{"class":38,"line":2061},[36,170095,194],{"emptyLinePlaceholder":193},[36,170097,170098,170100,170102,170105,170107,170109,170111,170113,170115,170117,170119],{"class":38,"line":2067},[36,170099,157088],{"class":49},[36,170101,54],{"class":53},[36,170103,170104],{"class":49}," json.dumps(student, ",[36,170106,147781],{"class":416},[36,170108,54],{"class":53},[36,170110,34729],{"class":60},[36,170112,154],{"class":49},[36,170114,152656],{"class":416},[36,170116,54],{"class":53},[36,170118,181],{"class":60},[36,170120,75],{"class":49},[36,170122,170123,170125],{"class":38,"line":2079},[36,170124,199],{"class":60},[36,170126,164715],{"class":49},[14,170128,170129],{},"写入 JSON 文件：",[26,170131,170133],{"className":28,"code":170132,"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,170134,170135,170141,170145,170153,170181,170209,170213,170217,170247],{"__ignoreMap":31},[36,170136,170137,170139],{"class":38,"line":39},[36,170138,31135],{"class":53},[36,170140,147735],{"class":49},[36,170142,170143],{"class":38,"line":46},[36,170144,194],{"emptyLinePlaceholder":193},[36,170146,170147,170149,170151],{"class":38,"line":78},[36,170148,160360],{"class":49},[36,170150,54],{"class":53},[36,170152,56189],{"class":49},[36,170154,170155,170157,170159,170161,170163,170165,170167,170169,170171,170173,170175,170177,170179],{"class":38,"line":125},[36,170156,149029],{"class":49},[36,170158,63421],{"class":998},[36,170160,52179],{"class":49},[36,170162,150532],{"class":998},[36,170164,154],{"class":49},[36,170166,69866],{"class":998},[36,170168,52179],{"class":49},[36,170170,1532],{"class":60},[36,170172,154],{"class":49},[36,170174,152116],{"class":998},[36,170176,52179],{"class":49},[36,170178,1868],{"class":60},[36,170180,5678],{"class":49},[36,170182,170183,170185,170187,170189,170191,170193,170195,170197,170199,170201,170203,170205,170207],{"class":38,"line":131},[36,170184,149029],{"class":49},[36,170186,63421],{"class":998},[36,170188,52179],{"class":49},[36,170190,151580],{"class":998},[36,170192,154],{"class":49},[36,170194,69866],{"class":998},[36,170196,52179],{"class":49},[36,170198,1507],{"class":60},[36,170200,154],{"class":49},[36,170202,152116],{"class":998},[36,170204,52179],{"class":49},[36,170206,1691],{"class":60},[36,170208,5678],{"class":49},[36,170210,170211],{"class":38,"line":396},[36,170212,33988],{"class":49},[36,170214,170215],{"class":38,"line":407},[36,170216,194],{"emptyLinePlaceholder":193},[36,170218,170219,170221,170223,170225,170227,170229,170231,170233,170235,170237,170239,170241,170243,170245],{"class":38,"line":2061},[36,170220,108477],{"class":53},[36,170222,147435],{"class":60},[36,170224,901],{"class":49},[36,170226,152475],{"class":998},[36,170228,154],{"class":49},[36,170230,152620],{"class":998},[36,170232,154],{"class":49},[36,170234,147450],{"class":416},[36,170236,54],{"class":53},[36,170238,147455],{"class":998},[36,170240,14458],{"class":49},[36,170242,32125],{"class":53},[36,170244,148797],{"class":416},[36,170246,4488],{"class":49},[36,170248,170249,170252,170254,170256,170258,170260,170262,170264,170266,170268,170270],{"class":38,"line":2067},[36,170250,170251],{"class":49},"    json.dump(students, ",[36,170253,46096],{"class":416},[36,170255,154],{"class":49},[36,170257,147781],{"class":416},[36,170259,54],{"class":53},[36,170261,34729],{"class":60},[36,170263,154],{"class":49},[36,170265,152656],{"class":416},[36,170267,54],{"class":53},[36,170269,181],{"class":60},[36,170271,75],{"class":49},[14,170273,170274],{},"读取 JSON 文件：",[26,170276,170278],{"className":28,"code":170277,"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,170279,170280,170286,170290,170320,170332,170336],{"__ignoreMap":31},[36,170281,170282,170284],{"class":38,"line":39},[36,170283,31135],{"class":53},[36,170285,147735],{"class":49},[36,170287,170288],{"class":38,"line":46},[36,170289,194],{"emptyLinePlaceholder":193},[36,170291,170292,170294,170296,170298,170300,170302,170304,170306,170308,170310,170312,170314,170316,170318],{"class":38,"line":78},[36,170293,108477],{"class":53},[36,170295,147435],{"class":60},[36,170297,901],{"class":49},[36,170299,152475],{"class":998},[36,170301,154],{"class":49},[36,170303,147445],{"class":998},[36,170305,154],{"class":49},[36,170307,147450],{"class":416},[36,170309,54],{"class":53},[36,170311,147455],{"class":998},[36,170313,14458],{"class":49},[36,170315,32125],{"class":53},[36,170317,148797],{"class":416},[36,170319,4488],{"class":49},[36,170321,170322,170324,170326,170328,170330],{"class":38,"line":125},[36,170323,153681],{"class":49},[36,170325,54],{"class":53},[36,170327,148808],{"class":49},[36,170329,46096],{"class":416},[36,170331,75],{"class":49},[36,170333,170334],{"class":38,"line":131},[36,170335,194],{"emptyLinePlaceholder":193},[36,170337,170338,170340],{"class":38,"line":396},[36,170339,199],{"class":60},[36,170341,165639],{"class":49},[21,170343,170345],{"id":170344},"_811-csv文件","8.11 CSV文件",[14,170347,170348],{},"CSV 是逗号分隔值，常用于表格数据。",[14,170350,170351],{},"写入 CSV：",[26,170353,170355],{"className":28,"code":170354,"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,170356,170357,170364,170368,170376,170394,170410,170426,170430,170434,170474,170488],{"__ignoreMap":31},[36,170358,170359,170361],{"class":38,"line":39},[36,170360,31135],{"class":53},[36,170362,170363],{"class":49}," csv\n",[36,170365,170366],{"class":38,"line":46},[36,170367,194],{"emptyLinePlaceholder":193},[36,170369,170370,170372,170374],{"class":38,"line":78},[36,170371,160360],{"class":49},[36,170373,54],{"class":53},[36,170375,56189],{"class":49},[36,170377,170378,170381,170383,170385,170387,170389,170392],{"class":38,"line":125},[36,170379,170380],{"class":49},"    [",[36,170382,73841],{"class":998},[36,170384,154],{"class":49},[36,170386,73874],{"class":998},[36,170388,154],{"class":49},[36,170390,170391],{"class":998},"\"成绩\"",[36,170393,88578],{"class":49},[36,170395,170396,170398,170400,170402,170404,170406,170408],{"class":38,"line":131},[36,170397,170380],{"class":49},[36,170399,150532],{"class":998},[36,170401,154],{"class":49},[36,170403,1532],{"class":60},[36,170405,154],{"class":49},[36,170407,1868],{"class":60},[36,170409,88578],{"class":49},[36,170411,170412,170414,170416,170418,170420,170422,170424],{"class":38,"line":396},[36,170413,170380],{"class":49},[36,170415,151580],{"class":998},[36,170417,154],{"class":49},[36,170419,1507],{"class":60},[36,170421,154],{"class":49},[36,170423,1691],{"class":60},[36,170425,88578],{"class":49},[36,170427,170428],{"class":38,"line":407},[36,170429,33988],{"class":49},[36,170431,170432],{"class":38,"line":2061},[36,170433,194],{"emptyLinePlaceholder":193},[36,170435,170436,170438,170440,170442,170445,170447,170449,170451,170453,170455,170457,170459,170462,170464,170466,170468,170470,170472],{"class":38,"line":2067},[36,170437,108477],{"class":53},[36,170439,147435],{"class":60},[36,170441,901],{"class":49},[36,170443,170444],{"class":998},"\"students.csv\"",[36,170446,154],{"class":49},[36,170448,152620],{"class":998},[36,170450,154],{"class":49},[36,170452,147450],{"class":416},[36,170454,54],{"class":53},[36,170456,147455],{"class":998},[36,170458,154],{"class":49},[36,170460,170461],{"class":416},"newline",[36,170463,54],{"class":53},[36,170465,8399],{"class":998},[36,170467,14458],{"class":49},[36,170469,32125],{"class":53},[36,170471,148797],{"class":416},[36,170473,4488],{"class":49},[36,170475,170476,170479,170481,170484,170486],{"class":38,"line":2079},[36,170477,170478],{"class":49},"    writer ",[36,170480,54],{"class":53},[36,170482,170483],{"class":49}," csv.writer(",[36,170485,46096],{"class":416},[36,170487,75],{"class":49},[36,170489,170490],{"class":38,"line":2362},[36,170491,170492],{"class":49},"    writer.writerows(students)\n",[14,170494,170495],{},"读取 CSV：",[26,170497,170499],{"className":28,"code":170498,"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,170500,170501,170507,170511,170541,170555,170567],{"__ignoreMap":31},[36,170502,170503,170505],{"class":38,"line":39},[36,170504,31135],{"class":53},[36,170506,170363],{"class":49},[36,170508,170509],{"class":38,"line":46},[36,170510,194],{"emptyLinePlaceholder":193},[36,170512,170513,170515,170517,170519,170521,170523,170525,170527,170529,170531,170533,170535,170537,170539],{"class":38,"line":78},[36,170514,108477],{"class":53},[36,170516,147435],{"class":60},[36,170518,901],{"class":49},[36,170520,170444],{"class":998},[36,170522,154],{"class":49},[36,170524,147445],{"class":998},[36,170526,154],{"class":49},[36,170528,147450],{"class":416},[36,170530,54],{"class":53},[36,170532,147455],{"class":998},[36,170534,14458],{"class":49},[36,170536,32125],{"class":53},[36,170538,148797],{"class":416},[36,170540,4488],{"class":49},[36,170542,170543,170546,170548,170551,170553],{"class":38,"line":125},[36,170544,170545],{"class":49},"    reader ",[36,170547,54],{"class":53},[36,170549,170550],{"class":49}," csv.reader(",[36,170552,46096],{"class":416},[36,170554,75],{"class":49},[36,170556,170557,170559,170562,170564],{"class":38,"line":131},[36,170558,3950],{"class":53},[36,170560,170561],{"class":49}," row ",[36,170563,26788],{"class":53},[36,170565,170566],{"class":49}," reader:\n",[36,170568,170569,170571],{"class":38,"line":396},[36,170570,33193],{"class":60},[36,170572,170573],{"class":49},"(row)\n",[14,170575,170576],{},"使用字典写入：",[26,170578,170580],{"className":28,"code":170579,"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,170581,170582,170588,170592,170600,170628,170656,170660,170664,170702,170723,170744,170749],{"__ignoreMap":31},[36,170583,170584,170586],{"class":38,"line":39},[36,170585,31135],{"class":53},[36,170587,170363],{"class":49},[36,170589,170590],{"class":38,"line":46},[36,170591,194],{"emptyLinePlaceholder":193},[36,170593,170594,170596,170598],{"class":38,"line":78},[36,170595,160360],{"class":49},[36,170597,54],{"class":53},[36,170599,56189],{"class":49},[36,170601,170602,170604,170606,170608,170610,170612,170614,170616,170618,170620,170622,170624,170626],{"class":38,"line":125},[36,170603,149029],{"class":49},[36,170605,63421],{"class":998},[36,170607,52179],{"class":49},[36,170609,150532],{"class":998},[36,170611,154],{"class":49},[36,170613,69866],{"class":998},[36,170615,52179],{"class":49},[36,170617,1532],{"class":60},[36,170619,154],{"class":49},[36,170621,152116],{"class":998},[36,170623,52179],{"class":49},[36,170625,1868],{"class":60},[36,170627,5678],{"class":49},[36,170629,170630,170632,170634,170636,170638,170640,170642,170644,170646,170648,170650,170652,170654],{"class":38,"line":131},[36,170631,149029],{"class":49},[36,170633,63421],{"class":998},[36,170635,52179],{"class":49},[36,170637,151580],{"class":998},[36,170639,154],{"class":49},[36,170641,69866],{"class":998},[36,170643,52179],{"class":49},[36,170645,1507],{"class":60},[36,170647,154],{"class":49},[36,170649,152116],{"class":998},[36,170651,52179],{"class":49},[36,170653,1691],{"class":60},[36,170655,5678],{"class":49},[36,170657,170658],{"class":38,"line":396},[36,170659,33988],{"class":49},[36,170661,170662],{"class":38,"line":407},[36,170663,194],{"emptyLinePlaceholder":193},[36,170665,170666,170668,170670,170672,170674,170676,170678,170680,170682,170684,170686,170688,170690,170692,170694,170696,170698,170700],{"class":38,"line":2061},[36,170667,108477],{"class":53},[36,170669,147435],{"class":60},[36,170671,901],{"class":49},[36,170673,170444],{"class":998},[36,170675,154],{"class":49},[36,170677,152620],{"class":998},[36,170679,154],{"class":49},[36,170681,147450],{"class":416},[36,170683,54],{"class":53},[36,170685,147455],{"class":998},[36,170687,154],{"class":49},[36,170689,170461],{"class":416},[36,170691,54],{"class":53},[36,170693,8399],{"class":998},[36,170695,14458],{"class":49},[36,170697,32125],{"class":53},[36,170699,148797],{"class":416},[36,170701,4488],{"class":49},[36,170703,170704,170707,170709,170711,170713,170715,170717,170719,170721],{"class":38,"line":2067},[36,170705,170706],{"class":49},"    fieldnames ",[36,170708,54],{"class":53},[36,170710,52968],{"class":49},[36,170712,63421],{"class":998},[36,170714,154],{"class":49},[36,170716,69866],{"class":998},[36,170718,154],{"class":49},[36,170720,152116],{"class":998},[36,170722,33988],{"class":49},[36,170724,170725,170727,170729,170732,170734,170736,170739,170741],{"class":38,"line":2079},[36,170726,170478],{"class":49},[36,170728,54],{"class":53},[36,170730,170731],{"class":49}," csv.DictWriter(",[36,170733,46096],{"class":416},[36,170735,154],{"class":49},[36,170737,170738],{"class":416},"fieldnames",[36,170740,54],{"class":53},[36,170742,170743],{"class":49},"fieldnames)\n",[36,170745,170746],{"class":38,"line":2362},[36,170747,170748],{"class":49},"    writer.writeheader()\n",[36,170750,170751],{"class":38,"line":2367},[36,170752,170492],{"class":49},[21,170754,170756],{"id":170755},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170758,123936],{},[851,170760,170761,170764,170767],{},[854,170762,170763],{},"读取文本文件。",[854,170765,170766],{},"统计每个单词出现次数。",[854,170768,170769],{},"输出出现次数最多的前 10 个单词。",[14,170771,10782],{},[26,170773,170775],{"className":28,"code":170774,"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,170776,170777,170787,170791,170804,170820,170824,170834,170843,170847,170859,170879,170888,170892,170910,170914,170944,170948,170964],{"__ignoreMap":31},[36,170778,170779,170781,170783,170785],{"class":38,"line":39},[36,170780,31479],{"class":53},[36,170782,108955],{"class":49},[36,170784,31135],{"class":53},[36,170786,108960],{"class":49},[36,170788,170789],{"class":38,"line":46},[36,170790,194],{"emptyLinePlaceholder":193},[36,170792,170793,170795,170797,170799,170802],{"class":38,"line":78},[36,170794,168955],{"class":49},[36,170796,54],{"class":53},[36,170798,109189],{"class":49},[36,170800,170801],{"class":998},"\"article.txt\"",[36,170803,75],{"class":49},[36,170805,170806,170808,170810,170812,170814,170816,170818],{"class":38,"line":125},[36,170807,169138],{"class":49},[36,170809,54],{"class":53},[36,170811,170015],{"class":49},[36,170813,147450],{"class":416},[36,170815,54],{"class":53},[36,170817,147455],{"class":998},[36,170819,75],{"class":49},[36,170821,170822],{"class":38,"line":131},[36,170823,194],{"emptyLinePlaceholder":193},[36,170825,170826,170829,170831],{"class":38,"line":396},[36,170827,170828],{"class":49},"words ",[36,170830,54],{"class":53},[36,170832,170833],{"class":49}," content.lower().split()\n",[36,170835,170836,170839,170841],{"class":38,"line":407},[36,170837,170838],{"class":49},"counter ",[36,170840,54],{"class":53},[36,170842,88610],{"class":49},[36,170844,170845],{"class":38,"line":2061},[36,170846,194],{"emptyLinePlaceholder":193},[36,170848,170849,170851,170854,170856],{"class":38,"line":2067},[36,170850,3774],{"class":53},[36,170852,170853],{"class":49}," word ",[36,170855,26788],{"class":53},[36,170857,170858],{"class":49}," words:\n",[36,170860,170861,170864,170866,170869,170872,170874,170877],{"class":38,"line":2079},[36,170862,170863],{"class":49},"    word ",[36,170865,54],{"class":53},[36,170867,170868],{"class":49}," word.strip(",[36,170870,170871],{"class":998},"\".,!?;:",[36,170873,157139],{"class":60},[36,170875,170876],{"class":998},"'()[]\"",[36,170878,75],{"class":49},[36,170880,170881,170883,170885],{"class":38,"line":2362},[36,170882,3850],{"class":53},[36,170884,39672],{"class":53},[36,170886,170887],{"class":49}," word:\n",[36,170889,170890],{"class":38,"line":2367},[36,170891,149156],{"class":53},[36,170893,170894,170897,170899,170902,170904,170906,170908],{"class":38,"line":2373},[36,170895,170896],{"class":49},"    counter[word] ",[36,170898,54],{"class":53},[36,170900,170901],{"class":49}," counter.get(word, ",[36,170903,643],{"class":60},[36,170905,14458],{"class":49},[36,170907,1365],{"class":53},[36,170909,56441],{"class":60},[36,170911,170912],{"class":38,"line":2378},[36,170913,194],{"emptyLinePlaceholder":193},[36,170915,170916,170919,170921,170923,170926,170928,170930,170932,170934,170936,170938,170940,170942],{"class":38,"line":2392},[36,170917,170918],{"class":49},"items ",[36,170920,54],{"class":53},[36,170922,164248],{"class":60},[36,170924,170925],{"class":49},"(counter.items(), ",[36,170927,154590],{"class":416},[36,170929,154593],{"class":53},[36,170931,154596],{"class":49},[36,170933,61],{"class":60},[36,170935,112846],{"class":49},[36,170937,164172],{"class":416},[36,170939,54],{"class":53},[36,170941,32218],{"class":60},[36,170943,75],{"class":49},[36,170945,170946],{"class":38,"line":2397},[36,170947,194],{"emptyLinePlaceholder":193},[36,170949,170950,170952,170955,170957,170960,170962],{"class":38,"line":2403},[36,170951,3774],{"class":53},[36,170953,170954],{"class":49}," word, count ",[36,170956,26788],{"class":53},[36,170958,170959],{"class":49}," items[:",[36,170961,332],{"class":60},[36,170963,166399],{"class":49},[36,170965,170966,170968],{"class":38,"line":2424},[36,170967,32041],{"class":60},[36,170969,170970],{"class":49},"(word, count)\n",[21,170972,170974],{"id":170973},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[26,170976,170978],{"className":28,"code":170977,"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,170979,170980,170986,170996,171000,171012,171016,171020,171028,171038,171044,171048,171078,171088,171092,171096,171104,171134,171158,171162,171166,171174,171203,171208],{"__ignoreMap":31},[36,170981,170982,170984],{"class":38,"line":39},[36,170983,31135],{"class":53},[36,170985,147735],{"class":49},[36,170987,170988,170990,170992,170994],{"class":38,"line":46},[36,170989,31479],{"class":53},[36,170991,108955],{"class":49},[36,170993,31135],{"class":53},[36,170995,108960],{"class":49},[36,170997,170998],{"class":38,"line":78},[36,170999,194],{"emptyLinePlaceholder":193},[36,171001,171002,171004,171006,171008,171010],{"class":38,"line":125},[36,171003,152468],{"class":60},[36,171005,14308],{"class":53},[36,171007,109189],{"class":49},[36,171009,152475],{"class":998},[36,171011,75],{"class":49},[36,171013,171014],{"class":38,"line":131},[36,171015,194],{"emptyLinePlaceholder":193},[36,171017,171018],{"class":38,"line":396},[36,171019,194],{"emptyLinePlaceholder":193},[36,171021,171022,171024,171026],{"class":38,"line":407},[36,171023,32689],{"class":53},[36,171025,152492],{"class":2713},[36,171027,32695],{"class":49},[36,171029,171030,171032,171034,171036],{"class":38,"line":2061},[36,171031,3850],{"class":53},[36,171033,39672],{"class":53},[36,171035,152503],{"class":60},[36,171037,152506],{"class":49},[36,171039,171040,171042],{"class":38,"line":2067},[36,171041,15496],{"class":53},[36,171043,52580],{"class":49},[36,171045,171046],{"class":38,"line":2079},[36,171047,194],{"emptyLinePlaceholder":193},[36,171049,171050,171052,171054,171056,171058,171060,171062,171064,171066,171068,171070,171072,171074,171076],{"class":38,"line":2362},[36,171051,34920],{"class":53},[36,171053,147435],{"class":60},[36,171055,901],{"class":49},[36,171057,152468],{"class":60},[36,171059,154],{"class":49},[36,171061,147445],{"class":998},[36,171063,154],{"class":49},[36,171065,147450],{"class":416},[36,171067,54],{"class":53},[36,171069,147455],{"class":998},[36,171071,14458],{"class":49},[36,171073,32125],{"class":53},[36,171075,148797],{"class":416},[36,171077,4488],{"class":49},[36,171079,171080,171082,171084,171086],{"class":38,"line":2367},[36,171081,15496],{"class":53},[36,171083,148808],{"class":49},[36,171085,46096],{"class":416},[36,171087,75],{"class":49},[36,171089,171090],{"class":38,"line":2373},[36,171091,194],{"emptyLinePlaceholder":193},[36,171093,171094],{"class":38,"line":2378},[36,171095,194],{"emptyLinePlaceholder":193},[36,171097,171098,171100,171102],{"class":38,"line":2392},[36,171099,32689],{"class":53},[36,171101,152602],{"class":2713},[36,171103,152605],{"class":49},[36,171105,171106,171108,171110,171112,171114,171116,171118,171120,171122,171124,171126,171128,171130,171132],{"class":38,"line":2397},[36,171107,34920],{"class":53},[36,171109,147435],{"class":60},[36,171111,901],{"class":49},[36,171113,152468],{"class":60},[36,171115,154],{"class":49},[36,171117,152620],{"class":998},[36,171119,154],{"class":49},[36,171121,147450],{"class":416},[36,171123,54],{"class":53},[36,171125,147455],{"class":998},[36,171127,14458],{"class":49},[36,171129,32125],{"class":53},[36,171131,148797],{"class":416},[36,171133,4488],{"class":49},[36,171135,171136,171138,171140,171142,171144,171146,171148,171150,171152,171154,171156],{"class":38,"line":2403},[36,171137,152641],{"class":49},[36,171139,46096],{"class":416},[36,171141,154],{"class":49},[36,171143,147781],{"class":416},[36,171145,54],{"class":53},[36,171147,34729],{"class":60},[36,171149,154],{"class":49},[36,171151,152656],{"class":416},[36,171153,54],{"class":53},[36,171155,181],{"class":60},[36,171157,75],{"class":49},[36,171159,171160],{"class":38,"line":2424},[36,171161,194],{"emptyLinePlaceholder":193},[36,171163,171164],{"class":38,"line":2429},[36,171165,194],{"emptyLinePlaceholder":193},[36,171167,171168,171170,171172],{"class":38,"line":2443},[36,171169,160360],{"class":49},[36,171171,54],{"class":53},[36,171173,153686],{"class":49},[36,171175,171176,171179,171181,171183,171185,171187,171189,171191,171193,171195,171197,171199,171201],{"class":38,"line":2448},[36,171177,171178],{"class":49},"students.append({",[36,171180,63421],{"class":998},[36,171182,52179],{"class":49},[36,171184,150532],{"class":998},[36,171186,154],{"class":49},[36,171188,69866],{"class":998},[36,171190,52179],{"class":49},[36,171192,1532],{"class":60},[36,171194,154],{"class":49},[36,171196,152116],{"class":998},[36,171198,52179],{"class":49},[36,171200,1868],{"class":60},[36,171202,165796],{"class":49},[36,171204,171205],{"class":38,"line":2477},[36,171206,171207],{"class":49},"save_students(students)\n",[36,171209,171210,171212,171214,171217],{"class":38,"line":2482},[36,171211,199],{"class":60},[36,171213,901],{"class":49},[36,171215,171216],{"class":998},"\"保存成功\"",[36,171218,75],{"class":49},[21,171220,171222],{"id":171221},"_814-易错点","8.14 易错点",[851,171224,171225,171229,171235,171240,171247,171254],{},[854,171226,171227,169488],{},[33,171228,1675],{},[854,171230,171231,171232,29130],{},"读写中文要指定 ",[33,171233,171234],{},"encoding=\"utf-8\"",[854,171236,171237,171238,29130],{},"打开文件后要关闭，推荐使用 ",[33,171239,108477],{},[854,171241,171242,171243,171246],{},"读取大文件不要直接 ",[33,171244,171245],{},"read()"," 全部内容。",[854,171248,171249,171250,171253],{},"Windows 写 CSV 时建议加 ",[33,171251,171252],{},"newline=\"\"","，避免空行。",[854,171255,171256],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[21,171258,171260],{"id":171259},"_815-本章练习","8.15 本章练习",[851,171262,171263,171270,171275,171278,171281],{},[854,171264,171265,171266,171269],{},"写入一个 ",[33,171267,171268],{},"students.txt","，每行保存一个学生姓名。",[854,171271,104999,171272,171274],{},[33,171273,171268],{}," 并输出所有学生。",[854,171276,171277],{},"把学生列表保存为 JSON 文件。",[854,171279,171280],{},"从 JSON 文件读取学生数据，计算平均分。",[854,171282,171283,171284,171287,171288,171291],{},"写一个日志函数 ",[33,171285,171286],{},"write_log(message)","，每次调用向 ",[33,171289,171290],{},"app.log"," 追加一行。",[807,171293,171294],{},"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":46,"depth":46,"links":171296},[171297,171298,171302,171303,171309,171310,171311,171312,171313,171314,171315,171316,171317,171318,171319],{"id":168808,"depth":46,"text":168809},{"id":168849,"depth":46,"text":168850,"children":171299},[171300,171301],{"id":168853,"depth":78,"text":168854},{"id":168887,"depth":78,"text":168888},{"id":169001,"depth":46,"text":169002},{"id":169094,"depth":46,"text":169095,"children":171304},[171305,171306,171307,171308],{"id":169098,"depth":78,"text":169099},{"id":169185,"depth":78,"text":169186},{"id":169255,"depth":78,"text":169256},{"id":169349,"depth":78,"text":169350},{"id":169419,"depth":46,"text":169420},{"id":169482,"depth":46,"text":169483},{"id":169643,"depth":46,"text":169644},{"id":169706,"depth":46,"text":169707},{"id":169822,"depth":46,"text":169823},{"id":170032,"depth":46,"text":170033},{"id":170344,"depth":46,"text":170345},{"id":170755,"depth":46,"text":170756},{"id":170973,"depth":46,"text":170974},{"id":171221,"depth":46,"text":171222},{"id":171259,"depth":46,"text":171260},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168800,"description":823},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171326,"title":171327,"body":171328,"description":823,"extension":824,"meta":173514,"navigation":193,"path":173515,"seo":173516,"stem":173517,"__hash__":173518},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171329,"toc":173481},[171330,171333,171337,171340,171343,171435,171437,171456,171461,171465,171468,171471,171500,171507,171510,171514,171517,171546,171548,171600,171606,171659,171663,171761,171764,171831,171835,171892,171894,171900,171904,171909,171915,172006,172011,172015,172018,172096,172099,172137,172141,172259,172262,172266,172269,172314,172317,172321,172326,172332,172382,172385,172416,172420,172424,172454,172458,172493,172497,172532,172572,172576,172592,172595,172599,172603,172682,172686,172727,172731,172786,172790,172824,172828,172858,172867,172874,172880,172937,172940,172948,172951,172955,172962,172965,172971,172974,172991,172996,173000,173006,173019,173022,173059,173062,173073,173076,173090,173093,173107,173111,173118,173151,173154,173156,173162,173165,173169,173171,173177,173182,173355,173359,173422,173426,173450,173454,173478],[10,171331,171327],{"id":171332},"_9-异常模块与包",[21,171334,171336],{"id":171335},"_91-什么是异常","9.1 什么是异常",[14,171338,171339],{},"异常是程序运行过程中出现的错误。",[14,171341,171342],{},"常见异常：",[1031,171344,171345,171354],{},[1034,171346,171347],{},[1037,171348,171349,171352],{},[1040,171350,171351],{},"异常",[1040,171353,26614],{},[1078,171355,171356,171366,171376,171385,171395,171405,171415,171425],{},[1037,171357,171358,171363],{},[1083,171359,171360],{},[33,171361,171362],{},"NameError",[1083,171364,171365],{},"使用了未定义变量",[1037,171367,171368,171373],{},[1083,171369,171370],{},[33,171371,171372],{},"TypeError",[1083,171374,171375],{},"类型不匹配",[1037,171377,171378,171382],{},[1083,171379,171380],{},[33,171381,155478],{},[1083,171383,171384],{},"值不合法",[1037,171386,171387,171392],{},[1083,171388,171389],{},[33,171390,171391],{},"IndexError",[1083,171393,171394],{},"列表索引越界",[1037,171396,171397,171402],{},[1083,171398,171399],{},[33,171400,171401],{},"KeyError",[1083,171403,171404],{},"字典 key 不存在",[1037,171406,171407,171412],{},[1083,171408,171409],{},[33,171410,171411],{},"FileNotFoundError",[1083,171413,171414],{},"文件不存在",[1037,171416,171417,171422],{},[1083,171418,171419],{},[33,171420,171421],{},"ZeroDivisionError",[1083,171423,171424],{},"除数为 0",[1037,171426,171427,171432],{},[1083,171428,171429],{},[33,171430,171431],{},"ImportError",[1083,171433,171434],{},"导入失败",[14,171436,15879],{},[26,171438,171440],{"className":28,"code":171439,"language":30,"meta":31,"style":31},"num = int(\"abc\")\n",[33,171441,171442],{"__ignoreMap":31},[36,171443,171444,171446,171448,171450,171452,171454],{"class":38,"line":39},[36,171445,156431],{"class":49},[36,171447,54],{"class":53},[36,171449,3132],{"class":60},[36,171451,901],{"class":49},[36,171453,156524],{"class":998},[36,171455,75],{"class":49},[14,171457,171458,171459,29130],{},"会触发 ",[33,171460,155478],{},[21,171462,171464],{"id":171463},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,171466,171467],{},"如果不处理异常，程序会直接终止。",[14,171469,171470],{},"例如用户输入年龄：",[26,171472,171474],{"className":28,"code":171473,"language":30,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[33,171475,171476,171494],{"__ignoreMap":31},[36,171477,171478,171480,171482,171484,171486,171488,171490,171492],{"class":38,"line":39},[36,171479,147190],{"class":49},[36,171481,54],{"class":53},[36,171483,3132],{"class":60},[36,171485,901],{"class":49},[36,171487,54563],{"class":60},[36,171489,901],{"class":49},[36,171491,153038],{"class":998},[36,171493,31239],{"class":49},[36,171495,171496,171498],{"class":38,"line":46},[36,171497,199],{"class":60},[36,171499,156405],{"class":49},[14,171501,171502,171503,171506],{},"用户输入 ",[33,171504,171505],{},"abc","，程序就会报错退出。",[14,171508,171509],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[21,171511,171513],{"id":171512},"_93-try-except","9.3 try except",[14,171515,171516],{},"基础语法：",[26,171518,171520],{"className":28,"code":171519,"language":30,"meta":31,"style":31},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[33,171521,171522,171529,171534,171541],{"__ignoreMap":31},[36,171523,171524,171527],{"class":38,"line":39},[36,171525,171526],{"class":53},"try",[36,171528,4488],{"class":49},[36,171530,171531],{"class":38,"line":46},[36,171532,171533],{"class":49},"    可能出错的代码\n",[36,171535,171536,171539],{"class":38,"line":78},[36,171537,171538],{"class":53},"except",[36,171540,4488],{"class":49},[36,171542,171543],{"class":38,"line":125},[36,171544,171545],{"class":49},"    出错后的处理代码\n",[14,171547,15879],{},[26,171549,171551],{"className":28,"code":171550,"language":30,"meta":31,"style":31},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[33,171552,171553,171559,171577,171583,171589],{"__ignoreMap":31},[36,171554,171555,171557],{"class":38,"line":39},[36,171556,171526],{"class":53},[36,171558,4488],{"class":49},[36,171560,171561,171563,171565,171567,171569,171571,171573,171575],{"class":38,"line":46},[36,171562,153030],{"class":49},[36,171564,54],{"class":53},[36,171566,3132],{"class":60},[36,171568,901],{"class":49},[36,171570,54563],{"class":60},[36,171572,901],{"class":49},[36,171574,153038],{"class":998},[36,171576,31239],{"class":49},[36,171578,171579,171581],{"class":38,"line":78},[36,171580,32041],{"class":60},[36,171582,156405],{"class":49},[36,171584,171585,171587],{"class":38,"line":125},[36,171586,171538],{"class":53},[36,171588,4488],{"class":49},[36,171590,171591,171593,171595,171598],{"class":38,"line":131},[36,171592,32041],{"class":60},[36,171594,901],{"class":49},[36,171596,171597],{"class":998},"\"年龄必须是数字\"",[36,171599,75],{"class":49},[14,171601,171602,171603,171605],{},"不建议裸写 ",[33,171604,171538],{},"，最好指定异常类型。",[26,171607,171609],{"className":28,"code":171608,"language":30,"meta":31,"style":31},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[33,171610,171611,171617,171635,171641,171649],{"__ignoreMap":31},[36,171612,171613,171615],{"class":38,"line":39},[36,171614,171526],{"class":53},[36,171616,4488],{"class":49},[36,171618,171619,171621,171623,171625,171627,171629,171631,171633],{"class":38,"line":46},[36,171620,153030],{"class":49},[36,171622,54],{"class":53},[36,171624,3132],{"class":60},[36,171626,901],{"class":49},[36,171628,54563],{"class":60},[36,171630,901],{"class":49},[36,171632,153038],{"class":998},[36,171634,31239],{"class":49},[36,171636,171637,171639],{"class":38,"line":78},[36,171638,32041],{"class":60},[36,171640,156405],{"class":49},[36,171642,171643,171645,171647],{"class":38,"line":125},[36,171644,171538],{"class":53},[36,171646,152870],{"class":60},[36,171648,4488],{"class":49},[36,171650,171651,171653,171655,171657],{"class":38,"line":131},[36,171652,32041],{"class":60},[36,171654,901],{"class":49},[36,171656,171597],{"class":998},[36,171658,75],{"class":49},[21,171660,171662],{"id":171661},"_94-捕获多个异常","9.4 捕获多个异常",[26,171664,171666],{"className":28,"code":171665,"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,171667,171668,171674,171695,171715,171722,171730,171741,171750],{"__ignoreMap":31},[36,171669,171670,171672],{"class":38,"line":39},[36,171671,171526],{"class":53},[36,171673,4488],{"class":49},[36,171675,171676,171679,171681,171683,171685,171687,171689,171691,171693],{"class":38,"line":46},[36,171677,171678],{"class":49},"    nums ",[36,171680,54],{"class":53},[36,171682,52968],{"class":49},[36,171684,61],{"class":60},[36,171686,154],{"class":49},[36,171688,181],{"class":60},[36,171690,154],{"class":49},[36,171692,162],{"class":60},[36,171694,33988],{"class":49},[36,171696,171697,171700,171702,171704,171706,171708,171710,171713],{"class":38,"line":78},[36,171698,171699],{"class":49},"    index ",[36,171701,54],{"class":53},[36,171703,3132],{"class":60},[36,171705,901],{"class":49},[36,171707,54563],{"class":60},[36,171709,901],{"class":49},[36,171711,171712],{"class":998},"\"请输入索引:\"",[36,171714,31239],{"class":49},[36,171716,171717,171719],{"class":38,"line":125},[36,171718,32041],{"class":60},[36,171720,171721],{"class":49},"(nums[index])\n",[36,171723,171724,171726,171728],{"class":38,"line":131},[36,171725,171538],{"class":53},[36,171727,152870],{"class":60},[36,171729,4488],{"class":49},[36,171731,171732,171734,171736,171739],{"class":38,"line":396},[36,171733,32041],{"class":60},[36,171735,901],{"class":49},[36,171737,171738],{"class":998},"\"索引必须是整数\"",[36,171740,75],{"class":49},[36,171742,171743,171745,171748],{"class":38,"line":407},[36,171744,171538],{"class":53},[36,171746,171747],{"class":60}," IndexError",[36,171749,4488],{"class":49},[36,171751,171752,171754,171756,171759],{"class":38,"line":2061},[36,171753,32041],{"class":60},[36,171755,901],{"class":49},[36,171757,171758],{"class":998},"\"索引越界\"",[36,171760,75],{"class":49},[14,171762,171763],{},"多个异常使用相同处理逻辑：",[26,171765,171767],{"className":28,"code":171766,"language":30,"meta":31,"style":31},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[33,171768,171769,171775,171793,171806,171820],{"__ignoreMap":31},[36,171770,171771,171773],{"class":38,"line":39},[36,171772,171526],{"class":53},[36,171774,4488],{"class":49},[36,171776,171777,171779,171781,171783,171785,171787,171789,171791],{"class":38,"line":46},[36,171778,46335],{"class":49},[36,171780,54],{"class":53},[36,171782,3132],{"class":60},[36,171784,901],{"class":49},[36,171786,54563],{"class":60},[36,171788,901],{"class":49},[36,171790,156440],{"class":998},[36,171792,31239],{"class":49},[36,171794,171795,171797,171799,171801,171803],{"class":38,"line":78},[36,171796,32041],{"class":60},[36,171798,901],{"class":49},[36,171800,332],{"class":60},[36,171802,156690],{"class":53},[36,171804,171805],{"class":49}," num)\n",[36,171807,171808,171810,171812,171814,171816,171818],{"class":38,"line":125},[36,171809,171538],{"class":53},[36,171811,2408],{"class":49},[36,171813,155478],{"class":60},[36,171815,154],{"class":49},[36,171817,171421],{"class":60},[36,171819,31528],{"class":49},[36,171821,171822,171824,171826,171829],{"class":38,"line":131},[36,171823,32041],{"class":60},[36,171825,901],{"class":49},[36,171827,171828],{"class":998},"\"输入不合法\"",[36,171830,75],{"class":49},[21,171832,171834],{"id":171833},"_95-获取异常信息","9.5 获取异常信息",[26,171836,171838],{"className":28,"code":171837,"language":30,"meta":31,"style":31},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[33,171839,171840,171846,171860,171871],{"__ignoreMap":31},[36,171841,171842,171844],{"class":38,"line":39},[36,171843,171526],{"class":53},[36,171845,4488],{"class":49},[36,171847,171848,171850,171852,171854,171856,171858],{"class":38,"line":46},[36,171849,46335],{"class":49},[36,171851,54],{"class":53},[36,171853,3132],{"class":60},[36,171855,901],{"class":49},[36,171857,156524],{"class":998},[36,171859,75],{"class":49},[36,171861,171862,171864,171866,171868],{"class":38,"line":78},[36,171863,171538],{"class":53},[36,171865,152870],{"class":60},[36,171867,65346],{"class":53},[36,171869,171870],{"class":49}," e:\n",[36,171872,171873,171875,171877,171879,171882,171884,171886,171888,171890],{"class":38,"line":125},[36,171874,32041],{"class":60},[36,171876,901],{"class":49},[36,171878,949],{"class":53},[36,171880,171881],{"class":998},"\"出错了:",[36,171883,1775],{"class":60},[36,171885,969],{"class":49},[36,171887,1825],{"class":60},[36,171889,1141],{"class":998},[36,171891,75],{"class":49},[14,171893,147101],{},[26,171895,171898],{"className":171896,"code":171897,"language":5935,"meta":31},[5933],"出错了:invalid literal for int() with base 10: 'abc'\n",[33,171899,171897],{"__ignoreMap":31},[21,171901,171903],{"id":171902},"_96-else和finally","9.6 else和finally",[14,171905,171906,171908],{},[33,171907,2451],{},"：没有异常时执行。",[14,171910,171911,171914],{},[33,171912,171913],{},"finally","：无论是否异常都会执行。",[26,171916,171918],{"className":28,"code":171917,"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,171919,171920,171926,171944,171952,171962,171968,171989,171995],{"__ignoreMap":31},[36,171921,171922,171924],{"class":38,"line":39},[36,171923,171526],{"class":53},[36,171925,4488],{"class":49},[36,171927,171928,171930,171932,171934,171936,171938,171940,171942],{"class":38,"line":46},[36,171929,46335],{"class":49},[36,171931,54],{"class":53},[36,171933,3132],{"class":60},[36,171935,901],{"class":49},[36,171937,54563],{"class":60},[36,171939,901],{"class":49},[36,171941,156440],{"class":998},[36,171943,31239],{"class":49},[36,171945,171946,171948,171950],{"class":38,"line":78},[36,171947,171538],{"class":53},[36,171949,152870],{"class":60},[36,171951,4488],{"class":49},[36,171953,171954,171956,171958,171960],{"class":38,"line":125},[36,171955,32041],{"class":60},[36,171957,901],{"class":49},[36,171959,153858],{"class":998},[36,171961,75],{"class":49},[36,171963,171964,171966],{"class":38,"line":131},[36,171965,2451],{"class":53},[36,171967,4488],{"class":49},[36,171969,171970,171972,171974,171976,171979,171981,171983,171985,171987],{"class":38,"line":396},[36,171971,32041],{"class":60},[36,171973,901],{"class":49},[36,171975,949],{"class":53},[36,171977,171978],{"class":998},"\"输入正确:",[36,171980,1775],{"class":60},[36,171982,2415],{"class":49},[36,171984,1825],{"class":60},[36,171986,1141],{"class":998},[36,171988,75],{"class":49},[36,171990,171991,171993],{"class":38,"line":407},[36,171992,171913],{"class":53},[36,171994,4488],{"class":49},[36,171996,171997,171999,172001,172004],{"class":38,"line":2061},[36,171998,32041],{"class":60},[36,172000,901],{"class":49},[36,172002,172003],{"class":998},"\"程序结束\"",[36,172005,75],{"class":49},[14,172007,172008,172010],{},[33,172009,171913],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[21,172012,172014],{"id":172013},"_97-抛出异常","9.7 抛出异常",[14,172016,172017],{},"程序可以主动抛出异常。",[26,172019,172021],{"className":28,"code":172020,"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,172022,172023,172032,172044,172057,172077,172081,172085],{"__ignoreMap":31},[36,172024,172025,172027,172030],{"class":38,"line":39},[36,172026,32689],{"class":53},[36,172028,172029],{"class":2713}," set_age",[36,172031,162059],{"class":49},[36,172033,172034,172036,172038,172040,172042],{"class":38,"line":46},[36,172035,3850],{"class":53},[36,172037,16451],{"class":49},[36,172039,1789],{"class":53},[36,172041,4842],{"class":60},[36,172043,4488],{"class":49},[36,172045,172046,172048,172050,172052,172055],{"class":38,"line":78},[36,172047,104076],{"class":53},[36,172049,152870],{"class":60},[36,172051,901],{"class":49},[36,172053,172054],{"class":998},"\"年龄不能为负数\"",[36,172056,75],{"class":49},[36,172058,172059,172061,172063,172065,172067,172069,172071,172073,172075],{"class":38,"line":125},[36,172060,32041],{"class":60},[36,172062,901],{"class":49},[36,172064,949],{"class":53},[36,172066,162627],{"class":998},[36,172068,1775],{"class":60},[36,172070,70963],{"class":49},[36,172072,1825],{"class":60},[36,172074,1141],{"class":998},[36,172076,75],{"class":49},[36,172078,172079],{"class":38,"line":131},[36,172080,194],{"emptyLinePlaceholder":193},[36,172082,172083],{"class":38,"line":396},[36,172084,194],{"emptyLinePlaceholder":193},[36,172086,172087,172090,172092,172094],{"class":38,"line":407},[36,172088,172089],{"class":49},"set_age(",[36,172091,1414],{"class":53},[36,172093,61],{"class":60},[36,172095,75],{"class":49},[14,172097,172098],{},"调用者可以捕获：",[26,172100,172102],{"className":28,"code":172101,"language":30,"meta":31,"style":31},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[33,172103,172104,172110,172121,172131],{"__ignoreMap":31},[36,172105,172106,172108],{"class":38,"line":39},[36,172107,171526],{"class":53},[36,172109,4488],{"class":49},[36,172111,172112,172115,172117,172119],{"class":38,"line":46},[36,172113,172114],{"class":49},"    set_age(",[36,172116,1414],{"class":53},[36,172118,61],{"class":60},[36,172120,75],{"class":49},[36,172122,172123,172125,172127,172129],{"class":38,"line":78},[36,172124,171538],{"class":53},[36,172126,152870],{"class":60},[36,172128,65346],{"class":53},[36,172130,171870],{"class":49},[36,172132,172133,172135],{"class":38,"line":125},[36,172134,32041],{"class":60},[36,172136,67741],{"class":49},[21,172138,172140],{"id":172139},"_98-自定义异常","9.8 自定义异常",[26,172142,172144],{"className":28,"code":172143,"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,172145,172146,172160,172164,172168,172172,172180,172190,172201,172211,172215,172219,172225,172242,172253],{"__ignoreMap":31},[36,172147,172148,172150,172153,172155,172158],{"class":38,"line":39},[36,172149,15438],{"class":53},[36,172151,172152],{"class":2713}," BalanceNotEnoughError",[36,172154,901],{"class":49},[36,172156,172157],{"class":60},"Exception",[36,172159,31528],{"class":49},[36,172161,172162],{"class":38,"line":46},[36,172163,150181],{"class":53},[36,172165,172166],{"class":38,"line":78},[36,172167,194],{"emptyLinePlaceholder":193},[36,172169,172170],{"class":38,"line":125},[36,172171,194],{"emptyLinePlaceholder":193},[36,172173,172174,172176,172178],{"class":38,"line":131},[36,172175,32689],{"class":53},[36,172177,150830],{"class":2713},[36,172179,163456],{"class":49},[36,172181,172182,172184,172186,172188],{"class":38,"line":396},[36,172183,3850],{"class":53},[36,172185,150786],{"class":49},[36,172187,1839],{"class":53},[36,172189,163233],{"class":49},[36,172191,172192,172194,172197,172199],{"class":38,"line":407},[36,172193,104076],{"class":53},[36,172195,172196],{"class":49}," BalanceNotEnoughError(",[36,172198,150881],{"class":998},[36,172200,75],{"class":49},[36,172202,172203,172205,172207,172209],{"class":38,"line":2061},[36,172204,4839],{"class":53},[36,172206,163463],{"class":49},[36,172208,1414],{"class":53},[36,172210,150819],{"class":49},[36,172212,172213],{"class":38,"line":2067},[36,172214,194],{"emptyLinePlaceholder":193},[36,172216,172217],{"class":38,"line":2079},[36,172218,194],{"emptyLinePlaceholder":193},[36,172220,172221,172223],{"class":38,"line":2362},[36,172222,171526],{"class":53},[36,172224,4488],{"class":49},[36,172226,172227,172229,172231,172234,172236,172238,172240],{"class":38,"line":2367},[36,172228,163134],{"class":49},[36,172230,54],{"class":53},[36,172232,172233],{"class":49}," withdraw(",[36,172235,67],{"class":60},[36,172237,154],{"class":49},[36,172239,2472],{"class":60},[36,172241,75],{"class":49},[36,172243,172244,172246,172249,172251],{"class":38,"line":2373},[36,172245,171538],{"class":53},[36,172247,172248],{"class":49}," BalanceNotEnoughError ",[36,172250,32125],{"class":53},[36,172252,171870],{"class":49},[36,172254,172255,172257],{"class":38,"line":2378},[36,172256,32041],{"class":60},[36,172258,67741],{"class":49},[14,172260,172261],{},"入门阶段大多数情况使用内置异常即可。",[21,172263,172265],{"id":172264},"_99-traceback","9.9 traceback",[14,172267,172268],{},"调试时可以输出完整异常堆栈。",[26,172270,172272],{"className":28,"code":172271,"language":30,"meta":31,"style":31},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[33,172273,172274,172281,172285,172291,172301,172309],{"__ignoreMap":31},[36,172275,172276,172278],{"class":38,"line":39},[36,172277,31135],{"class":53},[36,172279,172280],{"class":49}," traceback\n",[36,172282,172283],{"class":38,"line":46},[36,172284,194],{"emptyLinePlaceholder":193},[36,172286,172287,172289],{"class":38,"line":78},[36,172288,171526],{"class":53},[36,172290,4488],{"class":49},[36,172292,172293,172295,172297,172299],{"class":38,"line":125},[36,172294,2735],{"class":60},[36,172296,901],{"class":49},[36,172298,156524],{"class":998},[36,172300,75],{"class":49},[36,172302,172303,172305,172307],{"class":38,"line":131},[36,172304,171538],{"class":53},[36,172306,152870],{"class":60},[36,172308,4488],{"class":49},[36,172310,172311],{"class":38,"line":396},[36,172312,172313],{"class":49},"    traceback.print_exc()\n",[14,172315,172316],{},"日志系统中常把异常堆栈记录到文件。",[21,172318,172320],{"id":172319},"_910-什么是模块","9.10 什么是模块",[14,172322,172323,172324,126627],{},"模块就是一个 ",[33,172325,146996],{},[14,172327,172328,172329,25363],{},"例如创建 ",[33,172330,172331],{},"my_math.py",[26,172333,172335],{"className":28,"code":172334,"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,172336,172337,172345,172355,172359,172363,172372],{"__ignoreMap":31},[36,172338,172339,172341,172343],{"class":38,"line":39},[36,172340,32689],{"class":53},[36,172342,5957],{"class":2713},[36,172344,151737],{"class":49},[36,172346,172347,172349,172351,172353],{"class":38,"line":46},[36,172348,4839],{"class":53},[36,172350,11616],{"class":49},[36,172352,1365],{"class":53},[36,172354,151748],{"class":49},[36,172356,172357],{"class":38,"line":78},[36,172358,194],{"emptyLinePlaceholder":193},[36,172360,172361],{"class":38,"line":125},[36,172362,194],{"emptyLinePlaceholder":193},[36,172364,172365,172367,172370],{"class":38,"line":131},[36,172366,32689],{"class":53},[36,172368,172369],{"class":2713}," sub",[36,172371,151737],{"class":49},[36,172373,172374,172376,172378,172380],{"class":38,"line":396},[36,172375,4839],{"class":53},[36,172377,11616],{"class":49},[36,172379,1414],{"class":53},[36,172381,151748],{"class":49},[14,172383,172384],{},"在另一个文件中导入：",[26,172386,172388],{"className":28,"code":172387,"language":30,"meta":31,"style":31},"import my_math\n\nprint(my_math.add(1, 2))\n",[33,172389,172390,172397,172401],{"__ignoreMap":31},[36,172391,172392,172394],{"class":38,"line":39},[36,172393,31135],{"class":53},[36,172395,172396],{"class":49}," my_math\n",[36,172398,172399],{"class":38,"line":46},[36,172400,194],{"emptyLinePlaceholder":193},[36,172402,172403,172405,172408,172410,172412,172414],{"class":38,"line":78},[36,172404,199],{"class":60},[36,172406,172407],{"class":49},"(my_math.add(",[36,172409,61],{"class":60},[36,172411,154],{"class":49},[36,172413,181],{"class":60},[36,172415,31239],{"class":49},[21,172417,172419],{"id":172418},"_911-import导入","9.11 import导入",[868,172421,172423],{"id":172422},"_9111-导入模块","9.11.1 导入模块",[26,172425,172427],{"className":28,"code":172426,"language":30,"meta":31,"style":31},"import random\n\nprint(random.randint(1, 10))\n",[33,172428,172429,172435,172439],{"__ignoreMap":31},[36,172430,172431,172433],{"class":38,"line":39},[36,172432,31135],{"class":53},[36,172434,46070],{"class":49},[36,172436,172437],{"class":38,"line":46},[36,172438,194],{"emptyLinePlaceholder":193},[36,172440,172441,172443,172446,172448,172450,172452],{"class":38,"line":78},[36,172442,199],{"class":60},[36,172444,172445],{"class":49},"(random.randint(",[36,172447,61],{"class":60},[36,172449,154],{"class":49},[36,172451,332],{"class":60},[36,172453,31239],{"class":49},[868,172455,172457],{"id":172456},"_9112-导入指定内容","9.11.2 导入指定内容",[26,172459,172461],{"className":28,"code":172460,"language":30,"meta":31,"style":31},"from random import randint\n\nprint(randint(1, 10))\n",[33,172462,172463,172474,172478],{"__ignoreMap":31},[36,172464,172465,172467,172469,172471],{"class":38,"line":39},[36,172466,31479],{"class":53},[36,172468,58538],{"class":49},[36,172470,31135],{"class":53},[36,172472,172473],{"class":49}," randint\n",[36,172475,172476],{"class":38,"line":46},[36,172477,194],{"emptyLinePlaceholder":193},[36,172479,172480,172482,172485,172487,172489,172491],{"class":38,"line":78},[36,172481,199],{"class":60},[36,172483,172484],{"class":49},"(randint(",[36,172486,61],{"class":60},[36,172488,154],{"class":49},[36,172490,332],{"class":60},[36,172492,31239],{"class":49},[868,172494,172496],{"id":172495},"_9113-起别名","9.11.3 起别名",[26,172498,172500],{"className":28,"code":172499,"language":30,"meta":31,"style":31},"import random as rd\n\nprint(rd.randint(1, 10))\n",[33,172501,172502,172513,172517],{"__ignoreMap":31},[36,172503,172504,172506,172508,172510],{"class":38,"line":39},[36,172505,31135],{"class":53},[36,172507,58538],{"class":49},[36,172509,32125],{"class":53},[36,172511,172512],{"class":49}," rd\n",[36,172514,172515],{"class":38,"line":46},[36,172516,194],{"emptyLinePlaceholder":193},[36,172518,172519,172521,172524,172526,172528,172530],{"class":38,"line":78},[36,172520,199],{"class":60},[36,172522,172523],{"class":49},"(rd.randint(",[36,172525,61],{"class":60},[36,172527,154],{"class":49},[36,172529,332],{"class":60},[36,172531,31239],{"class":49},[26,172533,172535],{"className":28,"code":172534,"language":30,"meta":31,"style":31},"from random import randint as rint\n\nprint(rint(1, 10))\n",[33,172536,172537,172553,172557],{"__ignoreMap":31},[36,172538,172539,172541,172543,172545,172548,172550],{"class":38,"line":39},[36,172540,31479],{"class":53},[36,172542,58538],{"class":49},[36,172544,31135],{"class":53},[36,172546,172547],{"class":49}," randint ",[36,172549,32125],{"class":53},[36,172551,172552],{"class":49}," rint\n",[36,172554,172555],{"class":38,"line":46},[36,172556,194],{"emptyLinePlaceholder":193},[36,172558,172559,172561,172564,172566,172568,172570],{"class":38,"line":78},[36,172560,199],{"class":60},[36,172562,172563],{"class":49},"(rint(",[36,172565,61],{"class":60},[36,172567,154],{"class":49},[36,172569,332],{"class":60},[36,172571,31239],{"class":49},[868,172573,172575],{"id":172574},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[26,172577,172579],{"className":28,"code":172578,"language":30,"meta":31,"style":31},"from random import *\n",[33,172580,172581],{"__ignoreMap":31},[36,172582,172583,172585,172587,172589],{"class":38,"line":39},[36,172584,31479],{"class":53},[36,172586,58538],{"class":49},[36,172588,31135],{"class":53},[36,172590,172591],{"class":53}," *\n",[14,172593,172594],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[21,172596,172598],{"id":172597},"_912-常用内置模块","9.12 常用内置模块",[868,172600,172602],{"id":172601},"_9121-random","9.12.1 random",[26,172604,172606],{"className":28,"code":172605,"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,172607,172608,172614,172618,172632,172651],{"__ignoreMap":31},[36,172609,172610,172612],{"class":38,"line":39},[36,172611,31135],{"class":53},[36,172613,46070],{"class":49},[36,172615,172616],{"class":38,"line":46},[36,172617,194],{"emptyLinePlaceholder":193},[36,172619,172620,172622,172624,172626,172628,172630],{"class":38,"line":78},[36,172621,199],{"class":60},[36,172623,172445],{"class":49},[36,172625,61],{"class":60},[36,172627,154],{"class":49},[36,172629,332],{"class":60},[36,172631,31239],{"class":49},[36,172633,172634,172636,172639,172641,172643,172645,172647,172649],{"class":38,"line":125},[36,172635,199],{"class":60},[36,172637,172638],{"class":49},"(random.choice([",[36,172640,150532],{"class":998},[36,172642,154],{"class":49},[36,172644,151580],{"class":998},[36,172646,154],{"class":49},[36,172648,160375],{"class":998},[36,172650,33885],{"class":49},[36,172652,172653,172655,172658,172660,172662,172664,172666,172668,172670,172672,172674,172676,172678,172680],{"class":38,"line":131},[36,172654,199],{"class":60},[36,172656,172657],{"class":49},"(random.sample([",[36,172659,61],{"class":60},[36,172661,154],{"class":49},[36,172663,181],{"class":60},[36,172665,154],{"class":49},[36,172667,162],{"class":60},[36,172669,154],{"class":49},[36,172671,186],{"class":60},[36,172673,154],{"class":49},[36,172675,157],{"class":60},[36,172677,112846],{"class":49},[36,172679,181],{"class":60},[36,172681,31239],{"class":49},[868,172683,172685],{"id":172684},"_9122-time","9.12.2 time",[26,172687,172689],{"className":28,"code":172688,"language":30,"meta":31,"style":31},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[33,172690,172691,172697,172701,172708,172716],{"__ignoreMap":31},[36,172692,172693,172695],{"class":38,"line":39},[36,172694,31135],{"class":53},[36,172696,32571],{"class":49},[36,172698,172699],{"class":38,"line":46},[36,172700,194],{"emptyLinePlaceholder":193},[36,172702,172703,172705],{"class":38,"line":78},[36,172704,199],{"class":60},[36,172706,172707],{"class":49},"(time.time())\n",[36,172709,172710,172712,172714],{"class":38,"line":125},[36,172711,95715],{"class":49},[36,172713,61],{"class":60},[36,172715,75],{"class":49},[36,172717,172718,172720,172722,172725],{"class":38,"line":131},[36,172719,199],{"class":60},[36,172721,901],{"class":49},[36,172723,172724],{"class":998},"\"1秒后执行\"",[36,172726,75],{"class":49},[868,172728,172730],{"id":172729},"_9123-datetime","9.12.3 datetime",[26,172732,172734],{"className":28,"code":172733,"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,172735,172736,172748,172752,172762,172769],{"__ignoreMap":31},[36,172737,172738,172740,172743,172745],{"class":38,"line":39},[36,172739,31479],{"class":53},[36,172741,172742],{"class":49}," datetime ",[36,172744,31135],{"class":53},[36,172746,172747],{"class":49}," datetime\n",[36,172749,172750],{"class":38,"line":46},[36,172751,194],{"emptyLinePlaceholder":193},[36,172753,172754,172757,172759],{"class":38,"line":78},[36,172755,172756],{"class":49},"now ",[36,172758,54],{"class":53},[36,172760,172761],{"class":49}," datetime.now()\n",[36,172763,172764,172766],{"class":38,"line":125},[36,172765,199],{"class":60},[36,172767,172768],{"class":49},"(now)\n",[36,172770,172771,172773,172776,172779,172781,172784],{"class":38,"line":131},[36,172772,199],{"class":60},[36,172774,172775],{"class":49},"(now.strftime(",[36,172777,172778],{"class":998},"\"%Y-%m-",[36,172780,157335],{"class":60},[36,172782,172783],{"class":998}," %H:%M:%S\"",[36,172785,31239],{"class":49},[868,172787,172789],{"id":172788},"_9124-os","9.12.4 os",[26,172791,172793],{"className":28,"code":172792,"language":30,"meta":31,"style":31},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[33,172794,172795,172801,172805,172812],{"__ignoreMap":31},[36,172796,172797,172799],{"class":38,"line":39},[36,172798,31135],{"class":53},[36,172800,46047],{"class":49},[36,172802,172803],{"class":38,"line":46},[36,172804,194],{"emptyLinePlaceholder":193},[36,172806,172807,172809],{"class":38,"line":78},[36,172808,199],{"class":60},[36,172810,172811],{"class":49},"(os.getcwd())\n",[36,172813,172814,172816,172819,172822],{"class":38,"line":125},[36,172815,199],{"class":60},[36,172817,172818],{"class":49},"(os.listdir(",[36,172820,172821],{"class":998},"\".\"",[36,172823,31239],{"class":49},[868,172825,172827],{"id":172826},"_9125-sys","9.12.5 sys",[26,172829,172831],{"className":28,"code":172830,"language":30,"meta":31,"style":31},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[33,172832,172833,172840,172844,172851],{"__ignoreMap":31},[36,172834,172835,172837],{"class":38,"line":39},[36,172836,31135],{"class":53},[36,172838,172839],{"class":49}," sys\n",[36,172841,172842],{"class":38,"line":46},[36,172843,194],{"emptyLinePlaceholder":193},[36,172845,172846,172848],{"class":38,"line":78},[36,172847,199],{"class":60},[36,172849,172850],{"class":49},"(sys.version)\n",[36,172852,172853,172855],{"class":38,"line":125},[36,172854,199],{"class":60},[36,172856,172857],{"class":49},"(sys.path)\n",[21,172859,172861,172862,172864,172865,1141],{"id":172860},"_913-if-name-main","9.13 if ",[1043,172863,80552],{}," == \"",[1043,172866,102702],{},[14,172868,172869,172870,172873],{},"模块被直接运行和被导入时，",[33,172871,172872],{},"__name__"," 的值不同。",[14,172875,172876,172877,25363],{},"创建 ",[33,172878,172879],{},"my_module.py",[26,172881,172883],{"className":28,"code":172882,"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,172884,172885,172893,172903,172907,172911,172923],{"__ignoreMap":31},[36,172886,172887,172889,172891],{"class":38,"line":39},[36,172888,32689],{"class":53},[36,172890,5957],{"class":2713},[36,172892,151737],{"class":49},[36,172894,172895,172897,172899,172901],{"class":38,"line":46},[36,172896,4839],{"class":53},[36,172898,11616],{"class":49},[36,172900,1365],{"class":53},[36,172902,151748],{"class":49},[36,172904,172905],{"class":38,"line":78},[36,172906,194],{"emptyLinePlaceholder":193},[36,172908,172909],{"class":38,"line":125},[36,172910,194],{"emptyLinePlaceholder":193},[36,172912,172913,172915,172917,172919,172921],{"class":38,"line":131},[36,172914,2281],{"class":53},[36,172916,31962],{"class":60},[36,172918,102203],{"class":53},[36,172920,102206],{"class":998},[36,172922,4488],{"class":49},[36,172924,172925,172927,172929,172931,172933,172935],{"class":38,"line":396},[36,172926,32041],{"class":60},[36,172928,167244],{"class":49},[36,172930,61],{"class":60},[36,172932,154],{"class":49},[36,172934,181],{"class":60},[36,172936,31239],{"class":49},[14,172938,172939],{},"作用：",[851,172941,172942,172945],{},[854,172943,172944],{},"直接运行该文件时，执行测试代码。",[854,172946,172947],{},"被其他文件导入时，不执行测试代码。",[14,172949,172950],{},"这是写模块时很常用的习惯。",[21,172952,172954],{"id":172953},"_914-包","9.14 包",[14,172956,172957,172958,172961],{},"包是包含 ",[33,172959,172960],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172963,172964],{},"目录结构：",[26,172966,172969],{"className":172967,"code":172968,"language":5935,"meta":31},[5933],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[33,172970,172968],{"__ignoreMap":31},[14,172972,172973],{},"导入：",[26,172975,172977],{"className":28,"code":172976,"language":30,"meta":31,"style":31},"from utils.file_utils import read_file\n",[33,172978,172979],{"__ignoreMap":31},[36,172980,172981,172983,172986,172988],{"class":38,"line":39},[36,172982,31479],{"class":53},[36,172984,172985],{"class":49}," utils.file_utils ",[36,172987,31135],{"class":53},[36,172989,172990],{"class":49}," read_file\n",[14,172992,172993,172995],{},[33,172994,172960],{}," 可以为空，也可以写包初始化逻辑。",[21,172997,172999],{"id":172998},"_915-第三方包","9.15 第三方包",[14,173001,173002,173003,173005],{},"第三方包通过 ",[33,173004,24575],{}," 安装。",[26,173007,173009],{"className":24566,"code":173008,"language":24568,"meta":31,"style":31},"pip install requests\n",[33,173010,173011],{"__ignoreMap":31},[36,173012,173013,173015,173017],{"class":38,"line":39},[36,173014,24575],{"class":2713},[36,173016,24578],{"class":998},[36,173018,146742],{"class":998},[14,173020,173021],{},"使用：",[26,173023,173025],{"className":28,"code":173024,"language":30,"meta":31,"style":31},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[33,173026,173027,173033,173037,173052],{"__ignoreMap":31},[36,173028,173029,173031],{"class":38,"line":39},[36,173030,31135],{"class":53},[36,173032,146742],{"class":49},[36,173034,173035],{"class":38,"line":46},[36,173036,194],{"emptyLinePlaceholder":193},[36,173038,173039,173042,173044,173047,173050],{"class":38,"line":78},[36,173040,173041],{"class":49},"response ",[36,173043,54],{"class":53},[36,173045,173046],{"class":49}," requests.get(",[36,173048,173049],{"class":998},"\"https:\u002F\u002Fwww.example.com\"",[36,173051,75],{"class":49},[36,173053,173054,173056],{"class":38,"line":125},[36,173055,199],{"class":60},[36,173057,173058],{"class":49},"(response.status_code)\n",[14,173060,173061],{},"查看已安装包：",[26,173063,173065],{"className":24566,"code":173064,"language":24568,"meta":31,"style":31},"pip list\n",[33,173066,173067],{"__ignoreMap":31},[36,173068,173069,173071],{"class":38,"line":39},[36,173070,24575],{"class":2713},[36,173072,119599],{"class":998},[14,173074,173075],{},"导出项目依赖：",[26,173077,173078],{"className":24566,"code":146937,"language":24568,"meta":31,"style":31},[33,173079,173080],{"__ignoreMap":31},[36,173081,173082,173084,173086,173088],{"class":38,"line":39},[36,173083,24575],{"class":2713},[36,173085,146946],{"class":998},[36,173087,26967],{"class":53},[36,173089,146951],{"class":998},[14,173091,173092],{},"安装项目依赖：",[26,173094,173095],{"className":24566,"code":146957,"language":24568,"meta":31,"style":31},[33,173096,173097],{"__ignoreMap":31},[36,173098,173099,173101,173103,173105],{"class":38,"line":39},[36,173100,24575],{"class":2713},[36,173102,24578],{"class":998},[36,173104,120283],{"class":60},[36,173106,146951],{"class":998},[21,173108,173110],{"id":173109},"_916-模块搜索路径","9.16 模块搜索路径",[14,173112,173113,173114,173117],{},"Python 导入模块时会在 ",[33,173115,173116],{},"sys.path"," 中查找。",[26,173119,173121],{"className":28,"code":173120,"language":30,"meta":31,"style":31},"import sys\n\nfor path in sys.path:\n    print(path)\n",[33,173122,173123,173129,173133,173145],{"__ignoreMap":31},[36,173124,173125,173127],{"class":38,"line":39},[36,173126,31135],{"class":53},[36,173128,172839],{"class":49},[36,173130,173131],{"class":38,"line":46},[36,173132,194],{"emptyLinePlaceholder":193},[36,173134,173135,173137,173140,173142],{"class":38,"line":78},[36,173136,3774],{"class":53},[36,173138,173139],{"class":49}," path ",[36,173141,26788],{"class":53},[36,173143,173144],{"class":49}," sys.path:\n",[36,173146,173147,173149],{"class":38,"line":125},[36,173148,32041],{"class":60},[36,173150,169873],{"class":49},[14,173152,173153],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,173155,158267],{},[26,173157,173160],{"className":173158,"code":173159,"language":5935,"meta":31},[5933],"random.py\njson.py\ntime.py\n",[33,173161,173159],{"__ignoreMap":31},[14,173163,173164],{},"这些文件名可能导致导入异常。",[21,173166,173168],{"id":173167},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,173170,172964],{},[26,173172,173175],{"className":173173,"code":173174,"language":5935,"meta":31},[5933],"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,173176,173174],{"__ignoreMap":31},[14,173178,173179,25363],{},[33,173180,173181],{},"utils\u002Ffile_utils.py",[26,173183,173185],{"className":28,"code":173184,"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,173186,173187,173193,173203,173207,173211,173221,173231,173239,173245,173249,173276,173286,173290,173294,173304,173330],{"__ignoreMap":31},[36,173188,173189,173191],{"class":38,"line":39},[36,173190,31135],{"class":53},[36,173192,147735],{"class":49},[36,173194,173195,173197,173199,173201],{"class":38,"line":46},[36,173196,31479],{"class":53},[36,173198,108955],{"class":49},[36,173200,31135],{"class":53},[36,173202,108960],{"class":49},[36,173204,173205],{"class":38,"line":78},[36,173206,194],{"emptyLinePlaceholder":193},[36,173208,173209],{"class":38,"line":125},[36,173210,194],{"emptyLinePlaceholder":193},[36,173212,173213,173215,173218],{"class":38,"line":131},[36,173214,32689],{"class":53},[36,173216,173217],{"class":2713}," read_json",[36,173219,173220],{"class":49},"(path):\n",[36,173222,173223,173226,173228],{"class":38,"line":396},[36,173224,173225],{"class":49},"    path ",[36,173227,54],{"class":53},[36,173229,173230],{"class":49}," Path(path)\n",[36,173232,173233,173235,173237],{"class":38,"line":407},[36,173234,3850],{"class":53},[36,173236,39672],{"class":53},[36,173238,169954],{"class":49},[36,173240,173241,173243],{"class":38,"line":2061},[36,173242,15496],{"class":53},[36,173244,52580],{"class":49},[36,173246,173247],{"class":38,"line":2067},[36,173248,194],{"emptyLinePlaceholder":193},[36,173250,173251,173253,173255,173258,173260,173262,173264,173266,173268,173270,173272,173274],{"class":38,"line":2079},[36,173252,34920],{"class":53},[36,173254,147435],{"class":60},[36,173256,173257],{"class":49},"(path, ",[36,173259,147445],{"class":998},[36,173261,154],{"class":49},[36,173263,147450],{"class":416},[36,173265,54],{"class":53},[36,173267,147455],{"class":998},[36,173269,14458],{"class":49},[36,173271,32125],{"class":53},[36,173273,148797],{"class":416},[36,173275,4488],{"class":49},[36,173277,173278,173280,173282,173284],{"class":38,"line":2362},[36,173279,15496],{"class":53},[36,173281,148808],{"class":49},[36,173283,46096],{"class":416},[36,173285,75],{"class":49},[36,173287,173288],{"class":38,"line":2367},[36,173289,194],{"emptyLinePlaceholder":193},[36,173291,173292],{"class":38,"line":2373},[36,173293,194],{"emptyLinePlaceholder":193},[36,173295,173296,173298,173301],{"class":38,"line":2378},[36,173297,32689],{"class":53},[36,173299,173300],{"class":2713}," write_json",[36,173302,173303],{"class":49},"(path, data):\n",[36,173305,173306,173308,173310,173312,173314,173316,173318,173320,173322,173324,173326,173328],{"class":38,"line":2392},[36,173307,34920],{"class":53},[36,173309,147435],{"class":60},[36,173311,173257],{"class":49},[36,173313,152620],{"class":998},[36,173315,154],{"class":49},[36,173317,147450],{"class":416},[36,173319,54],{"class":53},[36,173321,147455],{"class":998},[36,173323,14458],{"class":49},[36,173325,32125],{"class":53},[36,173327,148797],{"class":416},[36,173329,4488],{"class":49},[36,173331,173332,173335,173337,173339,173341,173343,173345,173347,173349,173351,173353],{"class":38,"line":2397},[36,173333,173334],{"class":49},"        json.dump(data, ",[36,173336,46096],{"class":416},[36,173338,154],{"class":49},[36,173340,147781],{"class":416},[36,173342,54],{"class":53},[36,173344,34729],{"class":60},[36,173346,154],{"class":49},[36,173348,152656],{"class":416},[36,173350,54],{"class":53},[36,173352,181],{"class":60},[36,173354,75],{"class":49},[14,173356,173357,25363],{},[33,173358,155251],{},[26,173360,173362],{"className":28,"code":173361,"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,173363,173364,173375,173379,173392,173412],{"__ignoreMap":31},[36,173365,173366,173368,173370,173372],{"class":38,"line":39},[36,173367,31479],{"class":53},[36,173369,172985],{"class":49},[36,173371,31135],{"class":53},[36,173373,173374],{"class":49}," read_json, write_json\n",[36,173376,173377],{"class":38,"line":46},[36,173378,194],{"emptyLinePlaceholder":193},[36,173380,173381,173383,173385,173388,173390],{"class":38,"line":78},[36,173382,160360],{"class":49},[36,173384,54],{"class":53},[36,173386,173387],{"class":49}," read_json(",[36,173389,152475],{"class":998},[36,173391,75],{"class":49},[36,173393,173394,173396,173398,173400,173402,173404,173406,173408,173410],{"class":38,"line":125},[36,173395,171178],{"class":49},[36,173397,63421],{"class":998},[36,173399,52179],{"class":49},[36,173401,150532],{"class":998},[36,173403,154],{"class":49},[36,173405,152116],{"class":998},[36,173407,52179],{"class":49},[36,173409,1868],{"class":60},[36,173411,165796],{"class":49},[36,173413,173414,173417,173419],{"class":38,"line":131},[36,173415,173416],{"class":49},"write_json(",[36,173418,152475],{"class":998},[36,173420,173421],{"class":49},", students)\n",[21,173423,173425],{"id":173424},"_918-易错点","9.18 易错点",[851,173427,173428,173431,173436,173441,173444,173447],{},[854,173429,173430],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[854,173432,173433,173434,29130],{},"能指定异常类型就不要裸写 ",[33,173435,171538],{},[854,173437,173438,173440],{},[33,173439,171913],{}," 无论是否出错都会执行。",[854,173442,173443],{},"模块文件名不要和标准库重名。",[854,173445,173446],{},"导入自己写的模块时，要注意运行目录。",[854,173448,173449],{},"第三方包要安装到当前解释器或虚拟环境中。",[21,173451,173453],{"id":173452},"_919-本章练习","9.19 本章练习",[851,173455,173456,173459,173462,173468,173475],{},[854,173457,173458],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[854,173460,173461],{},"写函数读取文件，如果文件不存在则返回空字符串。",[854,173463,172876,173464,173467],{},[33,173465,173466],{},"math_utils.py","，实现加减乘除函数并导入使用。",[854,173469,173470,173471,173474],{},"创建一个 ",[33,173472,173473],{},"utils"," 包，把 JSON 读写函数放进去。",[854,173476,173477],{},"写一个程序，捕获除零异常和输入格式异常。",[807,173479,173480],{},"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":46,"depth":46,"links":173482},[173483,173484,173485,173486,173487,173488,173489,173490,173491,173492,173493,173499,173506,173508,173509,173510,173511,173512,173513],{"id":171335,"depth":46,"text":171336},{"id":171463,"depth":46,"text":171464},{"id":171512,"depth":46,"text":171513},{"id":171661,"depth":46,"text":171662},{"id":171833,"depth":46,"text":171834},{"id":171902,"depth":46,"text":171903},{"id":172013,"depth":46,"text":172014},{"id":172139,"depth":46,"text":172140},{"id":172264,"depth":46,"text":172265},{"id":172319,"depth":46,"text":172320},{"id":172418,"depth":46,"text":172419,"children":173494},[173495,173496,173497,173498],{"id":172422,"depth":78,"text":172423},{"id":172456,"depth":78,"text":172457},{"id":172495,"depth":78,"text":172496},{"id":172574,"depth":78,"text":172575},{"id":172597,"depth":46,"text":172598,"children":173500},[173501,173502,173503,173504,173505],{"id":172601,"depth":78,"text":172602},{"id":172684,"depth":78,"text":172685},{"id":172729,"depth":78,"text":172730},{"id":172788,"depth":78,"text":172789},{"id":172826,"depth":78,"text":172827},{"id":172860,"depth":46,"text":173507},"9.13 if name == \"main\"",{"id":172953,"depth":46,"text":172954},{"id":172998,"depth":46,"text":172999},{"id":173109,"depth":46,"text":173110},{"id":173167,"depth":46,"text":173168},{"id":173424,"depth":46,"text":173425},{"id":173452,"depth":46,"text":173453},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171327,"description":823},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173520,"title":173521,"body":173522,"description":173685,"extension":824,"meta":173686,"navigation":193,"path":173687,"seo":173688,"stem":173689,"__hash__":173690},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173523,"toc":173680},[173524,173527,173530,173533,173544,173546,173620,173623,173626,173629,173632,173635,173638,173641,173644,173647,173650],[10,173525,173521],{"id":173526},"python教程",[14,173528,173529],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,173531,173532],{},"建议学习环境：",[851,173534,173535,173538,173541],{},[854,173536,173537],{},"Python 版本：Python 3.10 及以上。",[854,173539,173540],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[854,173542,173543],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[21,173545,117722],{"id":117722},[851,173547,173548,173554,173560,173566,173572,173578,173584,173590,173596,173602,173608,173614],{},[854,173549,173550],{},[50,173551,173553],{"href":173552},".\u002Fch1-Python","Python环境与第一个程序",[854,173555,173556],{},[50,173557,173559],{"href":173558},".\u002Fch2","基础语法、变量与字符串",[854,173561,173562],{},[50,173563,173565],{"href":173564},".\u002Fch3","判断语句",[854,173567,173568],{},[50,173569,173571],{"href":173570},".\u002Fch4","循环语句",[854,173573,173574],{},[50,173575,173577],{"href":173576},".\u002Fch5","函数基础",[854,173579,173580],{},[50,173581,173583],{"href":173582},".\u002Fch6","数据容器",[854,173585,173586],{},[50,173587,173589],{"href":173588},".\u002Fch7","函数进阶",[854,173591,173592],{},[50,173593,173595],{"href":173594},".\u002Fch8","文件操作",[854,173597,173598],{},[50,173599,173601],{"href":173600},".\u002Fch9","异常、模块与包",[854,173603,173604],{},[50,173605,173607],{"href":173606},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[854,173609,173610],{},[50,173611,173613],{"href":173612},".\u002Fch11","面向对象基础",[854,173615,173616],{},[50,173617,173619],{"href":173618},".\u002Fch12","综合案例与复习路线",[21,173621,173622],{"id":173622},"学习路线",[14,173624,173625],{},"第一阶段：能运行程序。",[14,173627,173628],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,173630,173631],{},"第二阶段：能组织数据。",[14,173633,173634],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,173636,173637],{},"第三阶段：能封装逻辑。",[14,173639,173640],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,173642,173643],{},"第四阶段：能做小项目。",[14,173645,173646],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[21,173648,173649],{"id":173649},"参考资料",[851,173651,173652,173659,173666,173673],{},[854,173653,173654,173655],{},"黑马程序员 Python 入门教程推荐：",[50,173656,173657],{"href":173657,"rel":173658},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24609],[854,173660,173661,173662],{},"Python 官方中文教程：",[50,173663,173664],{"href":173664,"rel":173665},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24609],[854,173667,173668,173669],{},"Python 标准库文档：",[50,173670,173671],{"href":173671,"rel":173672},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24609],[854,173674,173675,173676],{},"pyecharts 文档：",[50,173677,173678],{"href":173678,"rel":173679},"https:\u002F\u002Fpyecharts.org\u002F",[24609],{"title":31,"searchDepth":46,"depth":46,"links":173681},[173682,173683,173684],{"id":117722,"depth":46,"text":117722},{"id":173622,"depth":46,"text":173622},{"id":173649,"depth":46,"text":173649},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24122},"\u002Fwiki\u002F2024-10-10-python",{"title":173521,"description":173685},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331454254]